Capítulo 3: Depuração de Pipelines RAG
Modos Comuns de Falha
1. Documentos Errados Recuperados
Sintomas: O LLM fornece respostas erradas ou irrelevantes
Causas:
- Tamanho de chunk inadequado
- Modelo de embedding incorreto
- Falta de filtros de metadados
Soluções:
# Verifique o que está sendo recuperado
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. LLM Ignora o Contexto
Sintomas: A resposta não reflete os documentos recuperados
Causas:
- Problemas no template do prompt
- Contexto muito longo
- Contexto não formatado claramente
Soluções:
# Estrutura melhor de prompt
prompt = """
CONTEXT (use esta informação para responder):
{context}
QUESTION: {question}
INSTRUCTIONS: Responda SOMENTE usando o contexto acima.
Se o contexto não contiver a resposta, diga "Não sei."
ANSWER:"""
3. Alucinações
Sintomas: Respostas confiantes, mas incorretas
Causas:
- Documentos errados recuperados
- LLM extrapolando além do contexto
Soluções:
- Melhore a qualidade da recuperação
- Use prompts de grounding explícitos
- Reduza o temperature
Rastreamento com LangSmith
from langsmith import Client
import os
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "your-key"
# Agora todas as chamadas LangChain são rastreadas
# Veja em smith.langchain.com
Checklist de Depuração
| Passo | Verificação | Ferramenta |
|---|---|---|
| 1 | Embeddings funcionando? | Testar embedding da query |
| 2 | Documentos corretos recuperados? | Imprimir documentos recuperados |
| 3 | Contexto cabe no prompt? | Verificar contagem de tokens |
| 4 | LLM vê o contexto? | Imprimir prompt completo |
| 5 | Resposta fundamentada? | Comparar com o contexto |
Otimização de Performance
Reduzir Latência
# Recuperação assíncrona
async def fast_rag(query):
# Embedding e recuperação em paralelo
embedding_task = embed_async(query)
embedding = await embedding_task
docs = await retrieve_async(embedding)
return await generate_async(query, docs)
Reduzir Custos
- Use modelos menores sempre que possível
- Faça cache de queries frequentes
- Faça batch de embeddings
- Limite o tamanho do contexto