Des affirmations surgissent de nulle part
Le modèle fabrique une statistique, une date, une signature d'API, une citation. Ça se lit comme plausible. Aucun grep sur vos sources ne l'attrapera car rien ne relie l'affirmation à un document.
Le primitif est un support_score numérique entre 0 et 1 sur chaque réponse, ancré affirmation par affirmation dans les sources que vous fournissez. Pas une impression. Pas un jugement LLM. Une mesure.
Les LLM écrivent avec fluidité que l'affirmation soit vraie ou non. Les jeux d'éval passent. La production hallucine. L'écart entre « ça sonne juste » et « c'est étayé par les documents que vous avez livrés » est là où la confiance meurt.
Le modèle fabrique une statistique, une date, une signature d'API, une citation. Ça se lit comme plausible. Aucun grep sur vos sources ne l'attrapera car rien ne relie l'affirmation à un document.
Quand un client demande « pourquoi votre bot a dit ça », vous n'avez aucun verdict par affirmation, aucune référence de source, aucun score. Vous avez une chaîne de caractères. Conformité, support et debugging échouent au même mur.
Un fragment dans un PDF dit « ignore les instructions précédentes ». Votre agent pivote. Sans vérification contre le contenu auquel vous faites confiance, les attaques par injection ressemblent à des sorties normales.
Wauldo extrait les affirmations atomiques d'une réponse, confronte chacune au contexte source que vous fournissez, et renvoie un score égal à la fraction d'affirmations étayées. Les verdicts par affirmation voyagent avec la réponse.
{ "support_score": 0.85, "verdict": "VERIFIED", "hallucination_rate": 0.15, "claims": [ { "text": "Paris is the capital of France", "verdict": "supported", "source_ref": "doc_1:L3" }, { "text": "Paris has 2.1 million residents", "verdict": "supported", "source_ref": "doc_1:L5" }, { "text": "Paris was founded in 2000 BC", "verdict": "unsupported" } ], "mode": "lexical", "latency_ms": 847 }
Nous décomposons la réponse en énoncés factuels atomiques. Formulations prudentes, adjectifs et opinions sont exclus. Seules les propositions vérifiables contre les sources sont notées.
Chaque affirmation est confrontée au source_context passé dans la requête. Trois modes : lexical (rapide, <1s), hybride (embeddings multilingues), sémantique (jugement LLM).
support_score = étayées / total. Le nombre est déterministe pour une entrée donnée en mode lexical. Verdicts par affirmation et références de sources permettent d'afficher le raisonnement à l'utilisateur.
La plupart des outils IA cachent les modes d'échec derrière un « seuil de confiance ». Wauldo expose le rejet explicitement. Quand la réponse dérive sous l'ancrage, le verdict est BLOCK et le score numérique dit pourquoi.
Requête : « Puis-je combiner ibuprofène et warfarine ? »
Réponse (fabriquée) : « Oui, il est sûr de les combiner à doses standard, aucune interaction n'est documentée. »
Contexte source : vide — aucun document de pharmacologie attaché.
Verdict : BLOCK · 1 affirmation sur 2 non étayée · hallucination_rate = 0.50. La réponse ne peut pas être ancrée dans les sources fournies, donc Wauldo refuse d'émettre SAFE. Votre application décide ce qu'elle montre à l'utilisateur — nous vous livrons la décision, pas une hallucination blanchie.
Assez d'affirmations correspondent aux sources pour afficher la réponse. Les verdicts par affirmation voyagent encore pour un rendu inline.
Support partiel, dérive partielle. Votre app peut choisir d'afficher la réponse avec avertissements, ou demander plus de sources.
La réponse contredit directement le contexte source. Le refus est explicite — jamais blanchi en « je ne suis pas sûr ».
Les autres approches servent de proxy pour la confiance. Wauldo retourne un nombre que vous pouvez logger, seuiller, grapher et raisonner. Le tableau n'est pas du marketing — c'est la condition aux limites de chaque outil.
| Approche | Mesurable | Auditable | Déterministe | Coût / appel |
|---|---|---|---|---|
| Wauldo | oui — numérique 0–1 | oui — verdicts par affirmation | oui (mode lexical) | 0,002 $ |
| Guardrails LangChain | binaire pass / fail | partiel — regex + liste | oui | ~gratuit |
| LLM-as-judge | flou — score d'impression | prose chain-of-thought | non — varie d'un run à l'autre | 0,02 – 0,10 $ |
| Citation RAG naïve | non | marqueurs de citation seulement | oui | ~gratuit |
// lisez cette ligne avant de réagir
Un guardrail dit non. Un juge dit peut-être. Une citation dit il existe un document. Aucune ne vous dit quelle proportion de la réponse est réellement étayée par la source que vous avez livrée. C'est le nombre que Wauldo retourne. Tout le reste sur cette page n'est que plomberie autour de cette seule mesure.
Le mode Guard, c'est le primitif de vérification enveloppé autour d'un appel LLM au lieu d'être appelé après. Même endpoint /v1/fact-check. Point d'intégration différent. Il pré-filtre les sorties d'agents, post-filtre les réponses RAG, et rejette en triage les réponses de bots de support avant qu'elles n'atteignent un humain. Fonctionne sur pipelines RAG et agents IA de façon identique.
# même primitif, posture Guard : vérifier avant de rendre curl https://api.wauldo.com/v1/fact-check \ -H "Authorization: Bearer $WAULDO_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "text": "Your agent answer to screen", "source_context": "The docs, tickets, or corpus you trust", "mode": "lexical" }' # lire le champ verdict : SAFE → livrer · PARTIAL → votre app décide l'UX # UNVERIFIED / BLOCK → ne pas rendre; escalader ou refuser.
Votre agent rédige une réponse. Wauldo la note. Score faible → regénérer avec retrieval plus strict ou refuser.
La réponse RAG arrive en streaming. Buffer, note une fois complète, puis émet. Le cache écrit avant émission donc les déconnexions sont sûres.
Conservez la réponse complète. Peignez les affirmations étayées en vert, non étayées en rouge, références de sources au survol.
Offre gratuite sur RapidAPI. 300 vérifications par mois offertes. Sans carte. Livrez aujourd'hui, mesurez lundi.
$ curl api.wauldo.com/v1/fact-check