~/tools / Embeddings et recherche (RAG) / RAG Citation Checker
RAG Citation Checker — Vérifie les numéros de source et les citations d'une réponse RAG
Vérifiez les citations d'une réponse RAG par rapport aux sources que vous avez envoyées : chaque numéro de source doit exister, chaque extrait cité devrait figurer dans sa source, et l'outil liste les phrases sans numéro de source, les sources qui n'ont jamais été citées et les réponses qui ont été coupées. Lit les réponses de /api/chat d'Ollama (y compris en streaming), les réponses compatibles OpenAI et le texte brut. Rien ne quitte votre navigateur.
La réponse de l'exemple est écrite à la main pour montrer un extrait cité qui ne figure pas dans sa source.
4 sources (un tableau JSON de chaînes). Réponse lue comme une réponse de /api/chat d'Ollama, sous la forme de JSON avec citations.
Tokens du prompt (prompt_eval_count) : 306
- L'extrait cité de la citation #2 ne figure pas dans la source [4].
Citations
| Source | Extrait cité | Résultat |
|---|---|---|
| [2] | hnsw.ef_search is 40 by default | Trouvé tel quel |
| [4] | 4 bytes per dimension plus 8 | Absent de cette source |
Cela vérifie seulement que les numéros et les extraits correspondent aux sources. Cela ne dit pas si la réponse est correcte ni si une source appuie réellement une phrase.
Format de la réponse d'après la référence de l'API et le code source d'Ollama, vérifié sur Ollama 0.40.11 le 2026-11-05. Ollama API: /api/chat
Tout s'exécute dans votre navigateur. L'outil ne se connecte à rien.
Quand un modèle répond à partir de sources numérotées, les citations peuvent être vérifiées mécaniquement. Collez les mêmes sources que vous avez envoyées, au même format que dans le RAG Prompt Builder (un tableau JSON de chaînes ou d'objets, ou du texte séparé par des lignes --- ou par des lignes vides ; elles sont numérotées à partir de [1] de la même façon), et collez la réponse. La réponse peut être la réponse complète de /api/chat d'Ollama (l'outil prend message.content ; une réponse en streaming avec un objet JSON par ligne est assemblée), une réponse compatible OpenAI (choices[0].message.content) ou simplement le texte. Si la réponse est du JSON avec une réponse et une liste de citations, comme le demande le RAG Prompt Builder, l'outil vérifie chaque citation : le numéro de la source doit être l'un de ceux des sources, et l'extrait cité devrait figurer dans cette source, tel quel ou en ignorant les différences d'espaces, de casse, de caractères pleine chasse et de guillemets typographiques. Si la réponse est du texte, l'outil relève les numéros entre crochets, comme [2] ou [1, 3], signale les numéros qui ne correspondent à aucune source et liste les phrases qui n'ont pas de numéro. Dans les deux cas, il liste les sources qui n'ont jamais été citées et avertit quand il n'y a aucune citation, ou quand done_reason vaut "length", ce qui signifie que la réponse a été coupée par num_predict. Ce qu'il ne peut pas faire, c'est juger si la réponse est juste. Dans notre test avec qwen2.5:7b, une réponse citait mot pour mot la bonne règle de sa source et donnait pourtant un nombre faux, et une autre réponse disait ne pas savoir mais citait une source sans rapport. Une citation qui passe ici montre seulement que le texte cité figure dans la source.
Le cœur de cet outil est open source, sous licence MIT. github.com/seigo5555/toolkitbox-lib/src/rag-citations.ts
Cas d'usage
- Vérifier que la réponse d'un modèle local ne cite que des sources réellement envoyées, avec des extraits qui y figurent réellement
- Repérer les phrases d'une réponse qui n'ont pas de source, avant d'afficher la réponse aux utilisateurs
- Comparer des prompts ou des modèles sur les mêmes questions selon la fréquence à laquelle leurs citations tiennent
Utilisation
- Collez les sources que vous avez envoyées avec la question, dans le même ordre.
- Collez la réponse : la réponse complète de /api/chat, une réponse compatible OpenAI ou le texte de la réponse.
- Lisez le tableau des citations, les phrases sans numéro de source et les sources qui n'ont pas été citées.
FAQ
Un extrait cité est marqué comme introuvable. La réponse est-elle fausse ?
Pas forcément. Le modèle a pu paraphraser la source au lieu de la recopier. Mais un extrait qui ne figure pas dans la source ne peut pas être vérifié, donc considérez cette affirmation comme non étayée tant que vous n'avez pas lu la source.
Toutes les citations passent. La réponse est-elle correcte ?
Pas forcément. L'outil vérifie seulement que les numéros et les extraits correspondent aux sources. Dans notre test, le modèle a cité la bonne règle (4 fois les dimensions plus 8 octets) et a pourtant répondu 1552 octets au lieu de 1,544 pour un vecteur de 384 dimensions.
Pourquoi les sources doivent-elles être dans le même ordre ?
Les numéros de la réponse renvoient à l'ordre dans lequel les sources ont été envoyées. Si l'ordre diffère, [2] désigne un autre texte et la vérification n'a plus de sens.
Comment l'outil découpe-t-il la réponse en phrases ?
Aux sauts de ligne, après . ! ? suivis d'une espace, et après les signes pleine chasse 。!?. Un numéro placé juste après la fin d'une phrase, comme "… here. [1]", compte pour cette phrase. Des abréviations comme e.g. peuvent couper une phrase en deux.
Que signifie done_reason "length" ?
Dans le code source d'Ollama, c'est la raison indiquée quand la réponse a atteint la limite de tokens (num_predict) au lieu de s'arrêter d'elle-même. La fin de la réponse, et peut-être ses citations, manque.
Mes données sont-elles envoyées quelque part ?
Non. La vérification s'exécute dans votre navigateur. L'outil ne se connecte jamais à Ollama ni à aucun autre service.
Articles liés
- Stocker et rechercher des embeddings Ollama dans PostgreSQL avec pgvectorConservez des embeddings Ollama dans PostgreSQL avec pgvector, recherchez-les avec HNSW ou IVFFlat, et transmettez les résultats à /api/chat pour que la réponse cite ses sources.
- Embeddings avec Ollama : les bases pour la recherche et le RAGCréez des embeddings avec le /api/embed d'Ollama : les modèles et leurs tailles, truncate et dimensions, vecteurs de longueur unitaire et similarité cosinus, d'après la documentation officielle.