Chat cu documente
Chatul cu documente permite Libre WebUI să caute în documentele încărcate și să adauge fragmente relevante în contextul conversației.
Fișiere acceptate
Sunt acceptate următoarele încărcări:
- PDF (cu proveniență per pagină)
- Text simplu și jurnale
- Markdown (
.md,.markdown,.mdx, cu proveniență per secțiune) - HTML
- Documente Word (
.docx) - Prezentări (
.pptx, cu proveniență per diapozitiv) - Foi de calcul (
.xlsx, cu proveniență per foaie) și CSV/TSV - Cod sursă (TypeScript, Python, Go, Rust, SQL, YAML și alte limbaje comune)
- Imagini (
.png,.jpg,.webp,.gif) — textul este citit de modelul de viziune configurat (Setări → Implicite → Model de viziune) - Audio (
.wav,.webm) — transcris prin furnizorul de conversie a vorbirii în text, în spatele aceleiași porți de acces STT ca intrarea vocală - Dimensiune maximă a fișierului: 10 MB
Formatele Office sunt despachetate cu un parser limitat din depozit — nicio bibliotecă terță pentru documente nu rulează în procesul serverului. Reîncărcarea unor octeți identici în același domeniu este deduplicată, nu ingerată de două ori.
Extragerea imaginilor și sunetului este rutată către furnizorii configurați deja — nu este inclus niciun OCR local sau motor de vorbire, iar din instanță nu pleacă nimic în afara apelului către modelul ales. Un PDF fără strat de text (o scanare) este tratat în același mod: imaginile JPEG încorporate ale paginilor sunt recuperate și citite prin modelul de viziune, cu proveniență per pagină. Scanările stocate în alte codificări de imagine (fax CCITT, JBIG2) nu produc text, iar dacă nu este configurat niciun model de viziune sau furnizor STT, încărcarea este marcată ca eșuată, cu motivul afișat în Setări → Documente.
Fișierele sunt procesate de backend și stocate împreună cu restul datelor aplicației.
Moduri de căutare
Libre WebUI acceptă două moduri de regăsire:
| Mod | Când se folosește | Note |
|---|---|---|
| Căutare după cuvinte-cheie | Întotdeauna disponibilă | Clasare BM25; nu necesită model de embedding |
| Căutare hibridă | Embedding-urile sunt active în Setări | Combină clasarea vectorială cu BM25 prin fuziunea rangurilor reciproce |
Când embedding-urile sunt active, fiecare interogare rulează ambele clasări și le combină: o potrivire exactă a termenului poate depăși un fragment similar semantic, dar mai vag, iar fragmentele ale căror embedding-uri sunt încă generate rămân accesibile prin componenta lexicală. Dacă embedding-urile eșuează sau sunt dezactivate, căutarea în documente revine la potrivirea exclusivă după cuvinte-cheie.
Evaluarea lexicală rulează în proces peste fragmentele accesibile. Libre nu păstrează intenționat pe disc un index de text integral pentru fragmentele documentelor, deoarece textul fragmentului este stocat criptat, iar un index de tokenuri ar păstra text simplu lângă textul cifrat. Un fragment este eligibil pentru clasarea lexicală numai dacă include integral cel puțin un cuvânt al interogării, astfel încât un identificator compus precum ALPHA_BETA_GAMMA nu afișează niciodată text care are în comun doar unul dintre segmente.
Colecțiile de cunoștințe partajate cu dvs. participă automat la ambele clasări. Controlul lor de acces este aplicat în interogarea vectorială — permisiunile sunt publicate în ACL-ul indexului, astfel încât revocarea unei partajări ascunde documentele chiar la următoarea căutare, fără a recrea embedding-urile.
Activarea căutării semantice
Instalați un model de embedding:
ollama pull nomic-embed-text
Apoi deschideți Setările și activați embedding-urile. Puteți folosi modele de embedding Ollama locale sau pluginuri ale furnizorilor cu capabilități de embedding.
Setări implicite pentru embedding:
- Model:
nomic-embed-text - Dimensiunea fragmentului: 1000 de caractere
- Suprapunerea fragmentelor: 200 de caractere
- Pragul de similitudine: 0.3
Citări și modul document integral
Fragmentele regăsite includ proveniența: numele fișierului sursă, indexul fragmentului, scorul regăsirii și — pentru formatele cu hartă de segmente — pagina, diapozitivul, foaia sau secțiunea Markdown din care provine fragmentul. Contextul chatului etichetează fiecare fragment cu acea poziție, iar panoul Surse al conversației enumeră pozițiile citate sub fiecare document.
Fiecare chat poate trece și la modul document integral din panoul Surse. În locul fragmentelor regăsite, mesajul trimite întregul conținut extras al fiecărui document din domeniu. O limită de tokenuri (FULL_DOCUMENT_CONTEXT_MAX_TOKENS, implicit 32000) protejează fereastra de context a modelului: când documentele atașate o depășesc, chatul revine la regăsire, iar panoul Surse explică motivul.
Încărcare și căutare
- Încărcați un fișier acceptat din comenzile pentru documente.
- Așteptați finalizarea procesării.
- Puneți o întrebare în chat.
- Libre WebUI regăsește fragmente relevante pentru sesiune și le include drept context.
Exemple de prompturi:
Summarize the uploaded document in five bullets.
What deadlines are mentioned in the PDF?
Find the section that talks about pricing.
Compare the uploaded policy with this proposed change.
Endpoint-uri API
| Endpoint | Scop |
|---|---|
POST /api/documents/upload | Încarcă un document acceptat |
GET /api/documents | Listează documentele încărcate |
GET /api/documents/session/:sessionId | Listează documentele unei sesiuni de chat |
POST /api/documents/search | Caută în documente |
DELETE /api/documents/:documentId | Șterge un document |
GET /api/documents/embeddings/status | Afișează starea embedding-urilor |
POST /api/documents/embeddings/regenerate | Regenerează embedding-urile |
Bune practici
- Păstrați încărcările relevante pentru sarcina curentă.
- Preferați fișiere PDF bazate pe text; cele scanate funcționează prin modelul de viziune, dar necesită un apel de model per pagină.
- Regenerați embedding-urile după schimbarea modelului de embedding.
- Reduceți pragul de similitudine dacă o căutare semantică omite context util.
- Măriți pragul dacă rezultatele sunt prea zgomotoase.