Skip to main content
Chain-of-Verification (Dhuliawala et al., 2023) é a técnica canônica para reduzir hallucination em outputs LLM. O fluxo: produzir resposta → gerar perguntas de verificação sobre as claims → responder cada pergunta independentemente (sem ver a resposta original) → reconciliar discrepâncias. O ChatCLI implementa via VerifierAgent (pure reasoning, zero tools) + VerifyHook (PostHook do pipeline). Quando discrepância é detectada, o flag verified_with_discrepancy é gravado em result.Metadata, ativando o Reflexion downstream.
CoVe é opt-in. Com CHATCLI_QUALITY_VERIFY_ENABLED=false (default), zero overhead. Quando ligado, adiciona +1 chamada LLM por ponto de uso com effort alto (default effort="high").

Protocolo do VerifierAgent

O modelo recebe TASK + DRAFT e emite cinco blocos:

Regra crítica: respostas INDEPENDENTES

O protocolo instrui o modelo a responder cada Q<n> sem referenciar o DRAFT. Isso é o coração de CoVe — se as respostas independentes contradizem o draft, há claim suspeito.
Modelos que simplesmente regurgitam o draft nas respostas defeat o padrão. O system prompt enfatiza isso explicitamente; use modelos capazes de “self-distance” (Claude Sonnet, GPT-4+).

Fluxo do VerifyHook

1

Worker termina

Qualquer agente produz result.Output.
2

PostRun do VerifyHook

3

Dispatch VerifierAgent

4

ParseVerifierOutput

Extrai os 5 blocos. Tolerante a ordem, bullets com - ou *.
5

HasDiscrepancy check

Status=="verified-with-corrections" OU Discrepancies!="none".
6

Se discrepância + RewriteOnDiscrepancy

7

Reflexion consome o flag

Na mesma execução do pipeline, ReflexionHook.PostRun vê o metadata e, se OnHallucination=true, dispara lesson generation.

Exclude list (anti-recursão + agents não-textuais)


/verify — session toggle


Variáveis de ambiente

Override do verifier


Exemplo: catching hallucination sobre API

O http.Client do Go tem um campo DefaultTimeout que você pode setar globalmente. Basta fazer http.DefaultClient.DefaultTimeout = 30 * time.Second no init do programa.
Erro: DefaultTimeout não existe. É Timeout (e não há “DefaultTimeout” na stdlib).
Flag gravado em result.Metadata["verified_with_discrepancy"]=true. Se Reflexion está on (default), uma lesson é gerada em background:

Integração com Refine

Quando Refine + Verify estão ambos ligados, a ordem importa:
Refine melhora a qualidade estilística primeiro; Verify checa factual accuracy sobre o output já refinado. Ordem oposta (verify → refine) funcionaria, mas a reescrita do refine poderia introduzir claims não verificados.
Se você só liga um dos dois, prefira Verify para workflows factual (docs técnicas, código com API calls) e Refine para workflows estilísticos (summaries, relatórios).

Invocação direta

Ou com tool call direta ao verifier na orquestração de passos críticos:

Custo e latência

CoVe com modelos fracos gera perguntas superficiais ou “verificações” que só parafraseiam o draft. Use Sonnet, Opus, ou GPT-4+ como CHATCLI_AGENT_VERIFIER_MODEL.

Leia também

#3 Reflexion

Consome o signal verified_with_discrepancy para gerar lessons sobre hallucination.

#5 Self-Refine

Complemento estilístico: Refine poliaça, CoVe verifica factualmente.

Paper original (Dhuliawala et al.)

Chain-of-Verification Reduces Hallucination in Large Language Models

Configuração

Env vars e slashes num lugar só.