A hipótese
Hipótese 1 (H1): aplicar uma camada de filtragem pós-geração às respostas de LLM reduz a taxa de falsos-permite: casos em que o modelo produz uma resposta incorreta ou sem suporte e o sistema deixa passar assim mesmo.
A camada verificava duas coisas antes de liberar uma resposta:
- Validade de citações: todo ID de documento citado na resposta precisa aparecer no conjunto de evidências recuperado.
- Ancoragem léxica: a resposta precisa ter sobreposição suficiente de palavras com o conteúdo recuperado, acima de um limiar configurável.
Se a resposta falha em qualquer uma das verificações, o sistema faz fallback em vez de retornar a resposta.
Configuração
Corpus: documentação de SaaS B2B estruturada no Sanity, 50 queries rotuladas (34 esperadas para permitir, 16 esperadas para fallback).
Modelos testados: llama-3.1-8b-instant via Groq, gpt-4o-mini e o3-mini via OpenAI.
Condições:
- Condição A: recuperação + LLM, sem filtro.
- Condição B: recuperação + LLM + filtro (perfil padrão).
Métricas:
- Taxa de falso-permite: respostas que deveriam fazer fallback, mas foram permitidas.
- Taxa de falso-fallback: respostas que deveriam ser permitidas, mas acionaram fallback.
Cada query foi rodada nas duas condições para cada modelo. Os arquivos de saída foram salvos por modelo para nenhuma execução sobrescrever as anteriores.
Resultados
| Modelo | Falso-permite A | Falso-permite B | Falso-fallback A | Falso-fallback B |
|---|---|---|---|---|
| llama-3.1-8b-instant | 6,3% | 6,3% | 14,7% | 38,2% |
| gpt-4o-mini | 0,0% | 0,0% | 14,7% | 17,6% |
| o3-mini | 18,8% | 18,8% | 14,7% | 14,7% |
H1 não foi confirmada para nenhum modelo.
O filtro não teve efeito algum na taxa de falso-permite nos três modelos. Para o llama, ele aumentou substancialmente a taxa de falso-fallback: bloqueou respostas corretas em proporção bem maior, sem interceptar nenhuma das respostas erradas.
Por que o filtro não funcionou
Os dois sinais da camada são estruturalmente fracos contra os modos de falha que medimos.
Validade de citações é fácil de satisfazer. Um modelo que constrói uma resposta fluente com referências a IDs de documento reais do conjunto recuperado passa nessa verificação mesmo que o conteúdo factual divirja desses documentos. A verificação confirma presença, não precisão.
Ancoragem léxica falha nos dois sentidos. Bloqueia demais respostas corretas que parafraseiam em vez de citar a fonte. Deixa passar alucinações que por acaso usam terminologia consistente com o corpus.
Para o gpt-4o-mini, a taxa de falso-permite já era zero sem o filtro. O único efeito do filtro foi um pequeno aumento nos falso-fallbacks: bloqueou algumas paráfrases corretas.
Para o o3-mini, o filtro foi completamente transparente. As respostas do modelo, certas ou não, consistentemente pontuavam alto nos dois sinais. Esse resultado merece um post separado.
O que faríamos diferente
O problema raiz é que a sobreposição léxica mede similaridade superficial, não precisão semântica.
Um sinal substituto que trataria o modo de falha: verificar se a resposta está implicada pelo conteúdo recuperado, em vez de verificar se compartilha palavras com ele. Isso pode ser feito com um cross-encoder ou um modelo de NLI pequeno, ao custo de um passo de inferência adicional.
Uma etapa intermediária mais simples: usar similaridade de embedding entre a resposta e cada trecho recuperado, com um limiar sobre a pontuação máxima em vez de sobreposição léxica. Pelo menos mede significado e não vocabulário.
A verificação de citações ainda vale manter. É barata e detecta o modo de falha específico de um modelo citar documentos fora do conjunto recuperado. Só não pode carregar sozinha o peso de uma decisão de ancoragem.