Capítulo 11 · responde desde tus documentos, con honestidad
Conocimiento con el que el modelo nunca fue entrenado, sin fine-tuning.
KB_VECS = embed([c["text"] for c in KB])
def retrieve(question, k=3):
qv = embed([question])[0]
scored = sorted(zip(KB, KB_VECS),
key=lambda cv: cosine(qv, cv[1]), reverse=True)
return [chunk for chunk, _ in scored[:k]]instructions=(
"Answer using ONLY the context below. "
"Cite sources by their [id]. "
"If the context lacks the answer, say "
"'I don't have that in the docs.'\n\n"
f"Context:\n{context}")
Quita estas reglas y el modelo responde de memoria — con confianza, y mal.
Q: How long do refunds take? → cited answer
Q: Can I return an opened blender? → cited answer
Q: What's your CEO's name? → "I don't have that in the docs."
El rechazo es una feature, no un bug.
El mismo loop; cambian el corpus y la instrucción.
La calidad de RAG es la calidad del retrieval.
¿Respuesta equivocada? Mira qué se recuperó antes de culpar al modelo. Normalmente el chunk que necesitaba nunca llegó al top-k.
Recuperar, aumentar, generar — y fuerza al modelo al contexto: responde solo desde él, cítalo, rehúsa sin él. Sigue: visión, donde el documento es una imagen.