# πŸ“– Antigravity Brain - DocumentaΓ§Γ£o para Desenvolvedores Guia completo para desenvolvedores e agentes de IA trabalhando neste projeto. ## πŸ“‘ Índice 1. [VisΓ£o Geral da Arquitetura](#visΓ£o-geral-da-arquitetura) 2. [Adicionando Novos Agentes](#adicionando-novos-agentes) 3. [Adicionando Novas Crews](#adicionando-novas-crews) 4. [Adicionando Novas Ferramentas](#adicionando-novas-ferramentas) 5. [ReferΓͺncia de ConfiguraΓ§Γ£o](#referΓͺncia-de-configuraΓ§Γ£o) 6. [Sistema de MemΓ³ria](#sistema-de-memΓ³ria) 7. [Diretrizes para Agentes de IA](#diretrizes-para-agentes-de-ia) --- ## πŸ—οΈ VisΓ£o Geral da Arquitetura ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Interface Web Chainlit β”‚ β”‚ (src/app.py:8000) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Roteador Inteligente β”‚ β”‚ (src/router.py) β”‚ β”‚ Classifica intenΓ§Γ£o do usuΓ‘rio β†’ Roteia para Crew β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β–Ό β–Ό β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Crew Infra β”‚ β”‚ Crew β”‚ β”‚ Crew RH/ β”‚ β”‚ β”‚ β”‚ SeguranΓ§a β”‚ β”‚ EvoluΓ§Γ£o β”‚ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β–Ό β–Ό β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ FΓ‘brica de Agentes β”‚ β”‚ (src/agents/factory.py) β”‚ β”‚ Carrega Persona β†’ Injeta Conhecimento β†’ Cria Agente β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β–Ό β–Ό β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Persona β”‚ β”‚ Conhecimentoβ”‚ β”‚ Ferramentas β”‚ β”‚ (.md) β”‚ β”‚ PadrΓ΅es β”‚ β”‚ (Python) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ MemΓ³ria Compartilhada (Mem0) β”‚ β”‚ (src/memory/wrapper.py) β”‚ β”‚ Qdrant Vector DB + HuggingFace Embeddings β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ### Arquivos Principais | Arquivo | PropΓ³sito | |---------|-----------| | `src/app.py` | Ponto de entrada Chainlit, gerencia chat | | `src/router.py` | Roteia requisiΓ§Γ΅es para crew apropriada | | `src/config.py` | ConfiguraΓ§Γ£o LLM & MemΓ³ria | | `src/agents/factory.py` | Cria agentes a partir de arquivos de persona | | `src/crews/definitions.py` | Define composiΓ§Γ΅es de crews | | `src/memory/wrapper.py` | IntegraΓ§Γ£o Mem0 com rate limiting | --- ## πŸ€– Adicionando Novos Agentes ### Passo 1: Criar Arquivo de Persona Crie `src/agents/personas/persona-.md`: ```markdown --- description: DescriΓ§Γ£o curta do agente llm_config: provider: default # ou: openai, gemini, ollama --- # πŸ‘€ Persona: Nome do Agente **Papel:** O cargo do agente **Objetivo:** O que o agente busca alcanΓ§ar ## 🧠 HistΓ³ria Personalidade e histΓ³rico detalhados. Isto se torna o prompt de sistema do agente. Escreva na voz do personagem. ## πŸ“‹ Protocolo 1. Primeiro passo de como este agente trabalha 2. Segundo passo... ``` ### Passo 2: Registrar na FΓ‘brica (Opcional) Se o agente precisa de ferramentas especiais, atualize `src/crews/definitions.py`: ```python from src.agents.factory import AgentFactory from src.tools.sua_tool import SuaTool agent = AgentFactory.create_agent( "seu-agente-nome", # corresponde ao nome do arquivo specific_tools=[SuaTool()], model_tier="smart" # ou "fast" ) ``` ### ConvenΓ§Γ£o de Nomenclatura - Nome do arquivo: `persona-.md` - Exemplo: `persona-bob-builder.md` --- ## πŸ‘₯ Adicionando Novas Crews ### Passo 1: Definir Crew em definitions.py Edite `src/crews/definitions.py`: ```python elif crew_name == "Sua Nova Crew": # Criar agentes agent1 = AgentFactory.create_agent("agente-um", model_tier="smart") agent2 = AgentFactory.create_agent("agente-dois", model_tier="fast") # Definir tarefas task1 = Task( description=f"Fazer algo com: '{inputs.get('topic')}'", expected_output="DescriΓ§Γ£o do resultado esperado", agent=agent1 ) task2 = Task( description="Revisar o trabalho anterior", expected_output="AprovaΓ§Γ£o ou feedback", agent=agent2 ) # Retornar crew return Crew( agents=[agent1, agent2], tasks=[task1, task2], process=Process.sequential, verbose=True ) ``` ### Passo 2: Registrar no Roteador Edite o prompt em `src/router.py`: ```python prompt = f""" CREWS DISPONÍVEIS: ... 6. 'Sua Nova Crew': DescriΓ§Γ£o de quando usar esta crew. """ ``` ### Passo 3: Adicionar Γ  Lista de Crews Em `src/crews/definitions.py`: ```python @staticmethod def get_available_crews(): return [ ... "Sua Nova Crew", ] ``` --- ## πŸ”§ Adicionando Novas Ferramentas ### Passo 1: Criar Arquivo de Ferramenta Crie `src/tools/suas_tools.py`: ```python from crewai.tools import BaseTool from pydantic import BaseModel, Field class SuaToolInput(BaseModel): """Schema de entrada - DEVE ter docstring e descriΓ§Γ΅es Field.""" param1: str = Field(..., description="Para que serve este parΓ’metro") param2: int = Field(default=10, description="Opcional com valor padrΓ£o") class SuaTool(BaseTool): name: str = "Nome da Sua Ferramenta" description: str = ( "DescriΓ§Γ£o detalhada do que esta ferramenta faz. " "O agente lΓͺ isto para decidir quando usar." ) args_schema: type = SuaToolInput def _run(self, param1: str, param2: int = 10) -> str: try: # Sua lΓ³gica aqui result = fazer_algo(param1, param2) return f"Sucesso: {result}" except Exception as e: # NUNCA lance exceΓ§Γ£o, sempre retorne string de erro return f"Erro: {str(e)}" ``` ### Diretrizes de Ferramentas 1. **Sempre capture exceΓ§Γ΅es** - Retorne strings de erro, nunca lance 2. **Docstrings descritivas** - Agentes usam estas para entender o uso 3. **Type hints obrigatΓ³rios** - Todos os parΓ’metros precisam de tipos 4. **Retorne strings** - Resultados narrativos, nΓ£o JSON bruto --- ## βš™οΈ ReferΓͺncia de ConfiguraΓ§Γ£o ### VariΓ‘veis .env ```env # Provedor LLM: gemini, openai, anthropic, ollama LLM_PROVIDER=gemini # Nomes de modelos (usados para agentes e memΓ³ria) LLM_MODEL_FAST=gemini-2.5-flash-lite-preview-06-17 LLM_MODEL_SMART=gemini-2.5-flash-lite-preview-06-17 # Chaves de API (apenas a que corresponde ao seu provedor) GEMINI_API_KEY=sua-chave OPENAI_API_KEY=sua-chave ANTHROPIC_API_KEY=sua-chave # ConfiguraΓ§Γ£o de MemΓ³ria MEMORY_PROVIDER=qdrant # qdrant (local) ou mem0 (nuvem) MEMORY_EMBEDDING_PROVIDER=local # local, openai, ou gemini QDRANT_HOST=qdrant # Nome do serviΓ§o Docker QDRANT_PORT=6333 MEMORY_PROJECT_ID=seu_projeto # Namespace para memΓ³rias ``` ### NΓ­veis de Modelo - **smart**: Usado para raciocΓ­nio complexo (estratΓ©gia, arquitetura) - **fast**: Usado para tarefas rΓ‘pidas (classificaΓ§Γ£o, respostas simples) --- ## 🧠 Sistema de MemΓ³ria ### Como Funciona 1. Todos os agentes tΓͺm acesso a `SearchMemoryTool` e `SaveMemoryTool` 2. MemΓ³rias sΓ£o armazenadas no banco de dados vetorial Qdrant 3. Mem0 usa LLM para extrair fatos e embeddings para busca ### Rate Limiting O sistema de memΓ³ria tem proteΓ§Γ£o integrada: - MΓ‘ximo 50 chamadas/minuto - 3 tentativas com backoff exponencial - DegradaΓ§Γ£o graciosa (continua sem memΓ³ria se indisponΓ­vel) ### Escopo de MemΓ³ria Todas as memΓ³rias sΓ£o escopadas para `MEMORY_PROJECT_ID`. Altere isto para isolar diferentes projetos. --- ## πŸ€– Diretrizes para Agentes de IA ### Para Agentes de IA Trabalhando Neste CΓ³digo > **LEIA ANTES DE FAZER ALTERAÇÕES** 1. **Carregue Conhecimento Primeiro** - Leia `src/knowledge/standards/*.md` antes de escrever cΓ³digo - Estes sΓ£o A LEI para estilo de cΓ³digo e padrΓ΅es 2. **Nunca Hardcode** - Use `Config.get_llm_config()` para configuraΓ§Γ΅es LLM - Use `Config.get_mem0_config()` para configuraΓ§Γ΅es de memΓ³ria - Use variΓ‘veis de ambiente para segredos 3. **Tratamento de Erros** - Ferramentas NUNCA devem lanΓ§ar exceΓ§Γ΅es - Sempre retorne strings de erro descritivas - Use rate limiting para APIs externas 4. **Adicionando Agentes** - Crie arquivo de persona primeiro - Teste se o agente carrega: `AgentFactory.create_agent("nome")` - Adicione Γ  crew apenas depois que a persona funcionar 5. **Testando AlteraΓ§Γ΅es** ```bash docker-compose restart app docker logs antigravity_brain --tail 50 ``` 6. **ConvenΓ§Γ£o de Commit** ``` feat: Adicionar nova funcionalidade fix: CorreΓ§Γ£o de bug docs: DocumentaΓ§Γ£o refactor: Limpeza de cΓ³digo ``` --- ## πŸ“ ReferΓͺncia de DiretΓ³rios ``` src/ β”œβ”€β”€ agents/ β”‚ β”œβ”€β”€ factory.py # LΓ³gica de criaΓ§Γ£o de agentes β”‚ └── personas/ # Arquivos de personalidade de agentes β”‚ β”œβ”€β”€ persona-arthur-mendes.md β”‚ β”œβ”€β”€ persona-gus-fring.md β”‚ └── ... (26 agentes) β”œβ”€β”€ crews/ β”‚ └── definitions.py # ComposiΓ§Γ΅es de crews β”œβ”€β”€ knowledge/ β”‚ └── standards/ # Base de conhecimento corporativo β”‚ β”œβ”€β”€ docker_standards.md β”‚ β”œβ”€β”€ python_tool_standards.md β”‚ └── ... (16 padrΓ΅es) β”œβ”€β”€ memory/ β”‚ └── wrapper.py # Mem0 + rate limiting β”œβ”€β”€ tools/ β”‚ β”œβ”€β”€ base.py # Ferramentas de sistema de arquivos β”‚ β”œβ”€β”€ evolution.py # SpawnAgent, LearnPolicy β”‚ └── zabbix.py # Ferramentas de validaΓ§Γ£o Zabbix β”œβ”€β”€ app.py # Entrada Chainlit β”œβ”€β”€ config.py # Hub de configuraΓ§Γ£o └── router.py # Roteamento inteligente ``` --- ## πŸš€ Comandos RΓ‘pidos ```bash # Iniciar aplicaΓ§Γ£o docker-compose up -d # Ver logs docker logs antigravity_brain -f # Reiniciar apΓ³s alteraΓ§Γ΅es docker-compose restart app # Reconstruir container docker-compose build --no-cache app # Acessar dashboard Qdrant open http://localhost:6333/dashboard ``` --- Feito com ❀️ pela ITGuys | Última AtualizaΓ§Γ£o: 2026-01-07