nvikou's picture
Upgrade CRAG: embeddings, SQL SQLite, pro UI, 60-eval, local data
98aa813 verified
|
Raw History Blame Contribute Delete
3.91 kB
metadata
title: Corrective RAG Data Assistant
emoji: 🧭
colorFrom: gray
colorTo: green
sdk: docker
app_port: 7860
pinned: false

Corrective RAG Data Assistant

Assistant d'analyse documentaire utilisant un pipeline Corrective RAG (CRAG) : évaluation de pertinence, filtrage, réécriture de requête, routage SQL sécurisé, génération sourcée et vérification (faithfulness). Si les preuves manquent, le système refuse plutôt que d'inventer.

Conforme à Rag_crag.md, déployable en Docker sur un Hugging Face Space, LLM deepseek-ai/DeepSeek-V4.1-Flash.

Architecture

Question utilisateur
        │
        ▼
1. Recherche vectorielle (embeddings fastembed)
        │
        ▼
2. Évaluateur de pertinence (LLM structuré)
        │
        ├── CORRECT ───► Filtrage → génération sourcée
        ├── AMBIGUOUS ─► Réécriture → SQL + re-retrieval → fusion
        └── INCORRECT ─► SQL sécurisé → réponse ou refus
                                      │
                                      ▼
                         Vérification faithfulness (+ boucle)

LangGraph (app/crag/graph.py) : retrieve_internal, grade_documents, refine_context, rewrite_question, search_external, merge_context, generate_answer, verify_answer.

Stack (alignée Rag_crag.md)

Brique Implémentation
Documents MD / PDF / CSV (data/policies, data/reports, data/faq)
Données chiffrées CSV + SQLite data/database/company.db
SQL app/sql/ — SELECT only, whitelist tables/colonnes, LIMIT 100, audit log
Embeddings fastembed (ONNX, CPU) paraphrase-multilingual-MiniLM-L12-v2 ; repli TF-IDF si indisponible
LLM DeepSeek via HF Inference API (ou mock pour CI)
UI FastAPI + static HTML/CSS/JS
Eval 60 questions annotées (eval/eval_questions.json)

SQL Server de production n'est pas hébergeable sur un Space HF : SQLite en lecture seule applique les mêmes règles de sécurité (pas de SQL libre, validateur, whitelist).

Démarrage local

cp .env.example .env
# HF_TOKEN + LLM_PROVIDER=hf pour de vraies réponses
# EMBEDDING_BACKEND=auto (défaut) ou tfidf pour CI offline

docker compose up --build
# UI : http://localhost:7860

Sans Docker :

python -m venv .venv && source .venv/bin/activate  # Windows: .venv\Scripts\activate
pip install -r requirements-dev.txt
python scripts/build_data_assets.py   # PDF + company.db
uvicorn app.main:app --reload --port 7860
pytest tests/ -v
python eval/evaluate.py

Métriques

eval/evaluate.py compare Corrective RAG vs RAG classique naïf sur 60 questions (context precision/recall, faithfulness, answer relevancy, abstention accuracy, SQL execution accuracy, fallback/correction rate).

Résultats dans l'onglet Évaluation (GET /api/metrics).

Structure

corrective-rag-data-assistant/
├── app/
│   ├── api/routes.py
│   ├── core/{config,security}.py
│   ├── crag/          # pipeline LangGraph
│   ├── sql/           # validator, router, executor, seed
│   └── ingestion/     # loaders multi-formats + indexer embeddings
├── data/
│   ├── policies/      # .md + .pdf
│   ├── reports/       # .csv + .md/.pdf
│   ├── faq/           # .md
│   └── database/company.db
├── eval/              # 60 questions + evaluate.py
├── static/
├── tests/
├── scripts/
└── Rag_crag.md

Limites

  • SQL Server non hébergé sur HF Space → SQLite local équivalent sécurisé.
  • Embeddings : premier démarrage télécharge le modèle ONNX (~80–120 Mo).
  • NL→SQL : heuristique whitelistée (démo), pas un parseur NL2SQL production.
  • Métriques mock non représentatives tant que LLM_PROVIDER=mock.