O uso de modelos de linguagem generativos (LLMs) tem crescido em aplicações web modernas, desde geração de texto até automação de tarefas. Neste artigo, vamos criar uma Web API simples em .NET 8 que se conecta a um endpoint de IA (como OpenAI ou Hugging Face) para gerar respostas com base em um prompt.
📦 Tecnologias Utilizadas
- .NET 8 Web API (
Minimal API
ou tradicional) -
HttpClient
para requisição HTTP - Modelo de IA: OpenAI (ChatGPT), Hugging Face ou outro
- JSON (serialização com
System.Text.Json
) - Opcional: Docker, Swagger
🧠 Exemplo de Caso de Uso
Criar uma Web API que recebe um prompt do usuário e retorna a resposta gerada pela IA:
POST /api/genai
{
"prompt": "Explique o que é DDD em 2 parágrafos."
}
Resposta:
{
"resultado": "Domain-Driven Design (DDD) é uma abordagem..."
}
⚙️ Estrutura do Projeto
dotnet new webapi -n GenAI.WebAPI
cd GenAI.WebAPI
Adicione o HttpClient
(opcional, mas geralmente já incluso):
dotnet add package Microsoft.Extensions.Http
📄 Modelo de Requisição e Resposta
Models/GenAIRequest.cs
public class GenAIRequest
{
public string Prompt { get; set; } = string.Empty;
}
Models/GenAIResponse.cs
public class GenAIResponse
{
public string Resultado { get; set; } = string.Empty;
}
🔌 Serviço de Integração com GenIA
Services/IGenAIService.cs
public interface IGenAIService
{
Task<string> ObterRespostaAsync(string prompt);
}
Services/OpenAIService.cs
(exemplo usando OpenAI via REST)
public class OpenAIService : IGenAIService
{
private readonly HttpClient _httpClient;
private readonly IConfiguration _config;
public OpenAIService(HttpClient httpClient, IConfiguration config)
{
_httpClient = httpClient;
_config = config;
}
public async Task<string> ObterRespostaAsync(string prompt)
{
var body = new
{
model = "gpt-3.5-turbo",
messages = new[]
{
new { role = "user", content = prompt }
}
};
var request = new HttpRequestMessage(HttpMethod.Post, "https://api.openai.com/v1/chat/completions")
{
Content = new StringContent(JsonSerializer.Serialize(body), Encoding.UTF8, "application/json")
};
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", _config["OpenAI:ApiKey"]);
var response = await _httpClient.SendAsync(request);
var json = await response.Content.ReadAsStringAsync();
using var doc = JsonDocument.Parse(json);
return doc.RootElement.GetProperty("choices")[0].GetProperty("message").GetProperty("content").GetString() ?? "";
}
}
🧱 Registrando o Serviço no Program.cs
builder.Services.AddHttpClient<IGenAIService, OpenAIService>();
🔀 Controlador de Endpoint
Controllers/GenAIController.cs
[ApiController]
[Route("api/[controller]")]
public class GenAIController : ControllerBase
{
private readonly IGenAIService _genAI;
public GenAIController(IGenAIService genAI)
{
_genAI = genAI;
}
[HttpPost]
public async Task<ActionResult<GenAIResponse>> Post([FromBody] GenAIRequest req)
{
if (string.IsNullOrWhiteSpace(req.Prompt))
return BadRequest("Prompt é obrigatório.");
var resultado = await _genAI.ObterRespostaAsync(req.Prompt);
return Ok(new GenAIResponse { Resultado = resultado });
}
}
🛡️ Configuração do appsettings.json
{
"OpenAI": {
"ApiKey": "SUA_CHAVE_SECRETA"
}
}
✅ Testando com Swagger
Execute o projeto:
dotnet run
Acesse:
https://localhost:5001/swagger
Teste a rota POST /api/genai
com:
{
"prompt": "Resuma os princípios do SOLID."
}
📦 Adicionais e Alternativas
- Para Hugging Face: mude o endpoint e a autenticação (bearer)
- Para Azure OpenAI: use
https://{resource}.openai.azure.com/...
- Para Open Source (como Ollama ou LM Studio): use
localhost:11434/api/generate
- Para streaming: use
HttpCompletionOption.ResponseHeadersRead
🤖 Outras Aplicações Possíveis
- Chatbots corporativos (FAQ interno)
- Geração automática de conteúdo
- Correção ou refatoração de código
- Integração com painéis de BI (via Azure Functions + LLM)
🤝 Conecte-se Comigo
Se você está explorando GenIA com .NET, quero trocar experiências com você:
- 💻 Dev.to
- ✍️ Medium
- 📬 contato@dopme.io