rwayz commited on
Commit
fbecdf8
·
verified ·
1 Parent(s): f983b3c

Delete ARCHITECTURE.md

Browse files
Files changed (1) hide show
  1. ARCHITECTURE.md +0 -418
ARCHITECTURE.md DELETED
@@ -1,418 +0,0 @@
1
- # 🏗️ AgentGraph - Arquitetura Técnica Detalhada
2
-
3
- ## 🎯 Visão Geral
4
-
5
- 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.
6
-
7
- ### **Principais Inovações Arquiteturais**
8
- - 🔄 **Fluxo Otimizado**: Detecção → AgentSQL → Refinamento (sem LLM intermediária)
9
- - 🧠 **Multi-Provedor**: Suporte nativo a OpenAI, Anthropic e HuggingFace
10
- - 🛠️ **Tool-Calling**: Ferramentas SQL nativas with verbose ativo
11
- - 🎛️ **Object Manager**: Solução elegante para objetos não-serializáveis
12
- - ⚡ **Async/Await**: Processamento não-bloqueante em toda a stack
13
- - 🔍 **LangSmith Integration**: Observabilidade completa com rastreamento automático
14
-
15
- ## 📁 Estrutura do Projeto
16
-
17
- ```
18
- agentgraph/
19
- ├── app.py # Entry point: Gradio + LangGraph
20
- ├── graphs/
21
- │ └── main_graph.py # StateGraph principal
22
- ├── nodes/ # Nós especializados
23
- │ ├── csv_processing_node.py # Processamento genérico de CSV
24
- │ ├── database_node.py # Operações de banco de dados
25
- │ ├── query_node.py # Processamento de consultas
26
- │ ├── refinement_node.py # Refinamento de respostas
27
- │ ├── cache_node.py # Gerenciamento de cache
28
- │ ├── agent_node.py # Coordenação geral
29
- │ └── custom_nodes.py # Nós especializados
30
- ├── agents/
31
- │ ├── sql_agent.py # Criação do agente SQL
32
- │ └── tools.py # Ferramentas do agente
33
- ├── utils/
34
- │ ├── database.py # Funções de banco de dados
35
- │ ├── config.py # Configurações
36
- │ └── object_manager.py # Gerenciador de objetos não-serializáveis
37
- ├── uploaded_data/ # Arquivos CSV enviados
38
- ├── requirements.txt
39
- ├── README.md
40
- ├── ARCHITECTURE.md
41
- └── .env
42
- ```
43
-
44
- ## 🔄 Fluxo do LangGraph
45
-
46
- ### Fluxo Principal de Consulta
47
-
48
- ```mermaid
49
- graph TD
50
- A[validate_input] --> B[check_cache]
51
- B --> C{Cache Hit?}
52
- C -->|Sim| H[update_history]
53
- C -->|Não| D[prepare_context]
54
- D --> E[get_db_sample]
55
- E --> F[process_query]
56
- F --> G{Modo Avançado?}
57
- G -->|Sim| I[refine_response]
58
- G -->|Não| J[cache_response]
59
- I --> K[format_response]
60
- K --> J
61
- J --> H
62
- H --> L[END]
63
- ```
64
-
65
- ### Nós Especializados
66
-
67
- #### 1. **csv_processing_node.py**
68
- - **Função**: Processamento genérico de CSV
69
- - **Características**:
70
- - Detecção automática de separadores (`;`, `,`, `\t`, `|`)
71
- - Identificação inteligente de tipos de dados
72
- - Conversão robusta para SQL types
73
- - Estatísticas de processamento
74
-
75
- #### 2. **database_node.py**
76
- - **Função**: Operações de banco de dados
77
- - **Características**:
78
- - Criação de banco a partir de DataFrame processado
79
- - Carregamento de banco existente
80
- - Obtenção de amostras de dados
81
- - Validação de integridade
82
-
83
- #### 3. **query_node.py**
84
- - **Função**: Processamento de consultas SQL
85
- - **Características**:
86
- - Validação de entrada
87
- - Preparação de contexto
88
- - Execução via agente SQL
89
- - Tratamento de erros
90
-
91
- #### 4. **refinement_node.py**
92
- - **Função**: Refinamento de respostas
93
- - **Características**:
94
- - Modo avançado com LLM adicional
95
- - Avaliação de qualidade
96
- - Formatação final
97
- - Adição de insights
98
-
99
- #### 5. **cache_node.py**
100
- - **Função**: Gerenciamento de cache e histórico
101
- - **Características**:
102
- - Verificação de cache
103
- - Armazenamento de respostas
104
- - Atualização de histórico
105
- - Estatísticas de uso
106
-
107
- ## 🔍 Integração LangSmith
108
-
109
- ### **Observabilidade Automática**
110
- O AgentGraph inclui integração completa com LangSmith para rastreamento e monitoramento:
111
-
112
- ```python
113
- # Configuração automática via variáveis de ambiente
114
- LANGSMITH_TRACING=true
115
- LANGSMITH_API_KEY=lsv2_pt_...
116
- LANGSMITH_PROJECT=agentgraph-project
117
-
118
- # Rastreamento automático de todo o fluxo LangGraph
119
- workflow.invoke(state) # ← Automaticamente rastreado
120
- ```
121
-
122
- ### **Componentes Rastreados**
123
- - ✅ **Todos os nós LangGraph**: validate_input → process_query → cache_response
124
- - ✅ **Agentes SQL**: Chamadas LLM com inputs/outputs completos
125
- - ✅ **Modelos Multi-Provedor**: OpenAI, Anthropic, HuggingFace
126
- - ✅ **Operações de Dados**: CSV processing, database operations
127
- - ✅ **Geração de Gráficos**: Seleção e criação de visualizações
128
-
129
- ### **Benefícios da Integração**
130
- - 🔍 **Debug Avançado**: Visualize fluxo completo de execução
131
- - 📊 **Métricas de Performance**: Latência por nó e operação
132
- - 💰 **Análise de Custos**: Uso de tokens por modelo
133
- - 🐛 **Troubleshooting**: Identifique gargalos e erros
134
- - 📈 **Dashboards**: Monitoramento em tempo real
135
-
136
- ## 🧠 Gerenciador de Objetos
137
-
138
- ### Problema Resolvido
139
- O LangGraph requer que o estado seja serializável, mas objetos como SQLAgentManager, Engine e CacheManager não são serializáveis.
140
-
141
- ### Solução: ObjectManager
142
- ```python
143
- # Armazena objetos não-serializáveis
144
- agent_id = object_manager.store_sql_agent(sql_agent)
145
- engine_id = object_manager.store_engine(engine)
146
- cache_id = object_manager.store_cache_manager(cache_manager)
147
-
148
- # Estado serializável
149
- state = {
150
- "user_input": "query",
151
- "agent_id": agent_id,
152
- "engine_id": engine_id,
153
- "cache_id": cache_id
154
- }
155
-
156
- # Recupera objetos quando necessário
157
- sql_agent = object_manager.get_sql_agent(agent_id)
158
- ```
159
-
160
- ## 📊 Processamento CSV Genérico
161
-
162
- ### Detecção Automática de Tipos
163
-
164
- ```python
165
- # Detecta automaticamente:
166
- - Datas: Tenta conversão com pd.to_datetime()
167
- - Números inteiros: Verifica padrões numéricos
168
- - Números decimais: Detecta pontos/vírgulas
169
- - Texto: Mantém como string
170
-
171
- # Regras de processamento:
172
- - parse_dates: Para colunas de data
173
- - convert_to_int: Para números inteiros
174
- - convert_to_float: Para números decimais
175
- - convert_text_to_int/float: Para texto numérico
176
- - keep_as_text: Para texto puro
177
- ```
178
-
179
- ### Separadores Suportados
180
- - `;` (ponto e vírgula)
181
- - `,` (vírgula)
182
- - `\t` (tab)
183
- - `|` (pipe)
184
-
185
- ## 🔧 Configurações
186
-
187
- ### Arquivo .env
188
- ```env
189
- # API Keys
190
- HUGGINGFACE_API_KEY=your_key_here
191
- OPENAI_API_KEY=your_key_here
192
- ANTHROPIC_API_KEY=your_key_here
193
-
194
- # LangSmith - Observabilidade (OPCIONAL)
195
- LANGSMITH_API_KEY=lsv2_pt_your_key_here
196
- LANGSMITH_TRACING=true
197
- LANGSMITH_ENDPOINT=https://api.smith.langchain.com
198
- LANGSMITH_PROJECT=agentgraph-project
199
-
200
- # Database Configuration
201
- SQL_DB_PATH=data.db
202
- DEFAULT_CSV_PATH=tabela.csv
203
- UPLOAD_DIR=uploaded_data
204
-
205
- # Model Configuration
206
- DEFAULT_MODEL=GPT-4o-mini
207
- MAX_ITERATIONS=40
208
- TEMPERATURE=0
209
-
210
- # Gradio Configuration
211
- GRADIO_SHARE=False
212
- GRADIO_PORT=7860
213
- ```
214
-
215
- ## 🚀 Funcionalidades
216
-
217
- ### ✅ Mantidas do Código Original
218
- - Múltiplos modelos LLM (LLaMA 70B, 8B, Qwen 32B)
219
- - Upload de CSV personalizado
220
- - Sistema de cache inteligente
221
- - Modo avançado com refinamento
222
- - Histórico de conversas
223
- - Interface Gradio moderna
224
- - Reset do sistema
225
-
226
- ### ✅ Novas Funcionalidades
227
- - Processamento genérico de CSV
228
- - Arquitetura modular de nós
229
- - Gerenciamento de objetos não-serializáveis
230
- - Fluxo condicional otimizado
231
- - Validação automática de sistema
232
- - Detecção automática de portas
233
- - Logs estruturados
234
- - **Integração LangSmith**: Observabilidade completa e automática
235
-
236
- ## 🧪 Testes
237
-
238
- ### Arquivo de Teste
239
- ```bash
240
- python test_new_architecture.py
241
- ```
242
-
243
- Testa individualmente:
244
- - Processamento CSV
245
- - Criação de banco
246
- - Agente SQL
247
- - Gerenciador de objetos
248
- - Amostra de dados
249
-
250
- ## 🔄 Deploy
251
-
252
- ### Local
253
- ```bash
254
- python app.py
255
- ```
256
-
257
- ### HuggingFace Spaces
258
- 1. Configure as variáveis de ambiente
259
- 2. Faça upload dos arquivos
260
- 3. O sistema detectará automaticamente a porta disponível
261
-
262
- ## 📈 Benefícios da Nova Arquitetura
263
-
264
- 1. **Escalabilidade**: Fácil adição de novos nós
265
- 2. **Manutenibilidade**: Código organizado e modular
266
- 3. **Robustez**: Sem problemas de serialização
267
- 4. **Flexibilidade**: Processamento genérico de dados
268
- 5. **Performance**: Fluxo otimizado com cache
269
- 6. **Debugging**: Logs detalhados por nó
270
- 7. **Testabilidade**: Nós independentes testáveis
271
-
272
- ## 🔍 Monitoramento
273
-
274
- ### Logs Estruturados
275
- ```
276
- [VALIDATION] - Validação de entrada
277
- [CACHE] - Operações de cache
278
- [CONTEXT] - Preparação de contexto
279
- [DATABASE] - Operações de banco
280
- [QUERY] - Processamento de consultas
281
- [REFINE] - Refinamento de respostas
282
- [HISTORY] - Atualização de histórico
283
- ```
284
-
285
- ### Estatísticas
286
- - Tempo de execução por nó
287
- - Taxa de acerto do cache
288
- - Estatísticas de processamento CSV
289
- - Validação de componentes
290
-
291
- ## 🚀 Roadmap de Expansão
292
-
293
- ### **🎯 Arquitetura Preparada para Múltiplos Agentes**
294
-
295
- A arquitetura atual está **perfeitamente preparada** para expansão com novos agentes especializados:
296
-
297
- #### **📄 Agente PDF (Curto Prazo)**
298
- ```python
299
- # Implementação planejada:
300
- nodes/pdf_processing_node.py
301
- agents/pdf_agent.py
302
-
303
- # Funcionalidades:
304
- - Extração de texto (PyPDF2, pdfplumber)
305
- - OCR para documentos escaneados (Tesseract)
306
- - Análise de estrutura de documentos
307
- - Busca semântica em conteúdo
308
- - Integração com LangGraph existente
309
- ```
310
-
311
- #### **🗄️ Agente MySQL (Médio Prazo)**
312
- ```python
313
- # Implementação planejada:
314
- nodes/mysql_node.py
315
- agents/mysql_agent.py
316
-
317
- # Funcionalidades:
318
- - Conexões externas MySQL/PostgreSQL
319
- - Pool de conexões otimizado
320
- - Queries complexas com JOINs
321
- - Transações e rollbacks
322
- - Múltiplas bases de dados
323
- ```
324
-
325
- #### **📊 Agente de Gráficos (Médio Prazo)**
326
- ```python
327
- # Implementação planejada:
328
- nodes/chart_generation_node.py
329
- agents/chart_agent.py
330
-
331
- # Funcionalidades:
332
- - Matplotlib, Plotly, Seaborn
333
- - Gráficos baseados em consultas SQL
334
- - Análise automática de dados
335
- - Exporta��ão em múltiplos formatos
336
- - Dashboards interativos
337
- ```
338
-
339
- #### **🤖 Agente de ML/Previsões (Longo Prazo)**
340
- ```python
341
- # Implementação planejada:
342
- nodes/prediction_node.py
343
- agents/ml_agent.py
344
-
345
- # Funcionalidades:
346
- - Modelos de Machine Learning
347
- - Análise de séries temporais
348
- - Previsões automáticas
349
- - Integração com scikit-learn
350
- - AutoML capabilities
351
- ```
352
-
353
- ### **🔄 Sistema de Detecção Expandido**
354
-
355
- ```python
356
- def detect_query_type(user_query: str) -> str:
357
- """Função já preparada para expansão"""
358
-
359
- query_lower = user_query.lower().strip()
360
-
361
- # Detecção atual
362
- if 'sql' in query_lower or 'tabela' in query_lower:
363
- return 'sql_query'
364
-
365
- # Expansões futuras (já estruturadas)
366
- elif 'pdf' in query_lower or 'documento' in query_lower:
367
- return 'pdf_processing'
368
- elif 'mysql' in query_lower or 'banco mysql' in query_lower:
369
- return 'mysql_query'
370
- elif 'gráfico' in query_lower or 'chart' in query_lower:
371
- return 'chart_generation'
372
- elif 'prever' in query_lower or 'previsão' in query_lower:
373
- return 'prediction'
374
-
375
- return 'sql_query' # Default
376
- ```
377
-
378
- ### **🎛️ Roteamento Condicional Preparado**
379
-
380
- ```python
381
- # No main_graph.py - Estrutura já preparada
382
- def route_by_type(state: Dict[str, Any]) -> str:
383
- query_type = state.get("query_type", "sql_query")
384
-
385
- routing_map = {
386
- "sql_query": "sql_processing",
387
- "pdf_processing": "pdf_processing", # FUTURO
388
- "mysql_query": "mysql_processing", # FUTURO
389
- "chart_generation": "chart_generation", # FUTURO
390
- "prediction": "prediction_processing" # FUTURO
391
- }
392
-
393
- return routing_map.get(query_type, "sql_processing")
394
- ```
395
-
396
- ### **📈 Facilidade de Implementação**
397
-
398
- **Por que é fácil expandir:**
399
- - ✅ **Estrutura modular** - Cada agente = novo nó
400
- - ✅ **ObjectManager flexível** - Gerencia qualquer objeto
401
- - ✅ **Sistema de detecção** - Já preparado para novos tipos
402
- - ✅ **Configurações centralizadas** - Fácil adicionar APIs
403
- - ✅ **Interface dinâmica** - Dropdown automático
404
- - ✅ **Async/await** - Performance mantida
405
- - ✅ **Logs estruturados** - Debugging facilitado
406
-
407
- ### **🎯 Próximos Passos Recomendados**
408
-
409
- 1. **Agente PDF** - Implementação mais simples e útil
410
- 2. **Sistema de Templates** - Prompts especializados por agente
411
- 3. **Métricas avançadas** - Performance por tipo de agente
412
- 4. **API REST** - Exposição de funcionalidades
413
- 5. **Agente MySQL** - Conexões externas
414
- 6. **Sistema de Pipelines** - Combinação de agentes
415
-
416
- ---
417
-
418
- **🏆 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.