Ir para o conteúdo

Preprint · CC BY 4.0 · reproduzível a partir do repositório

Navegue, não recupere.

Uma afirmação, e nós a medimos: fundamentação é uma propriedade do ambiente, não do modelo. Jogue um modelo de 12B em uma pilha achatada de chunks e ele tira zero nas perguntas que exigem uma cadeia. Coloque o mesmo modelo em uma floresta curada por onde ele possa caminhar, e ele acerta tudo, mais barato por resposta correta, em hardware que cabe embaixo da mesa.

Autor
Jimmy Wesley Maciel Soares
Afiliação
Pesquisador independente, São Paulo, Brasil
Status
Preprint · sem revisão por pares · DOI pendente
Licença
Texto sob CC BY 4.0

A tese

O modelo não mudou. O mundo em que o colocamos, sim.

Pegue a pessoa mais inteligente que você conhece e entregue a ela onze perguntas sobre a documentação interna da sua empresa, perguntas reais, do tipo que as pessoas de fato fazem. Agora imponha a condição do RAG: para cada pergunta, ela pode ler seis parágrafos, escolhidos por uma função de similaridade que viu apenas a pergunta, e mais nada. Sem follow-up. Sem “deixa eu conferir para onde esse relatório aponta”.

Ela vai falhar. Não por falta de inteligência, mas porque aqueles seis parágrafos contêm o primeiro elo de uma cadeia cujos elos restantes moram em outro lugar, e o protocolo proíbe segui-los. Rodamos exatamente esse protocolo contra um conjunto de perguntas estritamente multi-hop. O modelo não alucinou até chegar a respostas erradas; ele fez algo mais condenatório. Onze vezes em onze, ele informou, corretamente e inutilmente, que o contexto não sustentava a pergunta.

Então removemos a restrição. Mesmo modelo, mesmo corpus, as mesmas onze perguntas, só que desta vez ele podia caminhar: ler um mapa, farejar suas opções, saltar para o próximo nó, seguir uma referência cruzada, abrir um corpo de texto só quando já tivesse certeza. Onze de onze.

É esse o paper inteiro. Tudo abaixo é o mecanismo que torna a segunda rodada possível, e a contabilidade que diz quanto ela custou.

Nada no modelo mudou. O que mudou foi o formato do mundo em que o colocamos.
MonkeyLLM: Stigmergic Navigation of Knowledge Forests, §1.1

O problema

Recuperação é um palpite dado antes de alguém ter lido qualquer coisa

Fatiar, gerar embeddings, pegar os k primeiros, gerar. É a arquitetura padrão da maioria dos sistemas em produção hoje, e quatro propriedades desse formato decidem o resultado antes mesmo de o modelo entrar em cena.

  • Ela recupera uma vez só

    A aposta sobre quais fragmentos importam é feita antes de o modelo ter lido uma palavra, e nunca é revista. Não há segunda olhada, porque não há de onde olhar. Perguntas encadeadas derrotam a recuperação de tiro único estruturalmente, não probabilisticamente.

  • Ela é cega à estrutura

    O fatiamento destrói a organização nativa do corpus: pastas, seções, referências cruzadas, a tabela que estava ao lado do parágrafo. O que sobra é um saco de fragmentos onde antes havia um caminho, e similaridade não é um caminho.

  • Ela não aprende nada

    A milésima consulta custa exatamente o que custou a primeira e cai exatamente nos mesmos chunks. Um pipeline que respondeu uma pergunta ontem não sabe nada hoje que o ajude. Não existe substrato sobre o qual a experiência pudesse se acumular.

  • E os agentes pagam o imposto do grep

    Observe um agente de código se orientar: grep, abrir, ler, reler; minutos e milhares de tokens gastos reconstruindo contexto antes da primeira decisão útil, em toda sessão. Conhecimento não estruturado taxa agentes mesmo quando não há retriever algum à vista.

A falha é invisível à amostragem

Em perguntas de dificuldade mista, o top-k clássico parece respeitável: é o número que uma demo mostra para você. Acrescente a exigência de que toda pergunta precise de pelo menos três saltos encadeados e a pontuação vai a zero. Como o colapso é estrutural em vez de gradual, qualquer avaliação que também contenha perguntas de um salto dilui o penhasco na média e reporta um número saudável sobre um sistema quebrado.

A ideia

Uma floresta onde um modelo pequeno pode ficar de pé

O conhecimento vive em um grafo hierárquico de nós markdown versionado em git. Um modelo pequeno entra pela busca e forrageia: lê passaportes, segue arestas tipadas e deixa uma trilha para quem caçar depois. Nenhum animal que vive de recursos dispersos roda busca por similaridade no próprio habitat.

  • Passaportes, não chunks

    Todo nó carrega um passaporte curado e validado por máquina: título, um resumo preso a um orçamento rígido de sessenta tokens, tags e um cheiro de uma linha para cada vizinho. É isso que transforma um salto em decisão em vez de aposta: o agente escolhe qual porta abrir antes de abrir qualquer uma. Toda observação tem orçamento e avisa em voz alta quando foi truncada, para que “não está aqui” nunca se confunda com “foi cortado”.

  • Arestas tipadas, todo write é um commit

    As arestas são curadas e tipadas (esta nota substitui aquela, esta entidade é dona daquele incidente), não inferidas de distância de cosseno. A floresta é um repositório git: todo write, de humano ou de agente, é um commit. Pergunte a um pipeline de RAG por que ele recuperou o que recuperou e você recebe similaridades de cosseno; pergunte a uma floresta e você recebe uma trilha que pode percorrer você mesmo.

  • Trilhas de feromônio

    Uma caçada bem-sucedida deposita calor ao longo da trilha que percorreu e pode cunhar um atalho permanente. O calor evapora por meia-vida, então trilhas que deixam de compensar somem. O corpus vira o meio pelo qual os agentes ensinam uns aos outros, entre sessões, sem nunca se comunicarem: estigmergia, emprestada intacta da otimização por colônia de formigas.

O Princípio da Floresta

Gaste inteligência no ambiente para poder gastar menos no modelo.
MonkeyLLM · The Forest Principle

As três cláusulas são independentes. Estrutura curada transforma um palpite global difícil (quais k fragmentos são conjuntamente suficientes?) em uma sequência de perguntas locais fáceis. O retorno estigmérgico faz a milésima consulta ser mais barata e mais bem fundamentada que a primeira. E a economia decorre das duas primeiras: um modelo local de 12B supera a arquitetura de que um modelo de fronteira precisa para falhar com elegância.

O reflexo da área é uma janela maior, um leitor maior, um re-ranker melhor: inteligência em tempo de consulta, paga a cada consulta, sem aprender nada. O Princípio da Floresta move esse gasto para o momento da ingestão e para a estrutura, onde ele acumula. Ele também independe de modalidade: qualquer coisa com substrato decomponível, sinais curados baratos sobre suas partes e consultas repetidas cujos acertos possam ser registrados é candidata. O invariante é a regra, não o markdown.

As evidências

O que de fato medimos

Um modelo de 12B servido localmente, um corpus, as mesmas perguntas, três arms. Nenhum modelo de escala de fronteira aparece em lugar algum do paper, e toda figura abaixo se regenera a partir de scripts versionados no repositório.

O penhasco

11 perguntas feitas

0/1111/11

RAG top-k clássico

um tiro · seis parágrafos

Navegador da floresta

mesmo modelo · caminhando

Onze perguntas, cada uma exigindo pelo menos três saltos encadeados. Mesmo modelo de 12B, mesmo corpus, mesmas perguntas: só mudou o formato do mundo ao redor. O top-k não respondeu errado; ele reportou corretamente que seus seis parágrafos não bastavam, onze vezes em onze.

Custo em tokens por resposta correta

RAG iterativo1,00×
Navegador da floresta0,66×
Gráfico de barras do custo em tokens por resposta correta, indexado a uma baseline de RAG iterativo igual a 1,00: RAG iterativo 1,00×, navegador da floresta 0,66×. Menor é melhor.
Indexado à baseline de RAG iterativo. As contagens brutas de tokens por pergunta são comparáveis entre os dois: a diferença é que um deles responde à pergunta. Errar barato não é economia. Menor é melhor.

Latência p95 por pergunta

RAG iterativo17,5 s
Navegador da floresta8,4 s
Gráfico de barras do tempo de parede no percentil 95 por pergunta: RAG iterativo 17,5 segundos, navegador da floresta 8,4 segundos. Menor é melhor.
Tempo de parede no percentil 95 sobre o mesmo conjunto multi-hop. O RAG iterativo recupera parte do que o top-k perde, mas paga em variância de latência, e ainda erra um terço das perguntas. Menor é melhor.
recall@5 = 1,00
Busca de entrada a 1,3 ms p95, só com BM25: sem embeddings, sem banco vetorial, sem GPU. Dar peso de ranking aos campos que o curador disciplina mais (um título é um ato de nomear; um alias, um ato de antecipar quem pergunta) fechou por inteiro a distância de recall@5 para a busca híbrida, sem custo mensurável de latência.
12/14 em um tiro
O caminho harvest sem LLM (buscar, fundir, empacotar: nenhum agente no loop) mais uma única completion responde 12 de 14 perguntas em cerca de 3 segundos cada, e recuperação e leitura nunca falharam juntas. A regra de deployment que cai disso: roteie primeiro o tiro único barato e escale para o agente que caminha quando a resposta é agregada ou o pacote volta seco, que é exatamente onde só a navegação alcança.
1,71 s/documento
Ingestão ponta a ponta sobre 100 documentos reais e heterogêneos, com 100% dos resumos gerados passando no contrato de sessenta tokens e zero links quebrados ao final. Construir uma floresta também não exige um modelo de fronteira.
1 × RTX 3060
O rig do benchmark: uma única placa intermediária de 12 GB, não uma GPU de workstation. Um 12B quantizado cabe inteiro nela, e qualquer endpoint compatível com OpenAI (OpenRouter, llama.cpp, Ollama) roda o mesmo modelo sem nenhuma GPU local.

Números do preprint, §5. O corpus, os conjuntos de perguntas e o harness estão versionados no repositório; toda tabela se regenera com um comando.

A parte honesta

O que nós não afirmamos

Dois achados do paper são fracassos diante dos próprios critérios originais, e estão escritos lá em vez de descartados. Um benchmark em que só se pode passar não é um benchmark.

  1. O critério de convergência não foi atingido

    O aprendizado por trilhas deveria cortar pelo menos um quarto dos saltos ao longo de exposições repetidas. Medido em cinco passagens, os saltos caíram, cerca de metade do limiar que tínhamos estabelecido. Critério: não atingido. O mecanismo estava comprovadamente funcionando: atalhos foram enxertados na primeira passagem, reforçados sem duplicatas depois, e o re-ranking por calor se manteve estável. A resolução é o achado. Boa busca de entrada somada a curadoria disciplinada já navega este benchmark a frio em cerca de um salto e meio, e não há um quarto a recuperar perto do piso de um salto. Curadoria e aprendizado por trilhas são substitutos econômicos; trilhas precisam de corpora mais profundos para compensar.

  2. Navegar não é de graça

    Caminhar custa um salto por vez. Em perguntas rasas, o top-k clássico é mais rápido e perfeitamente adequado, e é por isso que existe um caminho de tiro único, sem LLM, ao lado do agente. A regra de implantação que sai das medições é rotear primeiro pelo caminho barato e escalar para a navegação quando a resposta cheirar a agregação, ou quando o caminho barato voltar vazio. Não estamos afirmando que você deva caminhar em todo lugar.

  3. É um preprint, e o DOI está pendente

    O paper está escrito, versionado e público. Não passou por revisão por pares, e o depósito do DOI ainda não aconteceu. Não vamos descrevê-lo como outra coisa. Ele é publicado como prior art e como convite aberto à replicação, sob CC BY 4.0, tendo a atribuição como única condição.

  4. Onde ainda não foi testado

    Uma única família de benchmark, gerada por nós: faltam suítes multi-hop externas, e os números de busca de entrada premiam exatamente os campos de nomeação que o nosso próprio pipeline cura, mais um motivo para corpora externos virem primeiro. A correção é avaliada por casamento de substring. A tabela principal ainda não tem repetições estatísticas. Nossos corpora são pequenos, de centenas a milhares de nós, e o comportamento em cem mil não foi testado. E a camada de aprendizado introduziu uma classe de falha genuinamente nova: como o calor não é condicionado à consulta, uma trilha desgastada por uma pergunta pode elevar o nó errado para outra. Nós esbarramos nela, rastreamos e demos nome. Não a consertamos.

Reproduza o 0/11 primeiro.

Leva um comando, e é o argumento inteiro. Clone o repositório, construa a floresta de fixture, aponte para qualquer endpoint compatível com OpenAI (um servidor llama.cpp local já basta) e rode o bench. Se você prefere ter uma contraparte a ter um fim de semana, isso a gente também faz.