// pour pipelines RAG

Votre RAG a tort avec assurance.
Mesurez-le.

Vous récupérez des chunks. Vous les stuffez dans un prompt. Le LLM retourne un paragraphe fluide avec un numéro de citation à la fin. Rien dans ce pipeline ne vérifie réellement que la réponse est supportée par ce que vous avez récupéré. Votre eval set passe. La prod dérive. Les utilisateurs s'en rendent compte avant vos dashboards.

SDKs MIT · 500 vérifications/mois gratuit
// la douleur

Il récupère, répond, ne cite rien.

Trois modes d'échec que chaque équipe RAG en production a déjà shippé à ses utilisateurs, et découvert au pire moment.

01 · GAP DE CITATION

Ça paraît ancré. Ça ne l'est pas.

Le LLM paraphrase un chunk récupéré, réorganise les entités, et glisse un chiffre plausible qui n'était nulle part dans le contexte. La réponse se lit comme correcte. Aucun mécanisme dans votre stack ne dit le contraire.

02 · AVEUGLEMENT D'ÉVAL

100 % sur votre set. 15–40 % de drift.

Votre eval golden est une tranche étroite d'une longue queue. Le trafic prod dérive vers des queries out-of-distribution, votre retriever pull des voisins non pertinents, le LLM comble le gap avec de la fiction fluide. Vos dashboards ne voient rien.

03 · AUDIT PANIC

Un utilisateur a flag une réponse.

Vous ouvrez votre outil de tracing. Lequel des 8 chunks a fait dériver la réponse ? Quelle affirmation dans la réponse n'était pas supportée ? Sans verdicts par affirmation sur chaque requête, vous reconstruisez les preuves depuis les logs, vous ne les lisez pas.

// avant / après

Branchez Wauldo entre le retrieval et la réponse.

Un seul appel. Prend la réponse plus les chunks que vous avez déjà récupérés. Retourne un score de support et un détail par affirmation.

AVANT · votre pipeline aujourd'huinon vérifié
# Flow
query
   retriever.search(k=8)
   llm.generate(prompt, chunks)
   answer

# Signal ground-truth : aucun
# Attribution par affirmation : aucune
# Audit trail : espoir
APRÈS · un appel en plusvérifié
# Flow
query
   retriever.search(k=8)
   llm.generate(prompt, chunks)
   wauldo.fact_check(answer, chunks)
   answer + support_score + verdicts[]

# support_score : 0.0–1.0
# verdict par affirmation : supported | partial | unsupported
# audit trail : stocké

Wauldo prend deux inputs : la réponse générée, et le texte source récupéré. Il retourne le détail du grounding. Pas de retraining. Pas de changement de prompt. Pas de migration de vector DB. Votre retriever, votre LLM, votre stratégie de chunking, votre reranker — rien n'est touché. Vous ajoutez une ligne, vous gagnez un plancher mesurable sous chaque réponse.

// 8 lignes

Votre RAG + Wauldo en 8 lignes de Python.

Branchez sur n'importe quel retriever existant. LangChain, LlamaIndex, Haystack, ou maison — la signature est la même.

python · wauldo sdk 0.10.0pip install wauldo
from wauldo import Wauldo

w = Wauldo(api_key=os.environ["WAULDO_API_KEY"])

# Votre RAG existant
chunks = retriever.retrieve(query)
answer = llm.generate(query, context=chunks)

# Ajouter la vérification — 1 ligne
result = w.fact_check(text=answer, source_context="\n".join(chunks))

if result.verdict == "UNVERIFIED":
    answer = "Je n'ai pas de sources fiables pour répondre."
policy Choisissez votre propre gate. Les gates strictes éliminent le haut de la distribution d'hallucinations mais rejettent davantage de réponses partielles. Les gates lâches laissent passer les réponses partielles avec un caveat. Les surfaces régulées veulent la gate la plus stricte tolérable. Le score est le primitive ; la policy est à vous — utilisez le champ verdict (SAFE / PARTIAL / UNVERIFIED) ou fixez un seuil numérique qui vous appartient.
// benchmark RAG

89 % sur les tâches RAG-only. 100 % défense injection.

70 cas adversariaux à travers retrieval factuel, prompt injection et précision de citation. 4 runs, reproductible. La médiane sur la cohorte est 91 %, avec un écart de +48 points sur l'injection.

Benchmark RAG · 70 cas · 4 runs en direct
Framework RAG factuel RAG injection Précision citation
Wauldo 100 92 100
LlamaIndex 81 48 72
LangChain 78 44 70
Haystack 73 41 65

Reproduire : git clone github.com/wauldoai/wauldo-leaderboard && cargo run  ·  leaderboard complet →

// aussi pour

Surface différente. Même primitive.

L'appel fact-check ne sait pas s'il est derrière un pipeline RAG, une boucle d'agent ou un bot support. Choisissez la forme qui colle à votre stack.

// faq

Questions que les équipes RAG posent en premier.

Wauldo remplace-t-il mon retriever ou mon LLM ?

Non. Il tourne à côté. Vous passez la réponse que votre pipeline a déjà produite, plus les chunks que votre retriever a déjà fetchés, et vous recevez un score de grounding en retour. Votre vector DB, votre reranker, votre LLM, votre prompt — tout inchangé. Wauldo est une couche de mesure, pas un rewrite de framework.

Ça marche avec ma vector DB ?

Wauldo se moque de l'endroit où vivent vos chunks. Il n'a besoin que de deux strings : la réponse générée et le texte source concaténé. Marche avec Pinecone, Weaviate, Qdrant, pgvector, Chroma, Elasticsearch, un dictionnaire in-memory, ou un fichier plat que vous lisez à chaque query. La couche stockage est orthogonale.

Quel est l'impact latence ?

Trois modes, choisis par query. Le mode lexical tourne en environ une seconde et matche tokens et entités contre la source. Le mode hybrid ajoute une comparaison par embeddings multilingues pour les cas de paraphrase, environ trois à cinq secondes. Le mode semantic ajoute une passe LLM-judge pour les affirmations ambiguës, cinq à quinze secondes. La plupart des équipes RAG mettent lexical par défaut sur les hot paths et hybrid sur les surfaces high-stakes.

Le streaming est supporté ?

La vérification tourne sur la réponse complète — on ne peut pas scorer une affirmation à moitié formée contre une source. Pour l'UX streaming, le pattern est : émettre les tokens optimistement à l'utilisateur, bufferiser la réponse complète côté serveur, lancer le fact-check sur le texte bufferisé, puis confirmer, annoter, ou retirer une fois le verdict tombé. Le transport streaming de Wauldo suit exactement ce schéma.

Et le multilingue ?

Le mode hybrid utilise un modèle d'embeddings multilingue. Le grounding cross-langue est testé sur français, anglais et espagnol — une réponse anglaise groundée contre un chunk source français retourne un score de support défendable. Ajouter plus de langues, c'est un swap de modèle, pas un rewrite.

Build reproductible MIT · self-hostable 5 ms p50 · région CDG 500 vérifications/mois · gratuit

Mesurez le grounding de votre RAG. Arrêtez de deviner.

Gratuit via RapidAPI. 500 vérifications/mois. Sans carte bancaire. Collez une réponse, collez les chunks, regardez le verdict tomber.

$ curl api.wauldo.com/v1/fact-check