← capítulo

RAG de principio a fin

Capítulo 11 · responde desde tus documentos, con honestidad

La hora

Los tres pasos

Conocimiento con el que el modelo nunca fue entrenado, sin fine-tuning.

Recuperar

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]]

Generar — las reglas hacen el trabajo

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.

La honesta tercera respuesta

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.

Ponlo a trabajar — tres apps

El mismo loop; cambian el corpus y la instrucción.

La regla de debugging

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.

Lo que te llevas

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.