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.
-- 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!
Comentários (0)
Carregando comentários…