Los modelos tienen conocimiento congelado en entrenamiento. todo lo que pasó después, o todo lo que es interno a tu organización, no lo saben. Hay dos formas de darles acceso:
RAG es la opción dominante cuando:
[query del usuario]
↓
retrieve (búsqueda vectorial sobre el corpus → top-K snippets)
↓
augment (compone un prompt: snippets + pregunta original)
↓
generate (LLM responde usando el prompt aumentado, citando fuentes)
↓
[respuesta + citations]Tu trabajo: diseñar la configuración YAML del pipeline. Tres steps, encadenados por output_keys.
El problema más común no es retrieval. es que el generate no maneja el caso "los snippets no son relevantes a la pregunta". Cuando eso pasa, si no le decís al modelo qué hacer, inventa una respuesta con datos sueltos de los snippets. Eso es peor que no responder: parece confiable, lleva citations falsas, y el usuario no se da cuenta.
Regla práctica: en el prompt del generador, siempre incluí algo como "Si los snippets no contienen información relevante, decí que no encontraste eso en el manual." Es la diferencia entre RAG honesto y RAG que alucina.
5 criterios LLM-judge:
retrieve declarado como llamada a tool/función (no LLM).augment recibe pregunta + snippets, los combina explícitamente.generate usa el augmented_prompt (no la pregunta cruda).generate pide citations de los snippets.generate maneja "snippets vacíos / no relevantes" sin alucinar.