Skip to content
BotServBotServ
RAGCita de fuentesCitasMetadatosTrazabilidadIA Local

Citas en RAG: Respuestas Trazables

Cómo los sistemas RAG citan fuentes: metadatos, citas, enlaces y mejores prácticas para respuestas de IA trazables.

S

schutzgeist

13 min read
Citas en RAG: Respuestas Trazables

Citas de fuentes en RAG: respuestas trazables

Qué cubre este artículo sobre citas de fuentes en RAG

  • Por qué las citas de fuentes en sistemas RAG son decisivas para la confianza y la trazabilidad
  • Qué metadatos debes almacenar para cada fuente
  • Cómo instruir al modelo de lenguaje mediante prompts para citar correctamente
  • Qué errores comunes ocurren con las citas y cómo evitarlos
  • Cómo diferentes interfaces como Open WebUI y AnythingLLM presentan las fuentes

Introducción: citas de fuentes en RAG explicadas

Un sistema RAG responde preguntas basándose en tus propios documentos. Esa es la gran ventaja frente a un modelo de lenguaje puro, que solo usa su conocimiento de entrenamiento. Pero, ¿cómo sabes en qué sección del documento se basa una respuesta? Aquí entran en juego las citas de fuentes. Hacen que las respuestas RAG sean trazables y distinguen un sistema serio de una caja negra.

Este artículo trata sobre la implementación práctica de citas de fuentes en pipelines RAG locales. Aprenderás qué metadatos son importantes, cómo instruir al modelo para que mencione fuentes y cómo presentar los resultados en diferentes interfaces. Encontrarás fundamentos sobre el tema completo en el artículo RAG local así como en los Fundamentos de RAG.

¿Por qué necesito citas de fuentes?

Imagina que preguntas a tu sistema RAG: “¿Cuántos días de vacaciones me corresponden tras cinco años en la empresa?” El modelo responde: “Con cinco años de antigüedad, te corresponden 28 días de vacaciones.” Suena plausible, pero ¿de dónde sale este número? ¿Está en el acuerdo del comité de empresa, en un correo del departamento de recursos humanos, o lo ha inventado el modelo?

Sin citas de fuentes no puedes verificarlo. Quizá el modelo mezcló dos documentos diferentes, o el número proviene de un documento anticuado de 2021. Con una cita de fuente ves de inmediato: esta información procede del archivo urlaubsrichtlinie_2024.pdf, página 4, sección 3.1. Ahora puedes abrir la fuente y verificarlo. Esa es la diferencia entre confianza y fe ciega.

Citas de fuentes brevemente explicadas

Las citas de fuentes en RAG funcionan como un buen investigador que respalda cada afirmación con una referencia bibliográfica. Cuando el investigador escribe que una planta determinada tiene propiedades curativas, menciona el libro, la página y el autor para que otros puedan verificarlo. Exactamente eso debe hacer un sistema RAG: para cada afirmación en la respuesta, indica de qué documento y qué sección proviene la información.

Para ello, el sistema debe almacenar durante el paso de recuperación no solo el texto de los fragmentos encontrados, sino también los metadatos asociados. Estos metadatos se pasan luego al modelo de lenguaje y se incluyen en la respuesta. Encontrarás más sobre la preparación de documentos en el artículo Preparar documentos.

¿Para quién son las citas de fuentes?

Las citas de fuentes están dirigidas a varios grupos:

  • Usuarios finales que desean verificar respuestas antes de tomar decisiones
  • Empleados de empresas que necesitan políticas legales o internas trazables
  • Desarrolladores que deben depurar pipelines RAG e identificar fuentes de errores
  • Responsables de cumplimiento que deben demostrar en qué documentos se basa una respuesta
  • Científicos que necesitan citas para sus trabajos

En resumen: cualquiera que use RAG en serio se beneficia de las citas de fuentes. Quien utiliza IA local, además tiene la ventaja de que los documentos sensibles no abandonan tu propio equipo, y las citas garantizan que las respuestas sigan siendo transparentes.

Términos importantes sobre citas de fuentes

TérminoSignificado
FuenteDocumento o sección de la que proviene una información
CitaReproducción literal o conceptual de un documento
MetadatosInformación adicional como nombre de archivo, página, autor, fecha
CitationTérmino en inglés para cita de fuente, usado frecuentemente en herramientas
ReferenceReferencia a un documento, similar a una cita de fuente
Chunk IDIdentificador único de un fragmento de documento
Page NumberNúmero de página, especialmente importante en PDFs
Confidence ScorePuntuación de cuán bien se ajusta un fragmento encontrado a la pregunta
ProvenanceTérmino para el origen y trazabilidad de una información
HallucinationCuando el modelo inventa información que no existe en las fuentes

Por qué las fuentes son importantes

Las citas de fuentes cumplen varias funciones centrales en un sistema RAG:

Confianza: los usuarios creen más en una respuesta si pueden leer la fuente. Una respuesta sin fuente es una afirmación, una respuesta con fuente es una declaración respaldada.

Verificación: cualquiera puede comprobar por sí mismo si el modelo reprodujo correctamente la información. Esto es especialmente importante en contratos, políticas o documentos médicos.

Cumplimiento: en muchas empresas y organismos públicos, es necesario que sea trazable en qué base se tomaron decisiones. Las citas de fuentes proporcionan esta prueba.

Depuración: si una respuesta es incorrecta, las citas de fuentes ayudan a identificar el problema. ¿Era el fragmento encontrado irrelevante? ¿Estaba desactualizado? ¿El modelo lo interpretó mal? Sin fuente, buscas a ciegas.

Detección de errores: si el modelo cita una fuente que no contiene la información afirmada, reconoces inmediatamente una alucinación. Es una herramienta poderosa para control de calidad, más sobre esto en el artículo Probar la calidad de RAG.

Tipos de citas de fuentes

Hay varias formas de presentar fuentes en una respuesta RAG. Cada una tiene sus ventajas e inconvenientes.

Citas integradas: la fuente se menciona directamente en el texto, similar a trabajos científicos con corchetes. Ejemplo: “Con cinco años de antigüedad, te corresponden 28 días de vacaciones [1].” El número remite a una entrada en una lista de fuentes al final. Este formato es compacto y no interrumpe mucho el flujo de lectura.

Estilo de notas al pie: las fuentes se recopilan como notas al pie al final de la respuesta. Es agradable de leer, pero requiere más esfuerzo en el formato.

Lista de fuentes: al final de la respuesta aparece una lista de todas las fuentes utilizadas con nombre de archivo, página y sección. Fácil de implementar, pero la conexión a afirmaciones individuales falta.

Enlaces interactivos: las fuentes se presentan como enlaces que conducen directamente al documento o a la página correspondiente. Es la opción más fácil de usar, pero requiere una interfaz que pueda procesar estos enlaces.

En la práctica, muchos sistemas combinan varios enfoques, por ejemplo citas integradas con una lista de fuentes interactivas al final.

Metadatos para fuentes

Para que las citas de fuentes funcionen correctamente, debes capturar los metadatos correctos durante el chunking y al almacenar en la base de datos vectorial. Se recomiendan los siguientes campos:

MetadatoDescripciónEjemplo
filenameNombre del archivo de origenurlaubsrichtlinie_2024.pdf
pageNúmero de página en PDFs4
sectionSección o encabezado3.1 Vacaciones anuales
dateFecha del documento2024-01-15
authorAutor o departamentoDepartamento de Recursos Humanos
chunk_idID única del fragmentochunk_0042
source_typeTipo de documentopdf, docx, md

Cuanto más completos sean los metadatos, más precisa será la cita de fuente. Los campos page y section son especialmente valiosos para los usuarios porque les permiten localizar rápidamente la información en el documento original. Encontrarás más sobre cómo dividir documentos en fragmentos en el artículo Chunking.

Implementación: incorporar fuentes en RAG

La implementación consta de tres pasos: capturar metadatos al fragmentar, entregar metadatos durante el retrieval e incorporar metadatos en el prompt.

from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Chroma

# Cargar documento con metadatos
document = {
    "text": "Bei fünf Jahren Betriebszugehörigkeit stehen 28 Urlaubstage zu.",
    "metadata": {
        "filename": "urlaubsrichtlinie_2024.pdf",
        "page": 4,
        "section": "3.1 Jahresurlaub",
        "date": "2024-01-15",
        "author": "Personalabteilung",
        "chunk_id": "chunk_0042"
    }
}

# Chunking y embedding
text_splitter = RetrievalCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = text_splitter.split_text(document["text"])

# Almacenar en la base de datos vectorial, los metadatos se conservan
vectorstore = Chroma.from_texts(
    texts=chunks,
    metadatas=[document["metadata"]] * len(chunks),
    embedding=embedding_model
)

# Retrieval con metadatos
results = vectorstore.similarity_search_with_score(
    "Wie viele Urlaubstage bei fünf Jahren?",
    k=3
)

# Mostrar resultados con metadatos
for doc, score in results:
    print(f"Text: {doc.page_content}")
    print(f"Quelle: {doc.metadata['filename']}, "
          f"Seite {doc.metadata['page']}, "
          f"Abschnitt {doc.metadata['section']}")
    print(f"Confidence: {score}")

En este ejemplo, los metadatos se conservan a lo largo de todo el pipeline. Durante el retrieval no solo obtienes el texto, sino también la información de la fuente asociada. Luego transmites esto al modelo de lenguaje.

Prompt Engineering para citas de fuentes

Para que el modelo de lenguaje cite fuentes correctamente, debes instruirlo en el prompt. Sin instrucciones, el modelo a menudo inventa fuentes u las omite. Un buen system prompt para citas de fuentes se ve así:

Du bist ein Assistent, der Fragen auf Basis der folgenden Dokumentenabschnitte beantwortet.

Regeln:
1. Antworte nur auf Basis der bereitgestellten Abschnitte.
2. Gib nach jeder Aussage die Quelle in eckigen Klammern an, zum Beispiel [1].
3. Liste am Ende alle Quellen mit Nummer, Dateiname, Seite und Abschnitt auf.
4. Wenn die Abschnitte die Frage nicht beantworten, sage: "Die Quellen enthalten keine Information dazu."
5. Erfinde keine Informationen oder Quellen.

Dokumentenabschnitte:
[1] Datei: urlaubsrichtlinie_2024.pdf, Seite 4, Abschnitt 3.1
Inhalt: Bei fünf Jahren Betriebszugehörigkeit stehen 28 Urlaubstage zu.

[2] Datei: urlaubsrichtlinie_2024.pdf, Seite 5, Abschnitt 3.2
Inhalt: Über 10 Jahre Betriebszugehörigkeit erhöht sich der Anspruch auf 30 Tage.

Frage: Wie viele Urlaubstage habe ich bei fünf Jahren?

El modelo responde entonces, por ejemplo: “Bei fünf Jahren Betriebszugehörigkeit stehen Dir 28 Urlaubstage zu [1].” y lista la fuente al final. Lo importante es que ya hayas numerado los abschnitos en el prompt para que el modelo pueda usar esos números.

Ejemplo: RAG con citas de fuentes

Un flujo completo se ve así:

Paso 1: Hacer la pregunta El usuario pregunta: “Was ist die Regelung zur Homeoffice-Ausstattung?”

Paso 2: Retrieval El sistema busca en la base de datos vectorial y encuentra tres abschnitos:

  • Chunk A: homeoffice_richtlinie.pdf, Seite 2, Abschnitt 1.1, Confidence 0.89
  • Chunk B: homeoffice_richtlinie.pdf, Seite 3, Abschnitt 1.2, Confidence 0.85
  • Chunk C: it_sicherheit.pdf, Seite 7, Abschnitt 4.0, Confidence 0.72

Paso 3: Ensamblar el prompt Los tres abschnitos se incorporan en el prompt con numeración y metadatos.

Paso 4: El modelo genera la respuesta “Die Homeoffice-Ausstattung umfasst einen Laptop, einen Monitor und ergonomische peripherals [1]. Die Kosten übernimmt die Firma bis zu einem Betrag von 500 Euro [1]. Für die Einrichtung gilt die IT-Sicherheitsrichtlinie, insbesondere bezüglich VPN-Zugang [3].”

Paso 5: Lista de fuentes Al final aparece:

  • [1] homeoffice_richtlinie.pdf, Seite 2, Abschnitt 1.1
  • [2] homeoffice_richtlinie.pdf, Seite 3, Abschnitt 1.2
  • [3] it_sicherheit.pdf, Seite 7, Abschnitt 4.0

Ahora el usuario puede verificar cada afirmación y ver que Chunk B fue encontrado pero no se utilizó en la respuesta. Esto es normal y no hay problema.

Citas de fuentes en frontends

Las diferentes interfaces presentan las fuentes de formas distintas:

Open WebUI: Muestra los abschnitos de documentos encontrados después de la respuesta, a menudo con nombre de archivo e indicación de página. Los enlaces hacen clic conducen al documento original. La presentación es compacta y clara.

AnythingLLM: Lista las fuentes en un área separada debajo de la respuesta. Cada fuente muestra el nombre del documento y el fragmento de texto relevante. Esto ayuda a revisar rápidamente sin abrir el documento original.

Interfaces personalizadas: Si construyes tu propia interfaz, por ejemplo con Gradio o Streamlit, tienes control total. Puedes mostrar inline citations como badges interactivos, mostrar fuentes en un panel lateral o incluir tooltips con el texto original.

Independientemente del frontend, es importante que los metadatos de la base de datos vectorial se transmitan hasta la presentación. Un error frecuente es que los metadatos estén presentes durante el retrieval, pero se pierdan en el prompt o en la presentación de la respuesta. Los modelos que ejecutas localmente con Ollama procesan estos prompts estructurados de manera confiable.

Tropiezos típicos en citas de fuentes

Al trabajar con citas de fuentes, los mismos problemas aparecen una y otra vez:

  1. Los metadatos se pierden: Si no capturasmetadatos al fragmentar o almacenar en la base de datos vectorial, no podrás proporcionar fuentes después. Captura metadatos desde el principio.

  2. El modelo ignora la instrucción: Algunos modelos no siguen la instrucción de citar fuentes de manera confiable. Prueba diferentes modelos y formula el prompt más claramente.

  3. Atribución de fuente incorrecta: El modelo confunde números y asigna una declaración a la fuente equivocada. Ocurre frecuentemente con muchos abschnitos en el prompt. Reduce el número o usa reranking.

  4. Documentos desactualizados: Si múltiples versiones de un documento están en la base de datos, el modelo puede citar una versión antigua. Usa metadatos de fecha y filtra si es necesario.

  5. Fuentes sin indicación de página: En PDFs sin estructura de página clara falta el número de página. Usa herramientas OCR que extraigan información de página, más al respecto en la sección de procesamiento PDF.

  6. Fuentes alucinadas: El modelo inventa fuentes que no aparecen en los abschnitos. Un prompt claro con la regla “No inventes fuentes” ayuda, pero aun así verifica.

  7. Demasiadas fuentes: Si el modelo respalda cada afirmación con tres fuentes, la respuesta se vuelve ilegible. Limita el número de fuentes por afirmación en el prompt.

  8. Enlace faltante en el frontend: El frontend muestra fuentes pero no son interactivas o no funcionan. Prueba la vinculación con rutas de archivo reales.

Hardware, costos y seguridad en citas de fuentes

Las citas de fuentes en sí no requieren hardware adicional. Los metadatos son pequeños y su almacenamiento es insignificante. La base de datos vectorial crece mínimamente porque se agregan algunos campos de metadatos por chunk. Esto es negligible.

Los costos no provienen de las citas de fuentes en sí, sino de un prompt ligeramente más largo porque los metadatos se incluyen. Con modelos locales en Ollama esto no es problema, ya que no hay costos de tokens. Con APIs en la nube, los tokens adicionales pueden ser significativos si procesas muchas fuentes por solicitud.

Desde el punto de vista de seguridad, las citas de fuentes no cambian la gestión de datos. Tus documentos permanecen locales mientras ejecutes el modelo de embedding, la base de datos vectorial y el modelo de lenguaje en tu propia máquina. Las citas de fuentes incluso aumentan la seguridad porque hacen trazable qué documentos usó el modelo. Esto ayuda en auditorías y revisiones de privacidad de datos.

Enlaces y referencias adicionales

FAQ: Referencias en RAG - Preguntas frecuentes

¿Qué es una referencia en RAG?

Una referencia indica el documento y la sección de la que procede una información en la respuesta. Generalmente incluye el nombre del archivo, número de página y sección.

¿Por qué son importantes las referencias?

Hacen las respuestas trazables, aumentan la confianza, facilitan el debugging y a menudo son requisitos de cumplimiento normativo.

¿Puede el modelo inventar referencias?

Sí, ocurre. Un prompt claro con la regla de no inventar referencias reduce el riesgo. Aun así, verifica regularmente las fuentes.

¿Qué metadatos debería guardar?

Como mínimo nombre del archivo, número de página y sección. También es útil almacenar fecha, autor e ID único del chunk.

¿Cómo indico al modelo que cite referencias?

A través de un prompt del sistema que establezca las reglas. Proporciona los fragmentos numerados e instruye al modelo para usar esos números en la respuesta.

¿Qué hago si el modelo ignora la instrucción de referencias?

Prueba un modelo diferente, reformula el prompt con mayor claridad, o reduce la cantidad de fragmentos en el prompt. Algunos modelos siguen mejor las instrucciones estructuradas que otros.

¿Cómo muestro las referencias en el frontend?

Depende de la herramienta. Open WebUI y AnythingLLM muestran referencias automáticamente. En interfaces personalizadas puedes implementar citas inline, listas de fuentes o enlaces clicables.

¿Cuál es la diferencia entre Citation y Reference?

Ambos términos se usan frecuentemente como sinónimos. Citation es la denominación en inglés para referencia, Reference significa remisión y se usa típicamente para la lista de fuentes al final.

¿Necesito referencias con pocas fuentes?

Sí. Incluso con pocos documentos es útil saber de qué sección procede una respuesta. El esfuerzo de implementación es mínimo.

¿Pueden las referencias prevenir alucinaciones?

No completamente, pero las hacen detectables. Si el modelo cita una fuente que no contiene la información, es un claro indicador de respuesta inventada.

¿Cómo gestiono múltiples versiones de un documento?

Guarda la fecha como metadato y filtra en la búsqueda por el documento más reciente. Alternativamente, elimina versiones antiguas de la base de datos vectorial.

¿Qué es Provenance?

Provenance designa el origen y trazabilidad de una información. En RAG significa que cada afirmación puede rastrearse hasta la sección original del documento.

Fuentes y referencias adicionales

  • Documentación de LangChain sobre metadatos y recuperación
  • Funciones de Citation y Source Tracking de LlamaIndex
  • Documentación de Open WebUI sobre visualización de fuentes en RAG
  • Documentación de AnythingLLM sobre fuentes de workspace
  • Trabajos de investigación sobre provenance y citation en aplicaciones LLM
Volver al blog
Share:

Entradas relacionadas