80 lines
2.6 KiB
Markdown
80 lines
2.6 KiB
Markdown
# SQL Optimizer Team (Agno)
|
|
|
|
POC de um time de agentes usando o framework **Agno** para reproduzir o fluxo do projeto oracle-sql-query-optimizer.
|
|
|
|
## Objetivo
|
|
|
|
- Receber uma SQL e o banco alvo (oracle/sqlserver/postgresql/mysql/sqlite).
|
|
- Gerar explicação detalhada (SQL → linguagem natural).
|
|
- Gerar SQL otimizada (linguagem natural → SQL), preservando 100% da lógica de negócio.
|
|
- (Opcional) Gerar análise conservadora (sem reescrever a query).
|
|
|
|
As **prompts** são mantidas idênticas às do projeto oracle-sql-query-optimizer.
|
|
|
|
## Estrutura
|
|
|
|
```text
|
|
src/
|
|
sql_optimizer_team/
|
|
team_app.py
|
|
agents/
|
|
tools/
|
|
```
|
|
|
|
## Configuração rápida
|
|
|
|
1) Crie o ambiente e instale dependências:
|
|
- `pip install -r requirements.txt`
|
|
2) Configure variáveis de ambiente (exemplo em `sample.env` ou `.env`).
|
|
3) Execute o servidor (UI + backend):
|
|
- `./scripts/start.sh`
|
|
|
|
Acesse:
|
|
|
|
- `http://localhost:7777/docs` (Swagger UI)
|
|
- `http://localhost:7777` (informações básicas da API)
|
|
|
|
## UI local (Agent UI)
|
|
|
|
Use o **Agent UI** (agno-agi/agent-ui) como front local.
|
|
|
|
- O `./scripts/start.sh` já faz tudo automaticamente: clona o Agent UI em `../agent-ui`, instala dependências e inicia a UI.
|
|
- Abra `http://localhost:3000` (o endpoint padrão já é `http://localhost:7777`).
|
|
- Para trocar a porta do backend, use `SQL_OPT_TEAM_PORT` e ajuste o endpoint na UI.
|
|
|
|
Manual (se quiser rodar a UI separadamente):
|
|
|
|
1) `npx create-agent-ui@latest`
|
|
2) `pnpm dev`
|
|
|
|
Opcional: se o AgentOS usar autenticação, configure `NEXT_PUBLIC_OS_SECURITY_KEY` na UI (conforme README do Agent UI).
|
|
|
|
## Fluxo do time
|
|
|
|
1) **Gestor** recebe a requisição e valida o contexto (banco + SQL).
|
|
2) **SQL Analyst** gera a explicação detalhada usando a prompt original.
|
|
3) **SQL Optimizer** gera a query otimizada preservando toda a lógica.
|
|
4) **SQL Quality Reviewer** valida fidelidade e checklist.
|
|
5) **Conservative Analyst** (se solicitado) gera análise sem reescrever a query.
|
|
6) **Gestor** consolida e entrega.
|
|
|
|
## RAG (KB interna)
|
|
|
|
- Coloque documentos em `kb/` (md/txt/sql/pdf).
|
|
- O RAG local usa Chroma + SentenceTransformers.
|
|
- Variáveis principais:
|
|
- `SQL_OPT_KB_PATH`, `SQL_OPT_KB_CHROMA_PATH`, `SQL_OPT_KB_DB_FILE`
|
|
- `SQL_OPT_KB_EMBEDDER_ID`
|
|
- `SQL_OPT_BLOCK_EXTERNAL_TOOLS=true` bloqueia ferramentas externas.
|
|
|
|
## Observabilidade de tokens/custos
|
|
|
|
- Ative com `LLM_LOG_USAGE=true`.
|
|
- Defina preços (USD por 1K tokens) com:
|
|
- `LLM_COST_INPUT_PER_1K`
|
|
- `LLM_COST_OUTPUT_PER_1K`
|
|
|
|
## Observações
|
|
|
|
- Use o provedor configurado em `.env` (ex.: OpenAI, Gemini, Groq, Mistral ou Ollama local).
|
|
- O time é colaborativo e mantém histórico em SQLite (configurável via env).
|