Sari la conținutul principal

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:

ModCând se foloseșteNote
Căutare după cuvinte-cheieÎntotdeauna disponibilăClasare BM25; nu necesită model de embedding
Căutare hibridăEmbedding-urile sunt active în SetăriCombină 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

  1. Încărcați un fișier acceptat din comenzile pentru documente.
  2. Așteptați finalizarea procesării.
  3. Puneți o întrebare în chat.
  4. 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

EndpointScop
POST /api/documents/uploadÎncarcă un document acceptat
GET /api/documentsListează documentele încărcate
GET /api/documents/session/:sessionIdListează documentele unei sesiuni de chat
POST /api/documents/searchCaută în documente
DELETE /api/documents/:documentIdȘterge un document
GET /api/documents/embeddings/statusAfișează starea embedding-urilor
POST /api/documents/embeddings/regenerateRegenerează 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.

Documentație conexă