Claude acaba de citar con confianza tres artículos de investigación en tu pipeline RAG. Ninguno de ellos existe. Lo comprobaste. Esto sucede porque los LLM no recuperan hechos, predicen el siguiente token basándose en patrones de los datos de entrenamiento. Cuando esa predicción se desvía de la realidad, obtienes una alucinación. Comprender por qué ocurre esto es el primer paso para prevenirlo.
Qué es realmente la alucinación (y por qué tu modelo no está roto)
La alucinación no es un error en el sentido en que lo es un error de tiempo de ejecución. Es una consecuencia fundamental de cómo funcionan los modelos de lenguaje grandes. Un LLM genera texto token a token, seleccionando la siguiente palabra basándose en distribuciones de probabilidad aprendidas durante el entrenamiento. Si los datos de entrenamiento contenían patrones que recompensan la confianza (spoiler: lo hicieron), el modelo aprende a sonar seguro incluso cuando no lo es.
En benchmarks, Claude 3.5 Sonnet logra una precisión fáctica de ~92% en preguntas de libro cerrado. Eso suena alto hasta que te das cuenta de que significa que aproximadamente 1 de cada 12 respuestas contiene una fabricación. Si realizas miles de inferencias al día, te encuentras con alucinaciones regularmente.
El problema se agrava cuando le pides a un modelo que razone sobre información que no ha visto antes. Un modelo entrenado con datos hasta abril de 2024 no puede saber qué sucedió en junio de 2024. En lugar de decir «No lo sé», genera texto que suena plausible y se ajusta al patrón. Así es como obtienes artículos de investigación que no existen.
Los tres modos de fallo que realmente encuentras
Las alucinaciones no son aleatorias. Siguen patrones predecibles dependiendo de tu caso de uso.
Alucinaciones por corte de conocimiento: El modelo genera información actual con confianza a pesar de haber sido entrenado con datos más antiguos. Ejemplo: preguntar a GPT-3.5 sobre eventos de 2024 produce hechos inventados disfrazados de noticias. Solución: incluye siempre la fecha actual en tu prompt del sistema y especifica explícitamente el corte de entrenamiento del modelo.
Alucinaciones por seguimiento de instrucciones: El modelo inventa información para cumplir con tu prompt. Pides 10 estudios de caso; proporciona 10, incluso si solo existen 4 en sus datos de entrenamiento. Los 6 restantes son fabricados para satisfacer tu solicitud. Por eso prompts como «Encuentra 5 ejemplos de…» son peligrosos sin anclaje.
Alucinaciones de razonamiento: El modelo encadena una lógica que suena plausible pero que no lleva a ninguna parte real. Cita fuentes, cita expertos, construye narrativas completas, todo internamente coherente, todo potencialmente falso. Estos son los más difíciles de detectar porque no suenan mal.
Técnica 1: Ancla tus prompts en datos reales
Este es el método de reducción más efectivo. En lugar de pedirle al modelo que recupere o razone de memoria, dale la información específica que necesita y pídele que trabaje solo con eso.
Prompt incorrecto:
Resume las últimas tendencias del mercado en energía renovable.
El modelo alucinará tendencias recientes porque no sabe qué significa «últimas» para ti.
Prompt mejorado:
Basándote ÚNICAMENTE en el siguiente informe de mercado del Q1 2025, resume las tres principales tendencias.
Informe:
[INSERTAR TEXTO REAL DEL INFORME AQUÍ]
Reglas:
- No añadas información de tus datos de entrenamiento
- Si la información no está en el informe, dilo explícitamente
- Cita directamente al hacer una afirmación
Este cambio, de recuperación de datos abierta a razonamiento acotado, reduce la alucinación en ~60% en pruebas repetidas en tareas de extracción estructurada. Ya no le pides al modelo que sepa algo; le pides que lea algo.
Técnica 2: Usa controles de temperatura y muestreo
La temperatura controla cuánta aleatoriedad introduce el modelo al seleccionar el siguiente token. Temperatura alta = más creativo, menos predecible. Temperatura baja = más determinista, más seguro.
Para tareas fácticas, una temperatura más baja ayuda. El valor por defecto de Claude es 1.0; para extracción o resumen, usa de 0.3 a 0.5. Esto reduce la tendencia del modelo a explorar secuencias de tokens poco probables, que es donde a menudo se esconden las alucinaciones.
Sin embargo, esto es un instrumento contundente. Bajar la temperatura no elimina las alucinaciones; simplemente las hace menos frecuentes. Una temperatura de 0.0 no produce verdad; produce la respuesta estadísticamente más probable, que aún puede ser falsa.
Ejemplo de Python con la API de Claude:
import anthropic
client = anthropic.Anthropic()
# Tarea de extracción con baja temperatura
response = client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1024,
temperature=0.3, # Más bajo para tareas fácticas
messages=[
{
"role": "user",
"content": "Extrae los nombres de las empresas de este texto: [TEXTO]"
}
]
)
print(response.content[0].text)
Técnica 3: Implementa bucles de verificación
No asumas que la salida de un solo modelo es fiable. Añade una segunda pasada que audite la primera.
Para afirmaciones fácticas, usa Claude u otro modelo potente para verificar las citas. Pregúntale: «¿Son reales estos artículos? Revisa cada cita y marca cualquier cosa que no puedas confirmar.» Esto detecta ~75% de referencias inventadas en mis pruebas.
Para datos estructurados, analiza la salida y valida contra patrones conocidos. Si estás extrayendo direcciones de correo electrónico, comprueba el formato. Si estás extrayendo fechas, verifica que sean válidas. Si estás extrayendo URLs, prueba que se resuelvan (o al menos que sigan un patrón válido).
Para tareas de razonamiento, usa una técnica llamada «comprobación de autocontradicción». Hazle al modelo la misma pregunta de tres maneras diferentes. Si las respuestas divergen significativamente, márcala para revisión humana en lugar de confiar en la respuesta.
Técnica 4: Restringe estrictamente el formato de salida
Las alucinaciones prosperan en respuestas no estructuradas. Restringe el modelo a JSON, XML o CSV con un esquema claro.
En lugar de:
Extrae el nombre del producto y el precio de este recibo.
Usa:
Extrae datos de este recibo. Devuelve SÓLO JSON válido en este formato, sin ningún otro texto:
{
"product_name": "string",
"price_usd": number,
"currency": "string"
}
Recibo:
[TEXTO]
La salida estructurada reduce la alucinación porque el modelo tiene menos grados de libertad. No puede divagar ni inventar adornos narrativos; debe ajustarse al esquema o la salida fallará aguas abajo.
Claude admite el modo JSON nativo (establece temperature en 0 e incluye "type": "json_object" en las llamadas a la API), lo que reduce aún más las salidas no válidas.
Empieza aquí: Elige una técnica para tu pipeline
No implementes las cuatro a la vez. Empieza por el anclaje de datos; es el cambio de mayor impacto y menor fricción. Dale a tu modelo datos reales en lugar de pedirle que recuerde.
Esta semana: audita un prompt en tu sistema. Encuentra un lugar donde le pidas al modelo que recupere o invente información. Reemplázalo con una versión que incluya el material de origen real. Ejecuta 20 casos de prueba. Cuenta las alucinaciones antes y después. Verás la diferencia de inmediato.