Pular para o conteúdo

Pesquisa11 de outubro de 20266 min de leitura

Benchmark de Continuidade: o que o RAG simples não faz

Um benchmark aberto para o ciclo de vida da memória de agentes: decisões substituídas, regras vencidas, handoffs concluídos e notas privadas. ValorBrain e um RAG vetorial simples indexam os mesmos textos, e a pontuação é por exact match, sem LLM juiz. Primeira rodada: staging, 3 runs × 42 perguntas.

Equipe ValorBrain

Benchmarks de recall como LoCoMo, BEAM e LongMemEval perguntam se a memória acha um fato. Não perguntam se ela entrega ao agente o fato certo na hora certa: a decisão vigente e não a substituída, a regra que ainda vale e não a vencida, o handoff ainda aberto e não o concluído, e só o que quem pergunta pode ler. Esse ciclo de vida é o que separa memória de agente de um índice vetorial. Por isso construímos um benchmark que mede exatamente isso e publicamos o harness.

Código, gerador de dados, saídas cruas e comandos de reprodução: github.com/ValorBrain/valorbrain-amb/tree/main/continuity.

Cenários

CenárioO que é gravadoO que é perguntado
Supersessão2 ou 3 versões de uma decisão, cada uma declarando supersedes sobre a anterior. Metade dos textos traz data e "substitui a anterior", metade não. Uma decisão de controle nunca é revisada"Que código X usa agora?"
Regra vencidaUma regra gravada como fato com chave, com valid_until 10 dias atrás (vencida) ou 90 dias à frente (vigente), com e sem datas no texto"Está em vigor hoje? Que código ela permite?"
HandoffO agente passa o trabalho para a próxima sessão, conclui esse handoff e deixa um mais novo. Depois o mais novo também é concluído"O que ainda está pendente para mim?"
PermissãoAlice grava uma nota privada e uma decisão compartilhada. O agente do workspace grava uma observação sem informar visibilidadeBob e Alice perguntam por cada código

Cada resposta é um código único (ou "nenhum"). A pergunta também pode listar os códigos velhos que não podem ser entregues: a versão substituída, a regra vencida, o handoff concluído ou a nota privada de outra pessoa.

Método

  • ValorBrain (fluxo do produto): memory_prepare (MCP) no início da sessão e memory_retrieve em cada pergunta, sempre com o token da própria pessoa que pergunta.
  • Baseline: RAG vetorial simples sobre os mesmos textos (bge-small-en-v1.5, cosseno, top 8, um índice por workspace), mais uma variante com um índice por autor. A baseline vê todos os textos, mas nenhum metadado de ciclo de vida, e é justamente isso que está em teste.
  • Juiz: exact match determinístico sobre a resposta do leitor, sem LLM juiz. O leitor usa o mesmo prompt para todos os sistemas, com temperatura 0. Também pontuamos o contexto entregue: o código certo presente e nenhum código velho ou proibido. Essa medida não depende de modelo nenhum.

Primeiro resultado

Motor de staging af530899, 11/10/2026, dataset continuity-v1 (seed 20261011, 42 perguntas), 3 runs com workspaces novos, 126 respostas por sistema. O leitor servido pelo nosso gateway foi o longcat-2.5-preview-free.

CenárioValorBrainRAG vetorial simplesRAG com um índice por autor
Supersessão27/2725/27—
Regra vencida36/3627/36—
Handoff27/278/27—
Permissão36/3627/3618/36
Total (respostas certas)126/12687/12618/36
Nota privada de outra pessoa no contexto0/99/90/9
Contexto com o código certo e sem código velho126/12654/12618/36

Os números dizem quatro coisas:

  • Handoff não é problema de busca. Para um embedding, o handoff concluído e o aberto são parecidos. O RAG acertou 8 de 27, porque o status mora no handoff, não no texto. O ValorBrain entrega os handoffs pendentes no início da sessão.
  • O RAG vaza ou fica cego. Com um índice compartilhado, a nota privada da Alice chegou ao Bob 9 vezes em 9. Com um índice por autor o vazamento parou, mas o time também deixou de ver as decisões compartilhadas e as notas do agente (18 de 36).
  • Contexto velho é o custo escondido. O RAG acertou muitas perguntas de supersessão porque o leitor chutou a versão mais nova. Medindo só o contexto, ele entregou a versão velha junto com a vigente em 18 de 27 casos.
  • Escrita de agente ficou interna. As 150 escritas feitas com credencial de agente nesta rodada foram gravadas como internal: visíveis ao time, nunca públicas.

Limites

N pequeno: 9 perguntas por variante, 3 runs. As tabelas por variante, com intervalo de 95%, estão no repositório. Há também um dataset de referência maior, com 140 perguntas, já commitado. Chamado sozinho, o memory_prepare ainda trazia a versão superada no bloco de recall do contexto em 18 de 27 perguntas de supersessão, e mesmo assim o leitor respondeu certo. A correção (PR #380 do motor) ainda não estava no staging nesta rodada, e vamos publicar a nova rodada. Os cenários foram escritos pela nossa equipe. Abrir o harness serve justamente para que qualquer pessoa possa rodar, alterar e apontar para outro sistema.

Reproduzir

git clone https://github.com/ValorBrain/valorbrain-amb && cd valorbrain-amb/continuity
uv run --extra test pytest -q tests
uv run continuity-bench run --dataset data/continuity-v1-n3.json --runs 3 --out results/minha-rodada
uv run continuity-bench report --results results/minha-rodada

A URL do motor, as credenciais e o endpoint do leitor vão em variáveis de ambiente, descritas no README da suíte.

Próximo passo

Menos recomeço. Mais continuidade

Leve um projeto real. Em uma conversa, mapeamos onde o contexto se perde entre as pessoas e os agentes do seu time — e por onde começar.

Testar com um projeto