LITEOPSDOCS
Agents & SystèmesPacemaker

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_cos

3. Chunking

Le decoupage est realise par lib/rag.ts avec les parametres suivants :

ParametreValeurRaison
Taille cible~500 tokensEquilibre entre contexte et precision
Overlap50 tokensEvite les coupures d'information
Respect des phrasesOuiNe coupe jamais au milieu d'une phrase

Algorithme

  1. Le texte est decouupe en phrases (detection par ponctuation)
  2. Les phrases sont accumulees jusqu'a atteindre ~500 tokens
  3. Un overlap de 50 tokens est conserve entre chunks consecutifs
  4. Chaque chunk est indexe avec sa position (chunk_index)

4. Embedding

ParametreValeur
ModeleVoyage AI voyage-3
Dimensions1024
Input type indexation"document"
Input type recherche"query"
Batch max128 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

ContexteSeuil de distanceExplication
Semaine concernee0.75Plus permissif pour la semaine en cours
Autre semaine0.70Plus 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 :

  1. Embedde la query avec input_type: "query"
  2. Execute la recherche vectorielle
  3. Filtre par seuil de distance
  4. 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

SourceMethode d'indexation
Upload documentVia /api/docs/upload
Compte-rendu parseIndexe automatiquement apres parsing
Photo OCRTexte OCR indexe lors de l'integration
Livrable genereContenu indexe automatiquement

8. Performance

MesureImplementation
Debounce recherche500ms cote client
Pagination docsSi plus de 50 documents
Lazy loadingImages documents
Batch embeddingJusqu'a 128 chunks par appel API

On this page