Fala pessoal! Tudo bem com vocês?
Recentemente, tive o prazer de participar de uma live sensacional no canal .NET com o mestre Renato Groff, onde mergulhamos de cabeça no que há de mais moderno em Inteligência Artificial aplicada a Bancos de Dados.
Se você achava que IA era coisa apenas de desenvolvedor front-end ou cientista de dados, prepare-se: o jogo mudou e o SQL Server 2025 está aqui para provar isso.
Neste post, vou resumir os pontos principais que construímos na live, focando na integração nativa do SQL Server com o Azure Open AI e como monitorar tudo isso com OpenTelemetry e Grafana.
Link da Transmissão
O Salto para o SQL Server 2025
A grande estrela da noite foi o anúncio das capacidades do SQL Server 2025 (Public Preview). A Microsoft finalmente trouxe para o “on-premises” (e para o SQL Database) um recurso que antes dependia de gambiarras ou CLR complexos: a execução nativa de chamadas REST.
Através da procedure de sistema sp_invoke_external_rest_endpoint, agora conseguimos nos comunicar com qualquer API, inclusive a do Azure Open AI, sem sair da nossa query.
Arquitetura de Integração: Azure Open AI
Para que essa mágica aconteça, utilizamos o modelo GPT-4o mini. Por que o “mini”? Simples: Custo-Benefício. Ele é absurdamente mais barato que o GPT-4o completo (cerca de 20 a 30 vezes menos) e entrega uma precisão excelente para tarefas de banco de dados, como gerar comandos T-SQL ou resumir logs.
Segurança: Utilizando Database Scoped Credentials para evitar vazamentos de credenciais
Como um profissional Senior, a primeira coisa que penso é: “Vou expor minha API Key em texto limpo?”. Jamais.
A boa prática aqui é utilizar as Database Scoped Credentials: Criamos uma credencial que armazena o token de autorização, assim, o desenvolvedor que chama a procedure não tem acesso à chave da API, apenas ao nome da credencial.
O Script: Transformando o SQL Server em um DBA Virtual
Abaixo, apresento o script completo para configurar essa integração e criar uma procedure que interpreta linguagem natural e executa comandos no seu banco.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
-- Cria a masterkey do banco IF NOT EXISTS(SELECT * FROM sys.symmetric_keys WHERE [name] = '##MS_DatabaseMasterKey##') BEGIN CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'LONg_Pa$$_w0rd!' END GO -- Cria as credenciais IF EXISTS(SELECT * FROM sys.database_scoped_credentials WHERE [name] = 'https://dirceu-openai.openai.azure.com') BEGIN DROP DATABASE SCOPED CREDENTIAL [https://dirceu-openai.openai.azure.com] END; DECLARE @Query VARCHAR(MAX) SET @Query = 'CREATE DATABASE SCOPED CREDENTIAL [https://dirceu-openai.openai.azure.com] WITH IDENTITY = ''HTTPEndpointHeaders'', SECRET = ''{"Authorization": "Bearer ' + CONVERT(VARCHAR(MAX), 'Chave_API_AQUI') + '"}''' EXEC(@Query) CREATE OR ALTER PROCEDURE dbo.stpExecuta_SQL_IA ( @Prompt VARCHAR(MAX), @Fl_Debug BIT = 0 ) AS BEGIN -- Executa a API DECLARE @ret INT, @response NVARCHAR(MAX), @payload VARCHAR(MAX) = '{ "messages": [ { "role": "system", "content": [ { "type": "text", "text": "Essas são as instruções básicas para você: Você é um DBA SQL Server. Tudo que eu te perguntar, você deve responder apenas com comandos T-SQL. NUNCA, JAMAIS, EM NENHUMA HIPÓTESE, VOCÊ DEVERÁ ME RESPONDER COM QUALQUER MENSAGEM OU NENHUM CARACTERE QUE NÃO SEJA PARTE DE UM CÓDIGO T-SQL. Se limite a responder apenas o que eu perguntar, com comandos T-SQL. Se não for possível responder ou for uma pergunta que não faça sentido do ponto de vista de um banco SQL Server, não responda nada, retorne vazio. O que eu quero saber é: ' + @Prompt + '" } ] } ], "temperature": 0.7, "top_p": 0.95, "max_tokens": 8000 }' EXEC @ret = sys.sp_invoke_external_rest_endpoint @method = 'POST', @url = N'https://dirceu-openai.openai.azure.com/openai/deployments/gpt-4o-mini/chat/completions?api-version=2025-01-01-preview', @payload = @payload, @credential = [https://dirceu-openai.openai.azure.com], @response = @response OUTPUT -- PRINT @response DECLARE @retorno VARCHAR(MAX) SET @retorno = JSON_VALUE(@response, '$.result.choices[0].message.content') SET @retorno = REPLACE(REPLACE(@retorno, '```sql', ''), '```', '') PRINT @retorno IF (LEN(TRIM(@retorno)) > 0 AND @Fl_Debug = 0) EXEC(@retorno) END -- EXEC dbo.stpExecuta_SQL_IA 'Quero criar uma tabela chamada Clientes com os campos nome, cpf e idade. Se a tabela já existir, pode excluir.' -- EXEC dbo.stpExecuta_SQL_IA 'Quero criar uma tabela chamada Clientes com os campos nome, cpf e idade. Se a tabela já existir, pode excluir.' -- EXEC dbo.stpExecuta_SQL_IA 'Na minha tabela de Clientes, que tem os campos nome, cpf (char(11)) e idade, insere 50 registros.' -- EXEC dbo.stpExecuta_SQL_IA 'Retorne as colunas nome e idade da minha tabela de clientes' -- EXEC dbo.stpExecuta_SQL_IA 'Retorne os dados da minha tabela de clientes onde a idade seja igual a 36' -- EXEC dbo.stpExecuta_SQL_IA 'Retorne os dados da minha tabela de clientes onde a idade seja igual a 36 ou 38 ou 40' -- EXEC dbo.stpExecuta_SQL_IA 'Retorne os dados da minha tabela de clientes onde a idade seja igual a 36 ou 38 ou 40 e o final do cpf termine com um número par' -- EXEC dbo.stpExecuta_SQL_IA 'Quero criar uma tabela com de clientes com os campos nome, cpf e idade. Se a tabela já existir, pode excluir. Insere 50 registros nessa tabela e retorna os dados', @Fl_Debug = 0 |
Observabilidade e Monitoramento
Não basta integrar, tem que monitorar. Durante a demo, o Renato Groff mostrou como o Semantic Kernel e o OpenTelemetry são vitais.
Quando o SQL Server faz uma chamada para a IA, geramos tokens. Esses tokens custam dinheiro. Ao instrumentar a aplicação com Grafana e Aloy, conseguimos capturar:
- Input Tokens vs. Output Tokens: Quanto estamos gastando por pergunta.
- Wait Types: Monitorar latência de rede na chamada da API (atenção para esperas de rede que podem travar workers do SQL).
- Trace ID: Amarrar a pergunta do usuário no front-end até a query gerada pela IA no banco de dados.
Tabela de Referência: Limites e Tokens
Para ajudar no planejamento de custos, aqui está uma estimativa simplificada do modelo GPT-4o mini:
| Modelo | Custo Entrada (1M tokens) | Custo Saída (1M tokens) | Uso Recomendado |
|---|---|---|---|
| GPT-4o | $5.00 | $15.00 | Lógicas complexas e análise de erros. |
| GPT-4o mini | $0.15 | $0.60 | Consultas SQL simples e resumos. |
Performance e Impacto
Ao utilizar o sp_invoke_external_rest_endpoint, o SQL Server gerencia a conexão HTTP de forma assíncrona internamente, mas a sessão do usuário fica em modo de espera até o retorno da API. Em ambientes de altíssima concorrência, isso pode elevar os contadores de External Wait.
A dica é usar essa funcionalidade para tarefas de Background, BI ou ferramentas administrativas, evitando o fluxo principal de gravação de transações (OLTP).
Espero que tenham gostado dessa dica, um grande abraço e até a próxima!
