Todos los artículos
Tutoriales · 5 min

Fundamente todo: una guía práctica para la procedencia de citas

La cita no es una capa de UX sobre la generación. Es el contrato. Aquí está la arquitectura que usamos para hacer rastreable cada oración generada.

La trazabilidad como contrato

Si una frase generada no puede rastrearse hasta el material de origen, no es una respuesta. Es una hipótesis con buena gramática. En contextos de consumo eso suele ser aceptable. En un contexto empresarial, donde la salida alimenta una decisión que alguien firma, no lo es.

Tratar la cita como un asunto de presentación — algo que se añade a la salida después de generarla, como comodidad de interfaz — produce sistemas que citan de forma plausible e incorrecta. El enlace apunta a un documento que trata el tema en general, el lector asume que respalda la afirmación concreta y nadie lo comprueba hasta que llega un auditor.

La alternativa es tratar la trazabilidad como un contrato que el sistema es estructuralmente incapaz de incumplir: el paso de generación no puede emitir una afirmación sin emitir también el fragmento del que procede, porque el esquema de salida no lo permite.

Recuperación por fragmento, no por documento

La recuperación por documento devuelve el fichero. La recuperación por bloque devuelve un párrafo. Ninguna es lo bastante precisa para defender una frase, porque ambas dejan al lector la tarea de localizar el texto que la respalda, y los lectores, razonablemente, no lo hacen.

La recuperación por fragmento mantiene los desplazamientos de caracteres hacia el origen a lo largo de toda la cadena. Cuando un pasaje se trocea, el bloque arrastra su procedencia: identificador de documento, versión y el rango exacto de bytes o caracteres que ocupa. Cuando ese bloque se pasa al modelo, el identificador viaja con él.

El coste de ingeniería es sobre todo contabilidad, y se paga en la ingesta. Los desplazamientos tienen que sobrevivir a la extracción de texto, la normalización y el troceado, lo que significa que el paso de extracción no puede reescribir espacios en silencio ni eliminar cabeceras sin dejar constancia. Hacerlo bien en la ingesta es mucho más barato que reconstruirlo en tiempo de consulta.

Meter la cita en el esquema de salida

El mecanismo que hace que la trazabilidad no sea opcional es la salida estructurada. En lugar de pedir al modelo que escriba prosa y añada referencias, se le restringe a emitir una lista de afirmaciones, cada una con los identificadores de los fragmentos que la respaldan.

De ahí se siguen dos propiedades. Primera: una afirmación con lista de respaldo vacía es un fallo detectable a nivel de esquema en lugar de un fallo sutil; puedes rechazarla antes de que ningún humano la vea. Segunda: la capa de presentación se vuelve trivial y honesta, porque muestra lo que el modelo afirmó que era su evidencia, no una conjetura posterior.

Encima corre la validación. De cada fragmento citado se comprueba que existe, que pertenece a un documento que el solicitante tiene derecho a leer y que sigue coincidiendo con su contenido registrado — una comprobación de versión que detecta el caso en que la fuente cambió después de indexarse. Fallar cualquiera de las tres es un error, no un aviso.

Revisar al nivel de la cita

La interfaz de revisión debe permitir a una persona aceptar o rechazar al nivel de una afirmación y su evidencia, no al nivel de una respuesta entera. La aprobación de respuesta completa fuerza un juicio binario sobre un párrafo que suele ser mayoritariamente correcto, lo que entrena a los revisores para aprobar.

La revisión por afirmación es más rápida, porque el revisor lee una aserción contra un fragmento resaltado en lugar de reconstruir toda la cadena. Y es mejor telemetría: los rechazos indican qué tipos de afirmación falla el sistema, lo que es directamente accionable, mientras que una respuesta rechazada no dice casi nada.

Esa telemetría alimenta el conjunto de evaluación. Cada afirmación rechazada es un caso que merece añadirse, con el resultado correcto anotado, y el conjunto crece a partir de fallos reales y no de la imaginación.

Lo que esto no resuelve

El anclaje restringe al modelo al material de origen. No hace que ese material sea correcto, actual ni completo. Una respuesta perfectamente anclada extraída de una política derogada es exactamente incorrecta, y lo es con una cita adjunta, lo que la vuelve más persuasiva.

Así que la trazabilidad tiene que extenderse a la vigencia: qué versión del documento, cuándo se indexó y si existe una versión más reciente. Exponerlo en la interfaz de revisión cuesta poco y detecta un modo de fallo que las métricas de precisión no miden.

Tampoco aborda el anclaje las afirmaciones que un modelo decide no hacer. Un sistema que solo responde lo que puede respaldar a veces no devolverá nada donde un experto humano sí habría sabido la respuesta. Suele ser el intercambio correcto, pero debe ser una decisión tomada a propósito y no una propiedad que emergió sola.

Coste, latencia y la forma del intercambio

La trazabilidad por fragmento no es gratis. Mantener los desplazamientos a través de la ingesta añade ingeniería en tiempo de indexado, la salida estructurada añade tokens y una ruta de decodificación restringida, y validar cada fragmento citado añade una consulta antes de devolver la respuesta.

En la práctica los costes de recuperación y validación son pequeños frente a la generación, y la sobrecarga de la salida estructurada es moderada. El coste real es la cadena de ingesta, que pasa a ser algo que hay que mantener con cuidado en lugar de algo que se puede reescribir a la ligera. Es un precio razonable por una propiedad que el sistema no puede perder por accidente.

Conviene plantear el intercambio a los responsables en esos términos. Estás comprando una garantía que impone el esquema en lugar de la disciplina, y la pagas en complejidad de ingesta.

Por dónde empezar si ya tienes un sistema RAG

La mayoría de equipos llegan aquí con un sistema de recuperación funcionando que cita a nivel de documento. La migración no tiene por qué ser una reescritura.

Empieza añadiendo desplazamientos en la ingesta para los documentos nuevos y deja el índice existente en paz; ambos pueden convivir, con los documentos antiguos degradando a cita por bloque. Después cambia el esquema de salida para exigir identificadores de respaldo, y deja que la validación rechace las afirmaciones sin apoyo: al principio como aviso registrado, para que puedas ver la tasa antes de que empiece a bloquear.

Esa tasa es el dato interesante. En sistemas que nunca han impuesto anclaje suele ser más alta de lo que el equipo espera, y verla es normalmente lo que zanja cualquier discusión que quedara sobre si el trabajo merece la pena.