Perguntas de Entrevista da Série AI 11: Como Otimizar o RAG?
A otimização do RAG não é um ajuste de etapa única, mas um processo de otimização de cadeia completa. A partir das quatro dimensões lado de indexação de dados, lado de recuperação, lado de geração e lado de avaliação, apresento estratégias sistemáticas de otimização, juntamente com experiências práticas que podem ser mencionadas em entrevistas.
1. Otimização do lado de indexação de dados (melhorando a qualidade da "base de conhecimento")
Esta é a parte mais facilmente negligenciada, mas com efeito mais rápido.
| Ponto de Otimização | Fenômeno do Problema | Abordagem Específica | Indicador de Efeito |
|---|---|---|---|
| Análise de Documentos | Tabelas e fluxogramas em PDF são ignorados, ou texto ilegível, ordem confusa. | Use bibliotecas de análise melhores (como unstructured, modo de preservação de layout do pypdf); para tabelas, extraia com pandas e converta para Markdown. |
Recall +5~15% |
| Tamanho do Chunk | Chunk muito pequeno perde contexto (ex.: "ele" em "a receita deste ano cresceu" perde referência); chunk muito grande causa ruído na recuperação. | Experimente diferentes tamanhos de chunk (256/512/768 tokens), overlap de 10~20%; para documentos longos, use divisão por fronteira semântica (parágrafo/título) em vez de comprimento fixo. | Taxa de Acerto / Fidelidade |
| Adição de Metadados | Segmento relevante é recuperado, mas não é possível rastrear origem ou tempo, ou necessidade de filtrar por domínio. | Adicione metadados a cada chunk: source (nome do arquivo/URL), timestamp, page_num, doc_type. Use filtros na recuperação (ex.: doc_type == 'legal'). |
Precisão de Filtro |
| Seleção do Modelo de Embedding | Embedding genérico tem desempenho ruim em domínios verticais (medicina, código, direito). | Use modelos ajustados para o domínio (BGE‑large‑zh, GTE‑Qwen2‑7B‑instruct); ou ajuste seu próprio modelo de embedding (com triplet loss). | MRR@10 +10~20% |
2. Otimização do lado de recuperação (tornar a "consulta" mais precisa)
A recuperação determina a qualidade do "material de referência" alimentado ao LLM.
| Ponto de Otimização | Fenômeno do Problema | Abordagem Específica | Efeito |
|---|---|---|---|
| Pesquisa Híbrida | Pesquisa vetorial não consegue corresponder termos exatos (ex.: modelo de produto ABC-123), pesquisa por palavras-chave não entende sinônimos. |
Use simultaneamente pesquisa vetorial (semântica) e BM25 (palavras-chave), fusionando por ponderação (ex.: 0.7vetor + 0.3BM25) ou rerank. | Recall +10~25% |
| Reclassificação (Rerank) | O primeiro resultado da pesquisa vetorial pode não ser o mais relevante; o 10º pode ser melhor. | Use modelo cross‑encoder (ex.: BGE‑reranker-v2, Cohere Rerank) para re-pontuar o conjunto candidato (ex.: top 20) e pegar top‑K. |
Aumento significativo na taxa de acerto (especialmente top‑1) |
| Reescrita de Consultas | Pergunta do usuário vaga ou com referência ambígua em diálogo multi-turno ("Qual é o preço dele?"). | Use LLM para reescrever a pergunta original em formato mais adequado para recuperação (ex.: "Qual é o preço do iPhone 15?"); ou complete usando histórico de diálogo. | Recall +5~15% |
| HyDE | Pergunta do usuário muito curta ou abstrata (ex.: "Explique a fotossíntese"), recuperação direta é ruim. | Primeiro, faça o LLM gerar uma resposta hipotética e depois use essa resposta para recuperar documentos. | Adequado para domínio aberto, mas não para QA factual preciso |
| Ajuste do Top‑K de Recuperação | K muito pequeno pode perder informações importantes; K muito grande aumenta consumo de tokens e ruído. | Experimente K=3/5/10 e observe o equilíbrio entre recall e fidelidade da resposta. | Compensação entre eficiência e efeito |
3. Otimização do lado de geração (fazer o LLM usar bem os materiais de referência)
Não adianta ter boa recuperação se o prompt é ruim ou o modelo é fraco.
| Ponto de Otimização | Fenômeno do Problema | Abordagem Específica | Efeito |
|---|---|---|---|
| Engenharia de Prompt | LLM ignora o conteúdo recuperado ou inventa. | Instrução clara: "Responda com base APENAS nos materiais de referência fornecidos abaixo. Se as informações forem insuficientes ou irrelevantes, responda 'Não há informações suficientes'." Adicione few‑shot examples mostrando como citar fontes. | Fidelidade +20~40% |
| Compressão de Contexto | Conteúdo recuperado muito longo (excede janela de contexto do modelo), ou muito ruído. | Use LLMLingua ou Contexto Seletivo para comprimir, mantendo apenas as frases mais relevantes antes de enviar ao LLM. |
Reduz risco de perda de informação |
| Atualização do Modelo LLM | Modelo pequeno (7B) não consegue fazer raciocínio complexo ou não lembra contexto longo. | Troque para modelo mais forte (GPT‑4o, Claude 3.5 Sonnet, Qwen2.5‑72B). | Grande aumento na precisão do raciocínio |
| Streaming e Citações | Usuário não consegue verificar credibilidade da resposta. | Faça o LLM produzir [citation:1] na geração, correspondente ao número do documento recuperado. Anexe link do original no backend. |
Confiança do usuário + depuração |
| Calibragem de Recusa | Modelo inventa quando não deve, ou diz não saber quando deve responder. | Defina um limiar de similaridade: se a similaridade cosseno do top‑1 chunk com a pergunta for inferior a 0.7, instrua o LLM "Material irrelevante". | Reduz taxa de alucinação |
4. Lado de avaliação e iteração (saber onde ajustar)
Sem métricas, não é possível otimizar.
| Ponto de Otimização | Abordagem | Indicador |
|---|---|---|
| Criar conjunto de avaliação | Prepare 100~300 perguntas reais de usuários + respostas padrão + IDs corretos dos documentos recuperados. | Cubra diferentes dificuldades e intenções. |
| Avaliação Automatizada | Use RAGAS (Faithfulness, Answer Relevance, Context Recall) ou TruLens. | Três indicadores principais: Fidelidade, Relevância da Resposta, Recall de Contexto. |
| Avaliação Humana | Teste semanalmente 20 bad cases, analise tipos de erro (falha de recuperação / erro de geração / falta na base de conhecimento). | Priorização de melhorias. |
| Teste A/B | Em produção, teste em buckets diferentes estratégias de recuperação (ex.: BM25 vs pesquisa híbrida). | Indicadores online: satisfação do usuário, taxa de não resposta. |
5. "Experiência prática" que pode ser mencionada em entrevistas (pontos extras)
"No projeto RAG pelo qual fui responsável, a taxa de acerto inicial da linha de base era de apenas 67%. Fiz três coisas:
1. Mudei a divisão de chunks de fixo 1024 para dinâmica semântica (por título + parágrafo), a taxa de acerto subiu para 74%;
2. Adicionei pesquisa híbrida (vetor + BM25) e um pequeno modelo de rerank, a taxa de acerto chegou a 83%;
3. Otimizei o prompt e forcei a resposta[Informação relevante não encontrada], a taxa de alucinação caiu de 22% para abaixo de 5%.Além disso, estabelecemos um pipeline de avaliação contínua, executando a pontuação RAGAS em 200 perguntas a cada alteração, garantindo que não houvesse degradação."
Resumo final: Um roteiro completo de otimização RAG
Camada de dados → Limpeza de documentos, otimização de chunks, melhoria de metadados, embedding de domínio
Camada de recuperação → Pesquisa híbrida, rerank, reescrita de consultas, HyDE, ajuste de Top-K
Camada de geração → Reforço de prompt, instruções, compressão, citações, limiar de recusa
Camada de avaliação → Conjunto de avaliação, RAGAS, análise humana, experimentos A/B
评论
暂无已展示的评论。
发表评论(匿名)