Pipeline RAG
Retrieval-Augmented Generation : chunking, embedding Voyage AI et recherche vectorielle dans Turso.
REF-SPEC/PM-013 v1.0 — 2026-04-05
1. Principe
Le pipeline RAG de Pacemaker enrichit automatiquement chaque prompt LLM avec le contexte documentaire pertinent. Les documents sont decoupes en chunks, embeddes via Voyage AI, et stockes dans Turso avec l'extension libsql-vector.
2. Architecture
Document source Chunking Embedding Stockage
(texte, CR, ──▶ ~500 tokens ──▶ Voyage AI ──▶ doc_chunks
photo OCR) overlap 50 voyage-3 F32_BLOB(1024)
sentence-aware 1024 dims Turso
│
│
Prompt LLM ◀── Formatage ◀── Filtrage seuil ◀── Recherche │
(enrichi) bloc RAG (0.70-0.75) vector_distance_cos3. Chunking
Le decoupage est realise par lib/rag.ts avec les parametres suivants :
| Parametre | Valeur | Raison |
|---|---|---|
| Taille cible | ~500 tokens | Equilibre entre contexte et precision |
| Overlap | 50 tokens | Evite les coupures d'information |
| Respect des phrases | Oui | Ne coupe jamais au milieu d'une phrase |
Algorithme
- Le texte est decouupe en phrases (detection par ponctuation)
- Les phrases sont accumulees jusqu'a atteindre ~500 tokens
- Un overlap de 50 tokens est conserve entre chunks consecutifs
- Chaque chunk est indexe avec sa position (
chunk_index)
4. Embedding
| Parametre | Valeur |
|---|---|
| Modele | Voyage AI voyage-3 |
| Dimensions | 1024 |
| Input type indexation | "document" |
| Input type recherche | "query" |
| Batch max | 128 chunks par appel |
La distinction "document" / "query" pour le parametre input_type est une optimisation de Voyage AI qui ameliore la qualite de la recherche.
5. Recherche vectorielle
La recherche utilise la fonction vector_distance_cos de libsql-vector :
SELECT
dc.content,
d.title,
vector_distance_cos(dc.embedding, ?) AS distance
FROM doc_chunks dc
JOIN documents d ON d.id = dc.doc_id
ORDER BY distance ASC
LIMIT ?Seuils de filtrage
| Contexte | Seuil de distance | Explication |
|---|---|---|
| Semaine concernee | 0.75 | Plus permissif pour la semaine en cours |
| Autre semaine | 0.70 | Plus strict pour eviter le bruit |
Les resultats au-dela du seuil sont ecartes.
6. Injection dans les prompts
La fonction getRelevantContext(query, weekId) orchestre le pipeline complet :
- Embedde la query avec
input_type: "query" - Execute la recherche vectorielle
- Filtre par seuil de distance
- Formate le bloc contextuel
Format du bloc RAG
=== CONTEXTE DOCUMENTAIRE PERTINENT (RAG) ===
[Source: Compte-rendu cadrage 15 mars]
Le client a valide le perimetre suivant : tableaux de bord
DAS, indicateurs cles RSE, migration Power BI Service...
[Source: Cahier des charges v2]
Les KPI prioritaires identifies sont : taux de retour a
l'emploi, delai moyen de traitement, satisfaction usagers...
===7. Sources alimentant le RAG
| Source | Methode d'indexation |
|---|---|
| Upload document | Via /api/docs/upload |
| Compte-rendu parse | Indexe automatiquement apres parsing |
| Photo OCR | Texte OCR indexe lors de l'integration |
| Livrable genere | Contenu indexe automatiquement |
8. Performance
| Mesure | Implementation |
|---|---|
| Debounce recherche | 500ms cote client |
| Pagination docs | Si plus de 50 documents |
| Lazy loading | Images documents |
| Batch embedding | Jusqu'a 128 chunks par appel API |