Aller au contenu principal

Discussion avec des documents

La discussion avec des documents permet à Libre WebUI de rechercher dans les documents importés et d’ajouter des extraits pertinents au contexte de la discussion.

Fichiers pris en charge

Formats actuellement pris en charge à l’importation :

  • PDF (avec provenance par page)
  • Texte brut et journaux
  • Markdown (.md, .markdown, .mdx, avec provenance par section)
  • HTML
  • Documents Word (.docx)
  • Présentations (.pptx, avec provenance par diapositive)
  • Feuilles de calcul (.xlsx, avec provenance par feuille) et CSV/TSV
  • Code source (TypeScript, Python, Go, Rust, SQL, YAML et autres langages courants)
  • Images (.png, .jpg, .webp, .gif) — le texte est lu par le modèle de vision configuré (Paramètres → Valeurs par défaut → Modèle de vision)
  • Audio (.wav, .webm) — transcrit par votre fournisseur de reconnaissance vocale, avec le même contrôle d’accès STT que la saisie vocale
  • Taille maximale des fichiers : 10 MB

Les formats Office sont décompressés par un analyseur borné inclus dans le dépôt : aucune bibliothèque de documents tierce ne s’exécute dans le processus serveur. Si des octets identiques sont importés à nouveau dans le même périmètre, ils sont dédupliqués au lieu d’être ingérés une deuxième fois.

L’extraction des images et de l’audio est confiée aux fournisseurs que vous avez déjà configurés : aucun moteur local de reconnaissance optique ou vocale n’est inclus, et rien ne quitte l’instance hormis l’appel au modèle que vous avez choisi. Un PDF sans couche de texte (une numérisation) est traité de la même manière : les images JPEG intégrées de ses pages sont récupérées et lues par le modèle de vision, avec une provenance par page. Les numérisations stockées dans d’autres encodages d’image (fax CCITT, JBIG2) ne produisent toujours aucun texte. Si aucun modèle de vision ou fournisseur STT n’est configuré, l’importation est marquée comme échouée et la raison apparaît dans Paramètres → Documents.

Les fichiers sont traités par le serveur dorsal et stockés avec le reste des données de l’application.

Modes de recherche

Libre WebUI prend en charge deux modes de récupération :

ModeQuand l’utiliserRemarques
Recherche par mots-clésToujours disponibleClassement BM25 ; aucun modèle de plongement requis
Recherche hybridePlongements activés dans les paramètresFusionne le classement vectoriel et BM25 par fusion réciproque des rangs

Lorsque les plongements sont activés, chaque requête exécute les deux classements et les fusionne : une correspondance exacte de terme peut devancer un fragment sémantiquement proche mais plus vague, et les fragments dont les plongements sont encore en cours de génération restent accessibles par la recherche lexicale. Si les plongements échouent ou sont désactivés, la recherche documentaire revient à une simple correspondance par mots-clés.

Le score lexical est calculé dans le processus sur les fragments auxquels vous avez accès. Libre ne conserve volontairement aucun index plein texte sur disque pour les fragments de documents, car leur texte est stocké chiffré et un index de jetons conserverait du texte en clair à côté du texte chiffré. Un fragment ne peut participer au classement lexical que s’il contient intégralement au moins un mot de la requête. Ainsi, un identifiant composé tel que ALPHA_BETA_GAMMA ne fait jamais apparaître du texte qui n’en partagerait qu’un fragment.

Les collections de connaissances partagées avec vous rejoignent automatiquement les deux classements. Leur contrôle d’accès est appliqué au sein même de la requête vectorielle : les autorisations sont publiées dans la liste de contrôle d’accès de l’index. La révocation d’un partage masque donc ces documents dès la recherche suivante, sans qu’il soit nécessaire de recalculer les plongements.

Activer la recherche sémantique

Installez un modèle de plongement :

ollama pull nomic-embed-text

Ouvrez ensuite les paramètres et activez les plongements. Vous pouvez utiliser des modèles de plongement Ollama locaux ou des plugins fournisseurs prenant en charge les plongements.

Paramètres de plongement par défaut :

  • Modèle : nomic-embed-text
  • Taille des fragments : 1000 caractères
  • Chevauchement des fragments : 200 caractères
  • Seuil de similarité : 0.3

Citations et mode document intégral

Les extraits récupérés comportent leur provenance : nom du fichier source, indice du fragment, score de récupération et, pour les formats dotés d’une carte des segments, page, diapositive, feuille ou section Markdown d’origine. Le contexte de discussion indique cet emplacement pour chaque extrait, et le volet Sources de la conversation répertorie les emplacements cités sous chaque document.

Chaque discussion peut également passer en mode document intégral depuis le volet Sources. Au lieu d’extraits récupérés, la totalité du contenu extrait de chaque document compris dans le périmètre est envoyée avec le message. Une limite de jetons (FULL_DOCUMENT_CONTEXT_MAX_TOKENS, 32000 par défaut) protège la fenêtre de contexte du modèle : lorsque les documents joints la dépassent, la discussion revient à la récupération d’extraits et le volet Sources en explique la raison.

Importer et rechercher

  1. Importez un fichier pris en charge depuis les commandes de documents.
  2. Attendez la fin de son traitement.
  3. Posez une question dans la discussion.
  4. Libre WebUI récupère les fragments pertinents pour cette session et les inclut dans le contexte.

Exemples de prompts :

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.

Points de terminaison de l’API

Point de terminaisonRôle
POST /api/documents/uploadImporter un document pris en charge
GET /api/documentsRépertorier les documents importés
GET /api/documents/session/:sessionIdRépertorier les documents d’une discussion
POST /api/documents/searchRechercher dans les documents
DELETE /api/documents/:documentIdSupprimer un document
GET /api/documents/embeddings/statusConsulter l’état des plongements
POST /api/documents/embeddings/regenerateRégénérer les plongements

Bonnes pratiques

  • Limitez les importations à la tâche en cours.
  • Préférez les PDF contenant du texte ; les PDF numérisés fonctionnent grâce au modèle de vision, mais nécessitent un appel au modèle par page.
  • Régénérez les plongements après avoir changé de modèle de plongement.
  • Abaissez le seuil de similarité si la recherche sémantique omet du contexte utile.
  • Relevez le seuil si les résultats semblent trop imprécis.

Documentation connexe