Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Assistant documentaire RAG — 100 % local

Moteur de question-réponse sur un corpus de documents, fonctionnant entièrement en local : aucune donnée n'est envoyée à un service externe.

Architecture

Documents (txt/md/pdf) → découpage en morceaux avec chevauchement → embeddings (sentence-transformers, 384 dimensions) → index vectoriel (numpy) → recherche par similarité cosinus → génération ancrée sur les extraits (Ollama) → réponse avec citation des sources.

Fichier Rôle
rag_core.py lecture, découpage, embeddings, index, recherche
llm.py construction du prompt et appel au modèle
ingest.py construction de l'index
ask.py interrogation
evaluate.py mesure de la qualité

Installation

python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
ollama pull llama3.2:3b

Utilisation

python ingest.py                                  # construire l'index
python ask.py "quelle est la durée de la garantie ?"
python evaluate.py --with-llm                     # mesurer la qualité

Évaluation

Le projet inclut un protocole de mesure, souvent absent des démonstrations RAG :

  • Recall@k : la recherche ramène-t-elle le passage attendu ?
  • Taux de citation : la réponse s'appuie-t-elle sur une source identifiée ?
  • Refus correct : sur des questions hors corpus, le système répond-il « je ne trouve pas » au lieu d'inventer ?

Cette dernière mesure est la plus révélatrice : sans autorisation explicite de refuser, un modèle préfère produire une réponse plausible plutôt que rien.

Choix techniques

Pas de base vectorielle externe. L'index est une matrice numpy, la recherche un produit scalaire. Sur quelques milliers de morceaux, c'est instantané. Une base dédiée (FAISS, Chroma, Azure AI Search) devient nécessaire à partir de centaines de milliers de vecteurs : c'est une question de volume, pas de principe.

Chevauchement entre morceaux. Une information à cheval sur deux morceaux serait coupée et deviendrait introuvable ; le chevauchement garantit qu'elle apparaît entière quelque part.

Température à 0,1. Sur un usage documentaire, la variabilité est un défaut.

Limites connues

La recherche est purement sémantique : elle retrouve mal les références exactes (numéros d'article, codes produit). Une recherche hybride, combinant score vectoriel et score lexical BM25, serait la prochaine étape.

Pistes d'amélioration

  • Recherche hybride (vectoriel + BM25) et reranking
  • Journalisation des requêtes, latences et coûts
  • Interface web de démonstration

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages