Detener las alucinaciones del chatbot: RAG, búsqueda vectorial, fragmentación y medidas de control.
Una solución de diseño de sistema para un chatbot de soporte que crea políticas: RAG, embeddings y búsqueda ANN, tamaño de los fragmentos, prompts de anclaje, límites de contexto y monitoreo.
Un chatbot de soporte recibe una pregunta sobre la política de reembolsos de la empresa y inventa una. Dicha política no existe, pero el cliente la sigue y la empresa termina cumpliéndola. Este es el problema de las alucinaciones en su forma más costosa, y es un tema favorito en las entrevistas de diseño de sistemas porque combina la infraestructura de IA con la arquitectura clásica.
Por qué los modelos inventan cosas
Un modelo de lenguaje grande es un generador de texto probabilístico. No conoce hechos, sino que predice el siguiente token más plausible. Cuando la respuesta no está en sus datos de entrenamiento ni en su contexto, produce algo que suena correcto pero no lo es. Si el texto de entrenamiento contiene muchas políticas de reembolsos de otras empresas, el modelo generará una que se ajuste al patrón, incluso si es incorrecta para esta empresa.
Esto no es tanto un error como una consecuencia de cómo funciona la tecnología. Tampoco lo soluciona el ajuste fino por sí solo, ya que no se pueden incluir todos los hechos posibles en los pesos del modelo. La principal estrategia de defensa es la generación reforzada con recuperación de información, o RAG: en lugar de pedirle al modelo que responda a partir de sus parámetros, primero se obtienen documentos relevantes y se incluyen en la solicitud.
Un escenario de aplicación es un chatbot de atención al cliente que responde preguntas sobre productos, políticas y solución de problemas. Responde con confianza, pero a veces afirma que un producto tiene una función que en realidad no posee o inventa políticas. ¿Cómo se pueden asegurar que sus respuestas estén basadas en la documentación real?
Los temas que merecen tratarse en una buena respuesta incluyen:
- por qué los modelos generan información falsa y por qué el ajuste fino no es suficiente
- el flujo RAG de recuperación de contexto y posterior generación
- bases de datos vectoriales y búsqueda semántica basada en embeddings
Cómo RAG reduce las alucinaciones
Con RAG, el sistema primero obtiene material relevante de una base de conocimientos e lo inserta en el prompt como contexto. Sin esto, el modelo hace suposiciones a partir de sus parámetros. Con él, el modelo lee la respuesta en los documentos proporcionados. Sigue generando tokens, pero el contexto lo limita. Si los documentos indican que no hay reembolsos, el modelo no inventará un plazo de devolución de 30 días.
Bases de datos vectoriales e incrustaciones
¿Cómo encuentra el sistema los documentos adecuados? Cada documento se convierte en una representación vectorial, es decir, una representación numérica de alta dimensión que refleja su significado, y la consulta recibe el mismo tratamiento. La base de datos vectorial devuelve los documentos cuyas representaciones vectoriales están más cerca de las de la consulta.
Hay cuatro componentes que realizan esta tarea:
- Modelo de embedding. Convierte el texto en vectores de modo que los textos similares generen vectores similares. Entre las opciones se encuentran text-embedding-3-small de OpenAI, que tiene 1536 dimensiones, y modelos de código abierto como BGE o E5.
- Base de datos vectorial. Almacena las representaciones vectoriales y permite búsquedas de vecino más cercano aproximado (ANN). Entre las opciones están Pinecone gestionada, además de Weaviate, Qdrant, pgvector (una extensión de PostgreSQL) y Milvus.
Fragmentación
Un documento de política de 50 páginas no puede recuperarse completo, por lo que debe dividirse. El tamaño de los fragmentos afecta tanto la precisión de la recuperación como el uso eficaz de la ventana de contexto.
- Un fragmento demasiado pequeño pierde el contexto. Podría aparecer “Los artículos dañados durante el envío no son” junto con el resto de la oración en el siguiente fragmento, lo que impide que el modelo responda correctamente.
- Un fragmento demasiado grande diluye la información útil con texto irrelevante y llena la ventana de ruido.
- La superposición protege contra los límites entre fragmentos. Una ventana deslizante con un 10 a 20 por ciento de superposición evita que la información quede atrapada entre ellos.
Una opción razonable por defecto para la documentación es dividir el texto según los títulos de sección, limitar los fragmentos a entre 500 y 1000 tokens y dejar una superposición de 50 a 100 tokens entre fragmentos adyacentes. Cada fragmento debe ser autónomo, contener un pensamiento completo.
Diseño de prompts como segunda línea de defensa
Incluso con la recuperación de información, un modelo puede ignorar el contexto y seguir generando respuestas erróneas, por lo que la instrucción debe vincularlo firmemente al material proporcionado. Los elementos clave son:
- Un rol. Frases como “Eres un asistente de atención al cliente” definen la personalidad del modelo.
- Anclaje en el contexto. Instrucciones para responder únicamente a partir del contenido dado impiden que el modelo recurra a lo que ha memorizado.
- Una solución ante la incertidumbre. Pedirle al modelo que indique que no puede responder cuando el contexto carece de la información necesaria es la instrucción más importante. Sin ella, el modelo simplemente adivina.
- Citas de fuentes. Exigir que las afirmaciones estén respaldadas por documentos obliga al modelo a atribuir sus respuestas, lo que dificulta la fabricación de información falsa.
- Prohibición del conocimiento externo. Una prohibición explícita sobre información ajena al contexto refuerza aún más la regla del anclaje en el mismo.
Gestión de la ventana de contexto
¿Qué pasa si los fragmentos relevantes no caben, o una pregunta tiene varias partes que requieren muchos fragmentos? Los modelos modernos tienen ventanas grandes, como 128K tokens para GPT-4o y hasta 1M para Gemini, pero llenarlas con material irrelevante reduce la calidad de las respuestas. Cuatro tácticas ayudan:
- Clasificar por relevancia. Obtener diez fragmentos, ordenarlos según su puntuación y agregarlos del mejor al peor hasta agotarse el presupuesto de tokens, descartando primero los menos relevantes.
- Descomponer la consulta. Para una pregunta como “Cuéntame sobre la política de reembolsos y los tiempos de envío”, dividirla en consultas secundarias, obtener información para cada una y responder a ambas en una sola respuesta.
- Resumir temas extensos. Cuando un tema abarca muchos fragmentos, hacer que el modelo los resuma primero y utilizar ese resumen como contexto para la respuesta final.
La arquitectura completa
En resumen, las decisiones principales son estas:
- Fragmentación semántica. Se realiza la división en límites naturales como encabezados y párrafos, con fragmentos de unos 500 tokens cada uno y una superposición de 50 tokens, siendo cada fragmento autónomo.
- Recuperación en dos etapas. La búsqueda con ANN genera 20 candidatos y un reordenador basado en codificador cruzado selecciona los 3 mejores.
- Baja temperatura. Un valor de aproximadamente 0.2 en una escala de 0 a 2 hace que el modelo sea menos creativo y reduzca la probabilidad de generar contenido falso.
Qué monitorear
- Tasa de alucinaciones. La proporción de respuestas que contienen información no presente en el contexto proporcionado, medida mediante evaluación automática o revisión humana. Un objetivo razonable es inferior al 1 por ciento.
Las cuatro capas de defensa
Las alucinaciones no son señal de que la IA esté dañada. Son un problema de diseño. Un modelo sin restricciones siempre elige la plausibilidad sobre la precisión, porque eso es lo para lo que fue entrenado. Cuatro capas abordan este problema:
- Recuperación. Suministrar documentos relevantes para que el modelo responda a partir de ellos y no de la memoria.
- Inducción. Restringir al modelo al contexto dado, indicarle que diga que no lo sabe y exigir citas.
- Límites. Filtrar las salidas, verificar las citas y calcular puntajes de confianza, rechazando todo lo que no pueda ser verificado con respecto al contexto.
La regla más importante: un chatbot que diga con confianza “No lo sé” es mucho mejor que uno que invente una respuesta con total seguridad.