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.
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ário | O que é gravado | O que é perguntado |
|---|---|---|
| Supersessão | 2 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 vencida | Uma 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?" |
| Handoff | O 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ão | Alice grava uma nota privada e uma decisão compartilhada. O agente do workspace grava uma observação sem informar visibilidade | Bob 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 ememory_retrieveem 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ário | ValorBrain | RAG vetorial simples | RAG com um índice por autor |
|---|---|---|---|
| Supersessão | 27/27 | 25/27 | — |
| Regra vencida | 36/36 | 27/36 | — |
| Handoff | 27/27 | 8/27 | — |
| Permissão | 36/36 | 27/36 | 18/36 |
| Total (respostas certas) | 126/126 | 87/126 | 18/36 |
| Nota privada de outra pessoa no contexto | 0/9 | 9/9 | 0/9 |
| Contexto com o código certo e sem código velho | 126/126 | 54/126 | 18/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.