# 🏗️ AgentGraph - Arquitetura Técnica Detalhada ## 🎯 Visão Geral O AgentGraph é uma **plataforma multi-agente** construída com LangGraph, implementando uma arquitetura modular e extensível baseada em nós especializados. O sistema suporta múltiplos provedores LLM (OpenAI, Anthropic, HuggingFace) com processamento assíncrono, gerenciamento inteligente de objetos não-serializáveis e sistema robusto de retry para rate limiting. ### **Principais Inovações Arquiteturais** - 🔄 **Fluxo Otimizado**: Detecção → AgentSQL → Refinamento (sem LLM intermediária) - 🧠 **Multi-Provedor**: Suporte nativo a OpenAI, Anthropic e HuggingFace - 🛠️ **Tool-Calling**: Ferramentas SQL nativas with verbose ativo - 🎛️ **Object Manager**: Solução elegante para objetos não-serializáveis - ⚡ **Async/Await**: Processamento não-bloqueante em toda a stack - 🔍 **LangSmith Integration**: Observabilidade completa com rastreamento automático ## 📁 Estrutura do Projeto ``` agentgraph/ ├── app.py # Entry point: Gradio + LangGraph ├── graphs/ │ └── main_graph.py # StateGraph principal ├── nodes/ # Nós especializados │ ├── csv_processing_node.py # Processamento genérico de CSV │ ├── database_node.py # Operações de banco de dados │ ├── query_node.py # Processamento de consultas │ ├── refinement_node.py # Refinamento de respostas │ ├── cache_node.py # Gerenciamento de cache │ ├── agent_node.py # Coordenação geral │ └── custom_nodes.py # Nós especializados ├── agents/ │ ├── sql_agent.py # Criação do agente SQL │ └── tools.py # Ferramentas do agente ├── utils/ │ ├── database.py # Funções de banco de dados │ ├── config.py # Configurações │ └── object_manager.py # Gerenciador de objetos não-serializáveis ├── uploaded_data/ # Arquivos CSV enviados ├── requirements.txt ├── README.md ├── ARCHITECTURE.md └── .env ``` ## 🔄 Fluxo do LangGraph ### Fluxo Principal de Consulta ```mermaid graph TD A[validate_input] --> B[check_cache] B --> C{Cache Hit?} C -->|Sim| H[update_history] C -->|Não| D[prepare_context] D --> E[get_db_sample] E --> F[process_query] F --> G{Modo Avançado?} G -->|Sim| I[refine_response] G -->|Não| J[cache_response] I --> K[format_response] K --> J J --> H H --> L[END] ``` ### Nós Especializados #### 1. **csv_processing_node.py** - **Função**: Processamento genérico de CSV - **Características**: - Detecção automática de separadores (`;`, `,`, `\t`, `|`) - Identificação inteligente de tipos de dados - Conversão robusta para SQL types - Estatísticas de processamento #### 2. **database_node.py** - **Função**: Operações de banco de dados - **Características**: - Criação de banco a partir de DataFrame processado - Carregamento de banco existente - Obtenção de amostras de dados - Validação de integridade #### 3. **query_node.py** - **Função**: Processamento de consultas SQL - **Características**: - Validação de entrada - Preparação de contexto - Execução via agente SQL - Tratamento de erros #### 4. **refinement_node.py** - **Função**: Refinamento de respostas - **Características**: - Modo avançado com LLM adicional - Avaliação de qualidade - Formatação final - Adição de insights #### 5. **cache_node.py** - **Função**: Gerenciamento de cache e histórico - **Características**: - Verificação de cache - Armazenamento de respostas - Atualização de histórico - Estatísticas de uso ## 🔍 Integração LangSmith ### **Observabilidade Automática** O AgentGraph inclui integração completa com LangSmith para rastreamento e monitoramento: ```python # Configuração automática via variáveis de ambiente LANGSMITH_TRACING=true LANGSMITH_API_KEY=lsv2_pt_... LANGSMITH_PROJECT=agentgraph-project # Rastreamento automático de todo o fluxo LangGraph workflow.invoke(state) # ← Automaticamente rastreado ``` ### **Componentes Rastreados** - ✅ **Todos os nós LangGraph**: validate_input → process_query → cache_response - ✅ **Agentes SQL**: Chamadas LLM com inputs/outputs completos - ✅ **Modelos Multi-Provedor**: OpenAI, Anthropic, HuggingFace - ✅ **Operações de Dados**: CSV processing, database operations - ✅ **Geração de Gráficos**: Seleção e criação de visualizações ### **Benefícios da Integração** - 🔍 **Debug Avançado**: Visualize fluxo completo de execução - 📊 **Métricas de Performance**: Latência por nó e operação - 💰 **Análise de Custos**: Uso de tokens por modelo - 🐛 **Troubleshooting**: Identifique gargalos e erros - 📈 **Dashboards**: Monitoramento em tempo real ## 🧠 Gerenciador de Objetos ### Problema Resolvido O LangGraph requer que o estado seja serializável, mas objetos como SQLAgentManager, Engine e CacheManager não são serializáveis. ### Solução: ObjectManager ```python # Armazena objetos não-serializáveis agent_id = object_manager.store_sql_agent(sql_agent) engine_id = object_manager.store_engine(engine) cache_id = object_manager.store_cache_manager(cache_manager) # Estado serializável state = { "user_input": "query", "agent_id": agent_id, "engine_id": engine_id, "cache_id": cache_id } # Recupera objetos quando necessário sql_agent = object_manager.get_sql_agent(agent_id) ``` ## 📊 Processamento CSV Genérico ### Detecção Automática de Tipos ```python # Detecta automaticamente: - Datas: Tenta conversão com pd.to_datetime() - Números inteiros: Verifica padrões numéricos - Números decimais: Detecta pontos/vírgulas - Texto: Mantém como string # Regras de processamento: - parse_dates: Para colunas de data - convert_to_int: Para números inteiros - convert_to_float: Para números decimais - convert_text_to_int/float: Para texto numérico - keep_as_text: Para texto puro ``` ### Separadores Suportados - `;` (ponto e vírgula) - `,` (vírgula) - `\t` (tab) - `|` (pipe) ## 🔧 Configurações ### Arquivo .env ```env # API Keys HUGGINGFACE_API_KEY=your_key_here OPENAI_API_KEY=your_key_here ANTHROPIC_API_KEY=your_key_here # LangSmith - Observabilidade (OPCIONAL) LANGSMITH_API_KEY=lsv2_pt_your_key_here LANGSMITH_TRACING=true LANGSMITH_ENDPOINT=https://api.smith.langchain.com LANGSMITH_PROJECT=agentgraph-project # Database Configuration SQL_DB_PATH=data.db DEFAULT_CSV_PATH=tabela.csv UPLOAD_DIR=uploaded_data # Model Configuration DEFAULT_MODEL=GPT-4o-mini MAX_ITERATIONS=40 TEMPERATURE=0 # Gradio Configuration GRADIO_SHARE=False GRADIO_PORT=7860 ``` ## 🚀 Funcionalidades ### ✅ Mantidas do Código Original - Múltiplos modelos LLM (LLaMA 70B, 8B, Qwen 32B) - Upload de CSV personalizado - Sistema de cache inteligente - Modo avançado com refinamento - Histórico de conversas - Interface Gradio moderna - Reset do sistema ### ✅ Novas Funcionalidades - Processamento genérico de CSV - Arquitetura modular de nós - Gerenciamento de objetos não-serializáveis - Fluxo condicional otimizado - Validação automática de sistema - Detecção automática de portas - Logs estruturados - **Integração LangSmith**: Observabilidade completa e automática ## 🧪 Testes ### Arquivo de Teste ```bash python test_new_architecture.py ``` Testa individualmente: - Processamento CSV - Criação de banco - Agente SQL - Gerenciador de objetos - Amostra de dados ## 🔄 Deploy ### Local ```bash python app.py ``` ### HuggingFace Spaces 1. Configure as variáveis de ambiente 2. Faça upload dos arquivos 3. O sistema detectará automaticamente a porta disponível ## 📈 Benefícios da Nova Arquitetura 1. **Escalabilidade**: Fácil adição de novos nós 2. **Manutenibilidade**: Código organizado e modular 3. **Robustez**: Sem problemas de serialização 4. **Flexibilidade**: Processamento genérico de dados 5. **Performance**: Fluxo otimizado com cache 6. **Debugging**: Logs detalhados por nó 7. **Testabilidade**: Nós independentes testáveis ## 🔍 Monitoramento ### Logs Estruturados ``` [VALIDATION] - Validação de entrada [CACHE] - Operações de cache [CONTEXT] - Preparação de contexto [DATABASE] - Operações de banco [QUERY] - Processamento de consultas [REFINE] - Refinamento de respostas [HISTORY] - Atualização de histórico ``` ### Estatísticas - Tempo de execução por nó - Taxa de acerto do cache - Estatísticas de processamento CSV - Validação de componentes ## 🚀 Roadmap de Expansão ### **🎯 Arquitetura Preparada para Múltiplos Agentes** A arquitetura atual está **perfeitamente preparada** para expansão com novos agentes especializados: #### **📄 Agente PDF (Curto Prazo)** ```python # Implementação planejada: nodes/pdf_processing_node.py agents/pdf_agent.py # Funcionalidades: - Extração de texto (PyPDF2, pdfplumber) - OCR para documentos escaneados (Tesseract) - Análise de estrutura de documentos - Busca semântica em conteúdo - Integração com LangGraph existente ``` #### **🗄️ Agente MySQL (Médio Prazo)** ```python # Implementação planejada: nodes/mysql_node.py agents/mysql_agent.py # Funcionalidades: - Conexões externas MySQL/PostgreSQL - Pool de conexões otimizado - Queries complexas com JOINs - Transações e rollbacks - Múltiplas bases de dados ``` #### **📊 Agente de Gráficos (Médio Prazo)** ```python # Implementação planejada: nodes/chart_generation_node.py agents/chart_agent.py # Funcionalidades: - Matplotlib, Plotly, Seaborn - Gráficos baseados em consultas SQL - Análise automática de dados - Exportação em múltiplos formatos - Dashboards interativos ``` #### **🤖 Agente de ML/Previsões (Longo Prazo)** ```python # Implementação planejada: nodes/prediction_node.py agents/ml_agent.py # Funcionalidades: - Modelos de Machine Learning - Análise de séries temporais - Previsões automáticas - Integração com scikit-learn - AutoML capabilities ``` ### **🔄 Sistema de Detecção Expandido** ```python def detect_query_type(user_query: str) -> str: """Função já preparada para expansão""" query_lower = user_query.lower().strip() # Detecção atual if 'sql' in query_lower or 'tabela' in query_lower: return 'sql_query' # Expansões futuras (já estruturadas) elif 'pdf' in query_lower or 'documento' in query_lower: return 'pdf_processing' elif 'mysql' in query_lower or 'banco mysql' in query_lower: return 'mysql_query' elif 'gráfico' in query_lower or 'chart' in query_lower: return 'chart_generation' elif 'prever' in query_lower or 'previsão' in query_lower: return 'prediction' return 'sql_query' # Default ``` ### **🎛️ Roteamento Condicional Preparado** ```python # No main_graph.py - Estrutura já preparada def route_by_type(state: Dict[str, Any]) -> str: query_type = state.get("query_type", "sql_query") routing_map = { "sql_query": "sql_processing", "pdf_processing": "pdf_processing", # FUTURO "mysql_query": "mysql_processing", # FUTURO "chart_generation": "chart_generation", # FUTURO "prediction": "prediction_processing" # FUTURO } return routing_map.get(query_type, "sql_processing") ``` ### **📈 Facilidade de Implementação** **Por que é fácil expandir:** - ✅ **Estrutura modular** - Cada agente = novo nó - ✅ **ObjectManager flexível** - Gerencia qualquer objeto - ✅ **Sistema de detecção** - Já preparado para novos tipos - ✅ **Configurações centralizadas** - Fácil adicionar APIs - ✅ **Interface dinâmica** - Dropdown automático - ✅ **Async/await** - Performance mantida - ✅ **Logs estruturados** - Debugging facilitado ### **🎯 Próximos Passos Recomendados** 1. **Agente PDF** - Implementação mais simples e útil 2. **Sistema de Templates** - Prompts especializados por agente 3. **Métricas avançadas** - Performance por tipo de agente 4. **API REST** - Exposição de funcionalidades 5. **Agente MySQL** - Conexões externas 6. **Sistema de Pipelines** - Combinação de agentes --- **🏆 Conclusão**: A arquitetura atual é **excepcional** e está perfeitamente preparada para se tornar uma **plataforma completa de agentes especializados**. A expansão será natural e incremental, mantendo a robustez e performance existentes.