Saltar al contenido principal

Capítulo 3: Depuración de pipelines RAG

Modos de fallo comunes​

1. Se recuperan documentos incorrectos​

Síntomas: El LLM da respuestas incorrectas o irrelevantes

Causas:

  • Tamaño de fragmento inadecuado
  • Modelo de embedding incorrecto
  • Filtros de metadatos ausentes

Soluciones:

# Verifique qué se está recuperando
docs = retriever.get_relevant_documents(query)
for doc in docs:
print(f"Score: {doc.metadata.get('score')}")
print(f"Content: {doc.page_content[:200]}...")
print("---")

2. El LLM ignora el contexto​

Síntomas: La respuesta no refleja los documentos recuperados

Causas:

  • Problemas con la plantilla de prompt
  • Contexto demasiado largo
  • Contexto no formateado claramente

Soluciones:

# Mejor estructura de prompt
prompt = """
CONTEXT (use this information to answer):
{context}

QUESTION: {question}

INSTRUCTIONS: Answer ONLY using the context above.
If the context doesn't contain the answer, say "I don't know."

ANSWER:"""

3. Alucinaciones​

Síntomas: Respuestas seguras pero incorrectas

Causas:

  • Se recuperaron documentos incorrectos
  • El LLM extrapola más allá del contexto

Soluciones:

  • Mejorar la calidad de la recuperación
  • Usar prompts de fundamentación explícitos
  • Bajar la temperatura

Trazado con LangSmith​

from langsmith import Client
import os

os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "your-key"

# Ahora todas las llamadas de LangChain son trazadas
# Vea en smith.langchain.com

Lista de verificación para depuración​

PasoVerificarHerramienta
1¿Embeddings funcionan?Probar consulta de embedding
2¿Se recuperan los documentos correctos?Imprimir documentos recuperados
3¿El contexto cabe en el prompt?Verificar número de tokens
4¿El LLM ve el contexto?Imprimir prompt completo
5¿La respuesta está fundamentada?Comparar con el contexto

Optimización de rendimiento​

Reducir latencia​

# Recuperación asíncrona
async def fast_rag(query):
# Embedding y recuperación en paralelo
embedding_task = embed_async(query)

embedding = await embedding_task
docs = await retrieve_async(embedding)

return await generate_async(query, docs)

Reducir costos​

  • Utilice modelos más pequeños cuando sea posible
  • Cachee consultas frecuentes
  • Procese embeddings en lotes
  • Limite el tamaño del contexto