Spaces:
Sleeping
Sleeping
File size: 3,520 Bytes
ccf256d da21448 ccf256d da21448 ccf256d da21448 ccf256d da21448 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | ---
title: TechDocs GraphRAG
emoji: 🕸️
colorFrom: indigo
colorTo: blue
sdk: docker
app_port: 7860
pinned: false
license: mit
short_description: GraphRAG sur documentation technique (Neo4j + OpenAI)
---
# 🕸️ TechDocs GraphRAG
Assistant de documentation technique qui combine **recherche vectorielle** et **graphe de connaissances Neo4j**
pour répondre à des questions multi-hop avec des sources traçables.
Un RAG classique retrouve des passages similaires à la question. TechDocs GraphRAG extrait en plus les
entités et relations du corpus (`StateGraph —PERSISTS_WITH→ Checkpointer —ENABLES→ Persistence`) et
suit ces liens au moment de répondre.
## Fonctionnalités
- Ingestion Markdown, découpage par paragraphes avec chevauchement.
- Extraction LLM d'entités typées et de relations avec preuve textuelle.
- Déduplication des entités par clé canonique (`State Graph`, `state_graph` → `stategraph`).
- Neo4j Community embarqué dans le conteneur, corpus indexé automatiquement au démarrage.
- Neo4j comme store unique : documents, chunks, index vectoriel, index plein texte, graphe.
- Recherche hybride : chunks proches → entités mentionnées + entités citées dans la question → traversée multi-hop.
- Interface Streamlit : sous-graphe utilisé, relations, extraits, sources.
- Mode comparaison RAG vectoriel vs GraphRAG.
## Architecture
```mermaid
flowchart LR
A[Markdown] --> B[ParagraphSplitter]
B --> C[Embeddings OpenAI]
B --> D[Extraction LLM]
C --> E[(Neo4j<br/>index vectoriel)]
D --> F[(Neo4j<br/>graphe d'entités)]
Q[Question] --> R[HybridRetriever]
E --> R
F --> R
R --> G[GraphRAGAssistant]
G --> S[Réponse sourcée]
```
### Modèle de graphe
```text
(:Document)-[:HAS_CHUNK]->(:Chunk {embedding})-[:MENTIONS]->(:Entity:Component)
(:Entity)-[:USES | PERSISTS_WITH | DEPENDS_ON | ...]->(:Entity)
```
Chaque relation porte `evidence` et `documents`, ce qui rend chaque fait vérifiable.
## Structure
```text
├── app.py
├── Dockerfile
├── data/
├── src/techdocs_graphrag/
│ ├── config.py
│ ├── models.py
│ ├── ports.py
│ ├── ingestion.py
│ ├── llm.py
│ ├── prompts.py
│ ├── extraction.py
│ ├── graph_store.py
│ ├── indexing.py
│ ├── retrieval.py
│ ├── answering.py
│ ├── visualization.py
│ ├── services.py
│ └── cli.py
└── tests/
```
## Configuration
| Variable | Défaut | Rôle |
|---|---|---|
| `OPENAI_API_KEY` | requis | Clé OpenAI |
| `NEO4J_URI` | `bolt://localhost:7687` | Neo4j embarqué dans le conteneur |
| `NEO4J_USERNAME` | `neo4j` | Utilisateur Neo4j |
| `NEO4J_PASSWORD` | `techdocs-local-password` | Mot de passe Neo4j (secret conseillé) |
| `NEO4J_DATABASE` | `neo4j` | Base Neo4j |
| `CHAT_MODEL` | `gpt-4o-mini` | Modèle de génération |
| `EMBEDDING_MODEL` | `text-embedding-3-small` | Modèle d'embeddings |
| `GRAPH_MAX_HOPS` | `2` | Profondeur de traversée |
| `VECTOR_TOP_K` | `5` | Nombre de chunks récupérés |
## Lancer en local
```bash
cp .env.example .env
pip install -e ".[dev]"
pytest
techdocs-index data --reset
streamlit run app.py
```
## Feuille de route
- Jeu d'évaluation annoté (30 à 50 questions) et métriques de fidélité.
- Fusion d'entités par similarité d'embeddings.
- Résumés de communautés (approche Microsoft GraphRAG) pour les questions globales.
- API FastAPI `POST /ask`.
|