This content originally appeared on DEV Community and was authored by Danilo O. Pinheiro, dopme.io
Explorando como conectar modelos de linguagem (LLMs) a aplicaçÔes .NET modernas que utilizam o Entity Framework para fornecer consultas inteligentes, insights e automação de dados.
Introdução
Com o avanço dos Large Language Models (LLMs), integrar InteligĂȘncia Artificial diretamente Ă s aplicaçÔes .NET deixou de ser uma tendĂȘncia e passou a ser uma necessidade estratĂ©gica.
Enquanto o Entity Framework (EF Core) Ă© o principal ORM para persistĂȘncia e manipulação de dados em .NET, o LLM pode atuar como um âcĂ©rebro analĂticoâ, capaz de interpretar consultas em linguagem natural, gerar queries otimizadas, validar dados ou sugerir insights baseados em padrĂ”es histĂłricos.
O objetivo deste artigo é demonstrar como criar uma comunicação eficiente entre o Entity Framework e um modelo LLM, de forma arquiteturalmente limpa e escalåvel.
Arquitetura da Integração
A comunicação entre o EF Core e o LLM ocorre por meio de uma camada intermediåria de orquestração inteligente, responsåvel por interpretar as intençÔes do usuårio, transformar em consultas EF e retornar resultados significativos.
Camadas principais
Camada de DomĂnio (.NET + EF Core)
ResponsĂĄvel pelas entidades, contexto e operaçÔes CRUD.Camada de InteligĂȘncia (LLM Kernel)
Interpreta o input humano e gera instruçÔes ou consultas.Camada de Aplicação (API ou Worker)
Faz a ponte entre o cliente e o motor de IA, coordenando requisiçÔes e respostas.
Fluxo Simplificado:
[UsuĂĄrio] â [API .NET] â [Kernel LLM] â [Entity Framework Context] â [Banco de Dados]
Exemplo PrĂĄtico â LLM interpretando comandos para EF Core
CenĂĄrio
Imagine uma API de relatĂłrios financeiros. O usuĂĄrio digita:
âListe os clientes com faturamento acima de 10 mil nos Ășltimos 3 meses.â
O LLM interpreta essa intenção e gera dinamicamente uma expressão LINQ para ser executada pelo EF Core.
Modelagem base
public class Cliente
{
public int Id { get; set; }
public string Nome { get; set; }
public decimal FaturamentoMensal { get; set; }
public DateTime DataCadastro { get; set; }
}
public class AppDbContext : DbContext
{
public DbSet<Cliente> Clientes { get; set; }
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
}
Kernel LLM (OpenAI / Ollama / Azure)
public interface ILlmKernel
{
Task<string> InterpretarAsync(string comando);
}
public class OpenAiKernel : ILlmKernel
{
private readonly HttpClient _client;
private readonly string _apiKey;
public OpenAiKernel(HttpClient client, IConfiguration config)
{
_client = client;
_apiKey = config["OpenAI:ApiKey"];
}
public async Task<string> InterpretarAsync(string comando)
{
var request = new
{
model = "gpt-4o-mini",
messages = new[]
{
new { role = "system", content = "VocĂȘ Ă© um tradutor de linguagem natural para queries LINQ em C#." },
new { role = "user", content = comando }
}
};
var response = await _client.PostAsJsonAsync("https://api.openai.com/v1/chat/completions", request);
var result = await response.Content.ReadFromJsonAsync<JsonElement>();
return result.GetProperty("choices")[0].GetProperty("message").GetProperty("content").GetString();
}
}
Serviço de Integração EF + LLM
public class InteligenciaRelatoriosService
{
private readonly ILlmKernel _llmKernel;
private readonly AppDbContext _dbContext;
public InteligenciaRelatoriosService(ILlmKernel llmKernel, AppDbContext dbContext)
{
_llmKernel = llmKernel;
_dbContext = dbContext;
}
public async Task<object> ExecutarConsultaInteligenteAsync(string comando)
{
var queryLinq = await _llmKernel.InterpretarAsync(comando);
// ⚠ Em produção, use Parser/Whitelist para segurança contra injeção.
var clientes = _dbContext.Clientes
.Where(c => c.FaturamentoMensal > 10000)
.ToList();
return new
{
QueryGerada = queryLinq,
Resultado = clientes
};
}
}
Controller para uso prĂĄtico
[ApiController]
[Route("api/inteligencia")]
public class InteligenciaController : ControllerBase
{
private readonly InteligenciaRelatoriosService _service;
public InteligenciaController(InteligenciaRelatoriosService service)
{
_service = service;
}
[HttpPost("consultar")]
public async Task<IActionResult> Consultar([FromBody] string comando)
{
var resultado = await _service.ExecutarConsultaInteligenteAsync(comando);
return Ok(resultado);
}
}
Casos de Uso
Consultas inteligentes: gerar relatĂłrios dinĂąmicos com base em linguagem natural.
AnĂĄlise preditiva: o LLM pode sugerir tendĂȘncias e correlaçÔes.
Validação de dados: o modelo pode revisar regras de consistĂȘncia antes da persistĂȘncia.
AutomaçÔes administrativas: geração automåtica de filtros, joins ou agrupamentos.
Boas PrĂĄticas Arquiteturais
-
Segurança: evite executar código gerado diretamente pelo LLM. Valide o output antes.
-
Camadas isoladas: mantenha o Kernel LLM desacoplado do contexto EF.
-
Observabilidade: monitore a latĂȘncia entre as chamadas EF e LLM (Datadog, Application Insights).
-
Reutilização: trate prompts como componentes versionados dentro da aplicação.
ExpansĂŁo â Kernel SemĂąntico (Microsoft Semantic Kernel)
Para quem deseja uma solução mais robusta, a Microsoft fornece o Semantic Kernel, um SDK para orquestrar interaçÔes entre LLMs e dados empresariais.
Ele pode ser integrado ao EF Core com connectors e planners, permitindo interaçÔes contextuais e persistentes entre banco e modelo de linguagem.
Tecnologias Envolvidas
Componente | Descrição |
---|---|
.NET 8+ | Base da aplicação e API |
Entity Framework Core | ORM para persistĂȘncia |
LLM (OpenAI / Ollama / Azure OpenAI) | InteligĂȘncia de linguagem |
Semantic Kernel (Opcional) | Framework de integração IA |
Datadog / AppInsights | Monitoramento e métricas |
ConclusĂŁo
Integrar Entity Framework com LLMs abre caminho para uma nova geração de aplicaçÔes .NET â capazes de compreender, interpretar e agir sobre os dados de forma inteligente.
Essa fusĂŁo entre persistĂȘncia e IA representa o futuro do desenvolvimento empresarial, unindo automação, inteligĂȘncia contextual e arquitetura limpa.
Conecte-se Comigo
Se vocĂȘ trabalha com .NET moderno e quer dominar arquitetura, C#, observabilidade, DevOps ou interoperabilidade, vamos conversar:
LinkedIn
Medium
dopme.io
devsfree
➠Porque tu livraste a minha alma da morte, os meus olhos das lågrimas, e os meus pés da queda. Salmos 116:8
This content originally appeared on DEV Community and was authored by Danilo O. Pinheiro, dopme.io