Executando verificação de segurança...
14
S1LV4
4 min de leitura ·

Pitch: Como reduzi em 98% o uso de contexto (e os custos) de IA no meu workflow (open-source)

Link do Projeto: https://github.com/S1LV4/th0th

Se você usa assistentes de IA no seu dia a dia para desenvolver, provavelmente já esbarrou em dois grandes gargalos: o limite da janela de contexto e os custos crescentes de API.

Eu estava vivendo exatamente isso e decidi construir uma solução. O que começou como um sistema simples para guardar o conhecimento de projetos evoluiu para uma arquitetura robusta de gestão inteligente de contexto. Batizei o projeto de Th0th (ou Tot):

“THOTH ou TOT: É o deus da escrita e da sabedoria. Os egípcios acreditavam que Thoth tinha criado os hieróglifos. Thoth era também conhecedor da matemática, astronomia, magia e representava todos os conhecimentos científicos. Sua associação mais antiga refere-se a ele como o deus da Lua.”

O Th0th atua como um “guardião do conhecimento”, reduzindo o uso de tokens em até 98% nas buscas semânticas para assistentes de IA.

A Arquitetura do Th0th

Desenvolvido majoritariamente em TypeScript (96.8%) e rodando sobre o Bun para garantir máxima performance, o Th0th utiliza o SQLite (bun:sqlite) como mecanismo de armazenamento. A arquitetura se apoia em quatro pilares fundamentais:

1. Busca Semântica Híbrida (Vector + Keyword)

A busca vetorial pura não é suficiente para código. Em programação, nomes de variáveis, assinaturas e precisão lexical são críticos. Por isso, implementei uma abordagem híbrida:

  • Embeddings vetoriais para entendimento semântico (via modelos locais do Ollama ou API).
  • Busca léxica tradicional para correspondência exata.

Para combinar esses resultados perfeitamente, o sistema utiliza o algoritmo RRF (Reciprocal Rank Fusion), garantindo o retorno do trecho semanticamente mais relevante junto da função ou interface exata mencionada.

2. Compressão Extrema (Sem LLM):

Enviar código bruto para o modelo é um desperdício massivo de tokens. O Th0th possui um motor de compressão baseado em regras locais — sem uso de LLM, sem rede e sem custo adicional. As estratégias de redução incluem:

  • code_structure: Extrai apenas assinaturas, interfaces, classes e hierarquia de código, gerando de 70% a 90% de redução de tokens.
  • conversation_summary: Comprime históricos de chat com redução de 80% a 95%.
  • semantic_dedup: Elimina redundância estrutural, reduzindo o conteúdo em 50% a 70%.
  • hierarchical: Organiza documentações em níveis de prioridade, com 60% a 80% de economia.

A compressão acontece antes do envio ao modelo, cortando custo e latência drasticamente.

3. Memória Persistente e Cache Multinível

IA é, por padrão, stateless (sem estado). O Th0th não é. Transformei a IA em um sistema com memória de longo prazo por meio de:

  • Armazenamento persistente hierárquico em SQLite.
  • Cache L1/L2 com TTL (Time to Live).

Ferramentas como “th0th_remember” e “th0th_recall” permitem armazenar e buscar informações importantes de sessões anteriores. Se a mesma estrutura é solicitada novamente, o cache a retorna instantaneamente, sem recalcular embeddings.

4. Abordagem Local-First (Custo Zero)

Um requisito inegociável era a independência de APIs externas. O Th0th é 100% offline. Criei um script (setup-local-first.sh) que automatiza tudo: instala o Ollama, baixa modelos locais como nomic-embed-text ou bge-m3, cria os diretórios de dados e inicializa o banco vetorial local em SQLite.

O resultado? Custo de manutenção zero ($0), funcionamento offline e a garantia de que seu código-fonte nunca sai da sua máquina.

graph TD
    A[Consulta do Assistente de IA/Usuário] --> B{Cache L1/L2 e Memória Persistente}
    
    B -- Cache Hit --> C[Retorno Instantâneo do Contexto]
    B -- Cache Miss --> D[Busca Semântica Híbrida]
    
    subgraph Busca e Ranqueamento
        D --> E[Busca Vetorial: Embeddings locais via Ollama/Mistral]
        D --> F[Busca Léxica Tradicional: Correspondência exata]
        E --> G[Algoritmo RRF: Reciprocal Rank Fusion]
        F --> G
    end
    
    G --> H[Motor de Compressão Extrema Local - Sem LLM]
    
    subgraph Estratégias de Compressão
        H --> I[code_structure: Reduz 70-90%]
        H --> J[conversation_summary: Reduz 80-95%]
        H --> K[semantic_dedup & hierarchical: Reduz 50-80%]
    end
    
    I --> L[Armazenamento em SQLite / Atualização do Cache]
    J --> L
    K --> L
    
    L --> M[Ferramenta th0th_optimized_context]
    
    M --> N[Contexto Otimizado enviado via MCP ou REST API para a IA]
    C --> N

Integração no Workflow (MCP e REST)

Para ser útil no dia a dia, o Th0th oferece interfaces robustas:

  • Suporte Nativo ao MCP (Model Context Protocol):
    Comunicação via stdio, permitindo o uso com clientes padrão da indústria, como o Claude Desktop.
  • API REST/PLUGIN OPENCODE: Para integrações diretas com assistentes locais ou plugins customizados (como o OpenCode).

O comando/tool mais interessante é o th0th_optimized_context, que executa, em uma única chamada: a busca semântica híbrida, a aplicação do RRF, a compressão estrutural e o retorno do contexto otimizado.

É a garantia de máxima relevância com o mínimo de tokens.

O impacto real e Reflexão Final

Após implementar essa infraestrutura, minhas sessões ficaram mais rápidas, os custos caíram drasticamente e a previsibilidade das respostas aumentou. A IA passou a trabalhar com um contexto curado, em vez de um despejo bruto de informações (dumping).

À medida que o uso de IA aplicada a código se intensifica, acredito que precisaremos de uma nova camada arquitetural: sistemas intermediários de gestão de contexto. Não basta ter modelos maiores; precisamos de infraestrutura melhor.

O Th0th é minha contribuição open-source para essa direção, disponível no GitHub (S1LV4/th0th) sob licença MIT.

#AI #ArtificialIntelligence #GenerativeAI #LLM #DevTools #SoftwareArchitecture #ContextEngineering #SemanticSearch #OpenSource #TypeScript #LocalFirst #MCP

Carregando publicação patrocinada...
1

Muito bom seu projeto, também gostei muito do projeto do elzobrito sobre "Pare de deixar LLMs editarem seu código direto: Conheça a arquitetura ESAA (Event Sourcing para Agentes Autônomos)" postado recentemente aqui no TabNews. Ambos me parecem complementares de certa forma.

Eu mesmo estou trabalhando em um projeto próprio similar ao de vocês, me apaixonei por essa area de "harness" de IA.

Criei uma memória cross-project e cross-agent via MCP, nela eu também uso SQLite pra salvar preferencias, soluções e informações úteis de todos os meus projetos, assim posso usar tanto Claude Code quanto Codex, OpenCode, Gemini CLI, Antigravity e as informações de todos os projetos estão lá, alguns deles se complementam, então não queria apenas criar um AGENTS.md ou documentações em cada, não é a melhor forma de gravar soluções, snippets, etc.

Me baseei na estrutura do Cline's Memory Bank e da memória do AgentZero, no meu caso, é tudo 100% local, não preciso usar API externa de embedding nem nada do tipo e isso tem me ajudado a poupar tokens também, assim como criar skills pra coisas que eu preciso sempre instruir os agentes.

Atualmente estou em um projeto de orquestração completa de agentes, usando LiteLLM, OpenClaw, AgentZero, MCP, Supabase, etc... Espero criar uma startup completa de IA nas próximas semanas kkkk (me desejem sorte, vou precisar)

Se tiver interesse em trocar figurinhas sobre agent harness, fico a disposição!

1
1
0
1

Sucesso, irmão, projeto legal demais!

Tive problemas em conectar com o Antigravity só pelo read.me, não li nada a respeito de ser possível também, mas já instalei e comecei o uso via http mesmo. Por enquanto tem sido efetivo e parece trazer bons resultados. Passando um tempo e tentando com mais agentes eu retorno com um novo feedback.

1

Você consegue instalar de forma fácil agora. Adicione de forma nativa; basta interagir com o chat do próprio Antigravity e pedir para adicionar nas configurações do MCP dele.

{
  "mcpServers": {
    "th0th": {
      "type": "local",
      "command": ["bunx", "@th0th-ai/mcp-client"],
      "env": {
        "TH0TH_API_URL": "http://localhost:3333"
      },
      "enabled": true
    }
  }
}

OBS: ainda é necessário estar com a API rodando localmente.

1
1

Cara eu sou leigo nisso, mas que projeto SINITRO muito boa meu irmao!
Minha dúvida é esse projeto conversa com assistente de IA que são usados para codar? E como essa comunicação funciona?

1

Vlww, basicamente é um intermediador, ele funciona como ferramenta de memória.

graph TD
    subgraph Clients["🖥️ Clientes / AI Assistants"]
        CD["Claude Desktop"]
        OC["OpenCode"]
        API_CLIENT["REST Client / curl"]
    end
    subgraph Interfaces["⚡ Interfaces de Acesso"]
        MCP["MCP Server (stdio)"]
        REST["Tools API (REST :3333)"]
    end
    subgraph Core["🧠 Core - Lógica de Negócio"]
        direction TB
        SEARCH["🔍 Hybrid Search (Vector + Keyword + RRF)"]
        EMBED["🔢 Embeddings (Ollama local / Mistral API)"]
        COMPRESS["🗜️ Compression Engine (70-98% token reduction)"]
        MEMORY["💾 Persistent Memory (contexto cross-session)"]
        CACHE["⚡ L1/L2 Cache (TTL multi-level)"]
    end
    subgraph Tools["🛠️ MCP Tools"]
        T1["th0th_index - Indexar projeto"]
        T2["th0th_search - Busca semântica"]
        T3["th0th_remember - Armazenar memória"]
        T4["th0th_recall - Recuperar memórias"]
        T5["th0th_compress - Comprimir contexto"]
        T6["th0th_optimized_context - Search + Compress"]
        T7["th0th_analytics - Métricas e cache"]
    end
    subgraph Storage["🗄️ Armazenamento Local"]
        SQLITE[("SQLite - Vector DB + Memórias")]
        FS["📁 Sistema de arquivos - Projeto indexado"]
    end
    subgraph Embeddings_Providers["🤖 Provedores de Embeddings"]
        OLLAMA["Ollama local - nomic-embed-text / bge-m3"]
        MISTRAL["Mistral API (cloud)"]
    end

    CD -->|"MCP protocol stdio"| MCP
    OC -->|"MCP protocol stdio"| MCP
    OC -->|"HTTP plugin"| REST
    API_CLIENT -->|"HTTP REST"| REST

    MCP --> Tools
    REST --> Tools

    T1 --> SEARCH
    T2 --> SEARCH
    T3 --> MEMORY
    T4 --> MEMORY
    T5 --> COMPRESS
    T6 --> SEARCH
    T6 --> COMPRESS
    T7 --> CACHE

    SEARCH --> EMBED
    SEARCH --> CACHE
    EMBED --> CACHE
    COMPRESS --> MEMORY

    SEARCH --> SQLITE
    MEMORY --> SQLITE
    EMBED --> SQLITE
    T1 --> FS

    EMBED -->|"modo offline"| OLLAMA
    EMBED -->|"modo cloud"| MISTRAL

    classDef client fill:#4A90D9,stroke:#2C5F8A,color:#fff
    classDef interface fill:#7B68EE,stroke:#5A4DB0,color:#fff
    classDef core fill:#2ECC71,stroke:#1A8A4A,color:#fff
    classDef tool fill:#F39C12,stroke:#B5770D,color:#fff
    classDef storage fill:#E74C3C,stroke:#A93226,color:#fff
    classDef provider fill:#95A5A6,stroke:#6C7A7D,color:#fff
    class CD,OC,API_CLIENT client
    class MCP,REST interface
    class SEARCH,EMBED,COMPRESS,MEMORY,CACHE core
    class T1,T2,T3,T4,T5,T6,T7 tool
    class SQLITE,FS storage
    class OLLAMA,MISTRAL provider
1
1
1
1

Interessante. Então, está funcionando da mesma forma que o th0th, haha. O th0th faz justamente isso, indexa todo o projeto e te permite realizar busca semântica, busca híbrida, entre outros.

1

Instalei aqui e rodei alguns testes. Vou continuar testando nos próximos dias. Achei bem legal mesmo.

Eu vi que existe um mecanismo de indexação.

Uma dúvida: existe algum tipo de mecanismo de auto-indexação?

Pergunto porque para ferramentas RAG de documentos que não são frequentemente alterados, a indexação é realizada basicamente uma única vez.

Agora para código, quando o código é indexado, cria-se uma segunda referência: o código em si e a indexação vetorial.

E conforme o código muda a indexação precisaria mudar também, caso contrário referenciaria código obsoleto. Procede?

Qual seria a melhor forma de automatizar isso? Hooks?

1

Sua pergunta procede totalmente. Código muda constantemente e a indexação precisa acompanhar, senão vira referência para código fantasma.

O Th0th já resolve isso hoje com detecção automática de staleness: a cada busca, o IndexManager compara os mtimes dos arquivos no disco contra a última indexação. Se detecta mudanças, faz reindexação incremental -- só reprocessa os arquivos alterados, não o projeto inteiro. Índices com mais de 24h também são marcados como stale automaticamente. Após qualquer reindexação, o cache é invalidado e re-aquecido com as queries mais frequentes.

Além disso, adicionei uma atualização recente, que inclui um job de consolidação em background que roda a cada 5 minutos, aplicando decay adaptativo nas memórias (decisões decaem lento, conversas decaem rápido), podando memórias obsoletas e limpando arestas órfãs do Knowledge Graph. O AutoCheckpointer cria snapshots automáticos de tarefas longas a cada N operações, e o Knowledge Graph extrai relações automaticamente sempre que uma nova memória é armazenada.

Estou adicionando melhorias como watch mode com file system watchers e integração com hooks de git para reindexação ainda mais reativa.

1

Primeiramente parabéns pela iniciativa, achei o projeto muito bom ! Uma dúvida que tenho é sobre como ou se esse projeto poderia me ajudar, no meu dia a dia uso ferramentas como codex no vscode.

1

Basta interagir com o chat do seu agente e pedir para adicionar o client nas configurações do MCP dele.

{
  "mcpServers": {
    "th0th": {
      "type": "local",
      "command": ["bunx", "@th0th-ai/mcp-client"],
      "env": {
        "TH0TH_API_URL": "http://localhost:3333"
      },
      "enabled": true
    }
  }
}

OBS: Ainda é necessário clonar o projeto e iniciar a API localmente (estou incluindo formas nativas de modificar isso e rodar de forma mais prática). Também possui um setup com Docker.

1

Agradeço pelo feedback! Sim consegue. Uso o vscode e o https://opencode.ai/ de forma integrada no meu workflow, mas você consegue utilizar facilmente com outros CLI (Claude Code, Codex) usando via MCP.

Sobre o seu workflow, acredito que sim e facilmente se aplicaria a qualquer cenário de uso, por se tratar de “intermediador de conhecimento profundo” do seu workspace (ou projetos).

1

Opa, desculpa se a minha pergunta for muito leiga. Mas esse projeto seria tipo um context7 só que para o meu projeto aberto localmente? Ele roda a cada atualização no código?

1

Em tese sim! O Context7 é usado para consultar documentação atualizada de bibliotecas e frameworks externos. O th0th criei para resolver um problema diferente: dar ao agente de código um conhecimento profundo e específico do seu projeto local.
Ele funciona assim:

  1. Indexação semântica - Ele indexa todo o seu projeto criando embeddings do código, permitindo busca semântica (não apenas por texto exato, mas por significado).
  2. Cache em camadas (L1/L2) - O sistema mantém o contexto atualizado via cache, então após a primeira indexação as buscas são muito rápidas.
  3. Otimização de contexto - O grande ganho é evitar que o agente precise usar ferramentas que leem arquivos inteiros ou varrem todo o projeto. Com o th0th, ele já sabe exatamente qual arquivo, qual linha, qual trecho é relevante para a pergunta. Isso economiza tokens e torna as respostas mais precisas.
  4. Memória persistente - Ele também armazena decisões arquiteturais, padrões descobertos e preferências do usuário, mantendo contexto entre sessões.

Sobre rodar a cada atualização:

ele não roda automaticamente a cada save. A indexação é feita sob demanda (ou pode ser configurada para reindexar quando necessário). Mas o cache garante que, uma vez indexado, o contexto se mantém eficiente sem precisar reindexar o projeto inteiro a cada mudança.

Resumindo: Context7 = documentação externa atualizada. th0th = conhecimento profundo do seu projeto local.

1

Parabéns! Me parece que vc esta bem alinhado com o propósito, fiquei com dúvidas da arquitetura e como referênciar a AI com o projeto, logo, estou estudando e "montando" uma stack para codar 10x. Logo abalisei outros projetos que me parecem similares, mas sempre existe a dúvida, e tempo para testar( raro). Obrigado por compartilhar e irei ler o projeto

1

Outro detalhe que esqueci de comentar, rodando via plugin do opencode, o th0th é capaz de forma nativa aproveitar as seções/memórias/interações, assim o processo de “aprendizagem” e “conhecimento” torna-se mais rápido e menos custoso.

1

Atualmente existem duas formas (mcp e plugin do opencode), a própria tool identifica a pasta raiz do seu projeto e armazena com a referência de tal. Estou deixando o setup mais fácil. (Irei fazer o CI/CD para deployar no NPM e adicionar um docker-compose, já para ter um setup do mcp com docker) Se tiver dúvidas ou quiser contribuir me chama https://linktr.ee/joao.ai

0
0