stamatios
← Voltar ao feed
Pequeno arquivo de gavetas embutido no peito de um robô, metáfora da memória do funes para agentes
Agentes · Open Source

funes dá aos agentes uma memória local com busca vetorial e BM25

resumo de ~3 min

funes é uma camada de memória durável para agentes de programação, apresentada como um binário para Claude Code, Codex, pi e Hermes. O problema: cada agente encontra os projetos como estranho e o raciocínio de uma sessão some quando ela termina. Os vestígios produzidos formam um registro do que mudou e por quê, mas são memória potencial; usá-los exige indexação, recuperação, ranking e proveniência exata.

Como funciona

funes parte das sessões já existentes na máquina. funes add claude constrói o primeiro índice, dá ao agente as ferramentas recall e get e instala a automação que indexa cada turno concluído. A indexação é incremental. O agente pode acionar recall sozinho quando uma tarefa toca decisão, justificativa ou achado anterior. recall devolve o texto original, não um resumo, e mostra agente, horário, sessão e turno; get abre o turno completo. Por baixo, um pipeline determinístico analisa cada vestígio suportado na mesma forma de turno e bloco, divide em trechos, gera embeddings com um modelo local fixado e grava em um dataset Lance local. A consulta combina busca vetorial e BM25, funde rankings, reordena com cross-encoder, repondera por recência e anexa trechos vizinhos. Propriedades: memória entre agentes; evidência bruta intacta; e recall local por padrão, sem conta ou repositório no Hub, com embedding e reordenação na máquina.

Memória compartilhada e consulta

Para levar a memória a outras máquinas, funes add codex acme/funes-memory vincula um dataset. A local é um Lance dataset; a compartilhada é um dataset do Hugging Face, privado por padrão e de propriedade do usuário. funes mantém o dataset atualizado, indexando cada turno localmente e publicando nos limites de sessão. Antes do envio ao Hub, credenciais são redigidas na indexação; a publicação varre cada trecho e retém o que ainda pareça segredo, com o scanner documentado em SECURITY.md. Memórias remotas são cacheadas localmente. O Hub oferece propriedade, acesso, versionamento e distribuição; a memória não vira conta em serviço separado nem é alugada por API. funes ask é a versão somente leitura para uma pergunta: lê a memória local ou compartilhada, recupera passagens, entrega a um agente e devolve resposta fundamentada que nomeia as fontes; se as passagens não sustentam a resposta, o agente diz isso.

Troca de agentes e benchmark

A memória não fica presa ao agente ou modelo que a criou: começar no Claude Code, continuar no Codex e voltar ao Claude, ou usar pi com modelo local ou servido pelo roteador do Hugging Face. Isso vale entre máquinas, equipes e projetos abertos; memórias publicadas trazem cartão de dataset e tag funes no Hub. No benchmark handoff-vs-recall, com duas tarefas cuja resposta não pode ser reconstruída sem o conhecimento prévio da sessão, a compactação - padrão em muitos agentes - chegou a uma tarefa e nunca à outra; onde falhou, o resumo achatou achados importantes. Recall devolveu as próprias passagens e foi o mais barato dos três nas duas tarefas, 8x mais barato que um handoff escrito em uma e 4x na outra.

Contraponto nos comentários

Em comentário, vshulcz, que diz manter a ferramenta deja-vu, relata teste com funes 1.3.0 sobre 19.195 sessões reais, com LongMemEval nos layouts de ~/.claude e ~/.codex, e 100 perguntas: índice completo em 2h03m num M4 Pro, 308 mil trechos, 6,3 s por consulta. Padrões: hit@1 9/100, hit@5 39, found@50 71; com --half-life 0, 19/46/71. Diz que a meia-vida de 30 dias reduz pela metade o rank 1 em históricos com mais de um mês, a maioria em disco real, e sugere menção na documentação. Sem recência, vetor+reordenação seria o melhor ranker no rank cinco. Afirma ainda que a primeira passagem de 'cerca de um minuto' deixa 218 de 19 mil sessões indexadas (0/100 respostas), ou seja, cerca de um minuto até o embedding começar. Compara deja-vu (BM25 simples sobre 24 agentes): 29 s de índice, 24 ms de resposta, hit@1 18/100, hit@5 35. Dispõe-se a correções.

Base aberta

funes se apoia em embeddings de código aberto para rodar localmente, nos datasets append-only do Lance e no cache e deduplicação do Hub. O próprio funes é aberto. A conclusão é que os agentes já escreveram o registro; funes o transforma em memória que o próximo agente pode ler, em qualquer máquina.