Esta API converte mensagens em linguagem natural de usuários leigos em consultas SQL válidas, utilizando tecnologias modernas como OpenAI GPT-4, Pinecone (vetorização) e Spring Boot. Além disso, ela interpreta os resultados e entrega respostas humanizadas.
sequenceDiagram
participant Usuário
participant Controller
participant EmbeddingService
participant Pinecone (Vetores)
participant GeraSqlService
participant Banco SQL
participant ChatService
Usuário->>Controller: Envia pergunta (ex: "Qual o celular do fornecedor X?")
Controller->>EmbeddingService: Gera embedding da mensagem
EmbeddingService->>Pinecone: Consulta vetorial
Pinecone->>Controller: Retorna schema mais próximo (intenção)
Controller->>GeraSqlService: Gera SQL com base no schema + mensagem
GeraSqlService->>Banco SQL: Executa query
Banco SQL->>Controller: Retorna dados brutos (JSON)
Controller->>ChatService: Gera resposta humanizada
ChatService->>Usuário: Retorna resposta amigável
| Tecnologia | Descrição |
|---|---|
| 🧠 OpenAI GPT-4 (Mini) | Geração de SQL e respostas humanizadas |
| 🔡 text-embedding-3-small | Vetorização semântica das mensagens |
| 🧩 Pinecone | Armazenamento e busca vetorial |
| ☕ Spring Boot | Backend robusto em Java |
| 🗄️ PostgreSQL / MySQL | Banco de dados relacional |
| 🔌 JdbcTemplate | Execução de SQL nativo |
| 🧰 Jackson | Conversão de objetos Java |
Converte qualquer texto em vetores numéricos, utilizados para identificar intenções ou schemas similares no banco vetorial.
Salva schemas ou exemplos de intenção no Pinecone como vetores.
Permite que a API "lembre" como responder perguntas parecidas no futuro.
Consulta o Pinecone usando embeddings da pergunta do usuário e recupera o texto de intenção mais semelhante.
Gera SQLs confiáveis com base no schema + pergunta do usuário, usando GPT-4.
✅ Nunca inventa tabelas ou colunas
Executa o SQL gerado no banco relacional e retorna os dados como JSON.
🧪 Resultado auditável e tratado com try/catch
Converte o JSON retornado em uma resposta natural e objetiva.
🎯 Direto ao ponto
📅 Datas no padrão YYYY-MM-DD
😄 Tom amigável, porém técnico
POST /api/mensagem
Content-Type: application/json
{
"mensagem": "Qual o celular do fornecedor Fornecedor A?"
}{
"resposta": "O celular do fornecedor Fornecedor A é 11 98765-4321."
}🚫 Não inventa colunas ou tabelas: sempre segue apenas o schema.
📊 Foco em intenção: entende o que o usuário quer, não o que ele escreveu.
🗃️ Schema vetorizado: permite evolução dinâmica do banco, sem hardcode.
💬 Resposta natural: evita linguagem técnica e responde como um atendente real.
📅 Datas são normalizadas: sempre no padrão YYYY-MM-DD.
SQL com temperature 0.0: máxima precisão.
Controle de erros no RespostaService.
Prompting controlado para evitar alucinações da IA.
Queries sempre auditáveis via System.out.println.
Adicionar cache para embeddings repetidos.
Suporte a múltiplas bases SQL.
Interface gráfica (ex: Swagger ou front-end em React).
Tradução automática da resposta com base no idioma do usuário.
Autenticação e autorização.