~/tools / Embeddings y búsqueda (RAG) / RAG Citation Checker
RAG Citation Checker — Comprueba números de fuente y citas de una respuesta RAG con las fuentes
Comprueba las citas de una respuesta RAG con las fuentes que enviaste: cada número de fuente debe existir, cada fragmento citado debería aparecer en su fuente, y la herramienta enumera las frases sin número de fuente, las fuentes que nunca se citaron y las respuestas que se cortaron. Lee respuestas de /api/chat de Ollama (también en streaming), respuestas compatibles con OpenAI y texto plano. Nada sale de tu navegador.
La respuesta del ejemplo está escrita a mano para mostrar un fragmento citado que no está en su fuente.
4 fuentes (un array JSON de cadenas). Respuesta leída como una respuesta de /api/chat de Ollama, en forma de JSON con citas.
Tokens del prompt (prompt_eval_count): 306
- El fragmento citado de la cita #2 no está en la fuente [4].
Citas
| Fuente | Fragmento citado | Resultado |
|---|---|---|
| [2] | hnsw.ef_search is 40 by default | Encontrado tal cual |
| [4] | 4 bytes per dimension plus 8 | No está en esta fuente |
Esto solo comprueba que los números y los fragmentos citados coinciden con las fuentes. No puede decir si la respuesta es correcta ni si una fuente respalda de verdad una frase.
Formato de la respuesta según la referencia de la API y el código fuente de Ollama, comprobado en Ollama 0.40.11 el 2026-11-05. Ollama API: /api/chat
Todo se ejecuta en tu navegador. La herramienta no se conecta a nada.
Cuando un modelo responde a partir de fuentes numeradas, las citas se pueden comprobar de forma mecánica. Pega las mismas fuentes que enviaste, con el mismo formato que en el RAG Prompt Builder (un array JSON de cadenas o de objetos, o texto separado por líneas --- o por líneas en blanco; se numeran desde [1] de la misma manera), y pega la respuesta. La respuesta puede ser la respuesta completa de /api/chat de Ollama (la herramienta toma message.content; una respuesta en streaming con un objeto JSON por línea se une), una respuesta compatible con OpenAI (choices[0].message.content) o solo el texto. Si la respuesta es un JSON con una respuesta y una lista de citas, como lo pide el RAG Prompt Builder, la herramienta comprueba cada cita: el número de fuente debe ser uno de los de las fuentes, y el fragmento citado debería aparecer en esa fuente, tal cual o ignorando diferencias de espacios, mayúsculas y minúsculas, caracteres de ancho completo y comillas tipográficas. Si la respuesta es texto, la herramienta recoge los números entre corchetes, como [2] o [1, 3], indica los números que no corresponden a ninguna fuente y enumera las frases que no tienen número. En ambos casos enumera las fuentes que nunca se citaron y avisa cuando no hay ninguna cita, o cuando done_reason es "length", lo que significa que la respuesta se cortó por num_predict. Lo que no puede hacer es juzgar si la respuesta es correcta. En nuestra prueba con qwen2.5:7b, una respuesta citó palabra por palabra la regla correcta de su fuente y aun así dio un número equivocado, y otra respuesta dijo que no lo sabía pero citó una fuente sin relación. Una cita que pasa la comprobación aquí solo demuestra que el texto citado está en la fuente.
La lógica principal de esta herramienta es de código abierto, con licencia MIT. github.com/seigo5555/toolkitbox-lib/src/rag-citations.ts
Casos de uso
- Comprobar que la respuesta de un modelo local solo cita fuentes que realmente se enviaron, con fragmentos citados que realmente están en ellas
- Encontrar frases de una respuesta que no tienen fuente, antes de mostrar la respuesta a los usuarios
- Comparar prompts o modelos con las mismas preguntas según la frecuencia con que sus citas se sostienen
Cómo usarlo
- Pega las fuentes que enviaste con la pregunta, en el mismo orden.
- Pega la respuesta: la respuesta completa de /api/chat, una respuesta compatible con OpenAI o el texto de la respuesta.
- Lee la tabla de citas, las frases sin número de fuente y las fuentes que no se citaron.
FAQ
Un fragmento citado aparece como no encontrado. ¿Es incorrecta la respuesta?
No necesariamente. Puede que el modelo haya parafraseado la fuente en lugar de copiarla. Pero un fragmento citado que no está en la fuente no se puede comprobar, así que considera esa afirmación como no respaldada hasta que hayas leído la fuente.
Todas las citas pasan la comprobación. ¿Es correcta la respuesta?
No necesariamente. La herramienta solo comprueba que los números y los fragmentos citados coincidan con las fuentes. En nuestra prueba, el modelo citó la regla correcta (4 veces las dimensiones más 8 bytes) y aun así respondió 1552 bytes en lugar de 1,544 para un vector de 384 dimensiones.
¿Por qué las fuentes deben estar en el mismo orden?
Los números de la respuesta se refieren al orden en que se enviaron las fuentes. Si el orden es distinto, [2] apunta a otro texto y la comprobación no tiene sentido.
¿Cómo divide la herramienta la respuesta en frases?
En los saltos de línea, después de . ! ? seguidos de un espacio, y después de los signos de ancho completo 。!?. Un número que viene justo después del final de una frase, como "… here. [1]", cuenta para esa frase. Abreviaturas como e.g. pueden partir una frase en dos.
¿Qué significa done_reason "length"?
En el código fuente de Ollama, es el motivo que se indica cuando la respuesta alcanzó el límite de tokens (num_predict) en lugar de terminar por sí misma. Falta el final de la respuesta y posiblemente sus citas.
¿Se envían mis datos a algún sitio?
No. La comprobación se ejecuta en tu navegador. La herramienta nunca se conecta a Ollama ni a ningún otro servicio.
Artículos relacionados
- Guarda y busca embeddings de Ollama en PostgreSQL con pgvectorGuarda embeddings de Ollama en PostgreSQL con pgvector, búscalos con HNSW o IVFFlat y pasa los resultados a /api/chat para que la respuesta cite sus fuentes.
- Embeddings con Ollama: lo básico para búsqueda y RAGCrea embeddings con el /api/embed de Ollama: los modelos y sus tamaños, truncate y dimensions, vectores de longitud unitaria y similitud del coseno, según la documentación oficial.