IA para desenvolvedores .NET: integrando sua aplicação com o ChatGPT

O ChatGPT é uma aplicação da tecnologia de inteligência artificial (IA) conhecida como GPT (Generative Pre-trained Transformers ou Transformadores pré-treinados generativos), desenvolvida pela OpenAI. Ele é um modelo de linguagem baseado em aprendizado profundo que pode compreender e gerar texto em resposta a entradas fornecidas pelo usuário. Em essência, o ChatGPT é um chatbot avançado capaz de manter conversas em linguagem natural com os usuários.

Em que tipo de projetos ele pode ser utilizado?

São diversas as possibilidades de integração com o ChatGPT para disponibilizar novas funcionalidades e agregar valor à sua aplicação. Abaixo destacamos apenas algumas delas:

Ferramentas de correção de texto em que o usuário escreve e recebe uma correção de gramática, ortografia, concordância e sugestões de melhorias contextuais. Ele é capaz de examinar não apenas a estrutura da frase, mas também o tom e a coesão do texto, fornecendo insights valiosos para aprimorar a clareza e o impacto da mensagem transmitida.

Criação de descrições detalhadas e dinâmicas com base nas informações fornecidas pelo usuário durante o cadastro. Além disso, essas descrições podem ser atualizadas dinamicamente com base em qualquer alteração nas informações do usuário, garantindo sempre conteúdo relevante e atualizado.

Traduções de textos mais precisas e contextualizadas para sites de cursos de idiomas, por exemplo. A ferramenta  não apenas transmite o significado literal, mas também considera o contexto e a intenção por trás das palavras.

Como funciona a integração com o ChatGPT?

Basicamente, a integração com o ChatGPT se dá por meio da sua API RESTful. Ou seja, enviamos requisições contendo as interações (como perguntas) e recebemos suas respostas. Também é importante saber que as requisições precisam ser autorizadas por meio de uma chave, que pode ser obtida no site da OpenAI.

Portanto, para interagir com o ChatGPT em nossas aplicações, podemos usar qualquer cliente HTTP, mas também existem bibliotecas que encapsulam essa lógica e facilitam nosso trabalho.

Neste tutorial vamos aprender a integrar com o ChatGPT em uma aplicação .NET. Para isso, veremos inicialmente como criar uma conta na OpenAI e gerar uma chave de API para acessar realizar essa integração.

Criando uma Conta na OpenAI

Primeiramente, acesse o site da OpenAI e, no canto superior direito da página inicial, clique em “Log in” para ir para a tela de login e criar uma nova conta.

Preencha o formulário de registro com seu endereço de e-mail, nome de usuário e senha. Você também pode optar por se inscrever com sua conta do Google ou GitHub, se preferir.

Após preencher o formulário, clique em “Sign Up” (Registrar-se) para criar sua conta. Você pode receber um e-mail de confirmação para ativar sua conta. Siga as instruções no e-mail, se necessário.

Depois de ativar sua conta, faça login no site da OpenAI usando suas credenciais recém-criadas e escolha a opção de API.

Gerando uma Chave de API para o ChatGPT 

Após fazer login, vá até o painel de controle da sua conta, navegue até a seção “API Keys” (Chaves de API). Geralmente, esta seção está localizada no menu lateral esquerdo.

Se esta for a primeira vez que você está gerando uma chave de API, você pode ser solicitado a concordar com os termos de serviço da OpenAI. Leia atentamente os termos e, se estiver de acordo, clique para concordar.

Agora, clique no botão “Create API Key” (Criar Chave de API). Você deve fornecer um nome para sua chave de API, o que vai ajudá-lo a identificar sua chave mais tarde.

Após criar sua chave de API, ela será exibida em uma caixa de diálogo. Copie sua chave de API e guarde-a em um local seguro, pois após fechar a caixa não será mais possível vê-la. Esta chave será usada para autenticar suas solicitações à API do ChatGPT.

Criando o projeto .NET

Para a nossa demo vamos utilizar um projeto de uma API construída em ASP.NET. Abaixo vemos a estrutura base da nossa aplicação onde vamos adicionar o nosso código. Note que neste exemplo temos um controller chamado ChatGptController uma action do tipo POST chamada UseChatGpt, recebendo um parâmetro “query”, que será a mensagem que enviaremos ao ChatGPT.

				
					using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using System.Text;

namespace ApiChatGPT.Controllers
{
  [Route("api/[controller]")]
  [ApiController]
  public class ChatGptController : ControllerBase
  {
    [HttpPost]
    public async Task<ActionResult> UseChatGPT(string query)
    {
      try
      {
        //Nosso código
      }
      catch (Exception ex)
      {                
        return StatusCode(500, $"Erro ao usar o ChatGPT: {ex.Message}"); 
      }
    }
  }
}
				
			

Vamos agora implementar a lógica da action UseChatGpt. O primeiro passo será armazenar a nossa chave gerada no site da OpenAI em uma string para que possamos utilizá-la nas nossas requisições. Em projetos reais é indicado guardar a chave em um local seguro.

				
					string openaiApiKey = "sua chave aqui";
				
			

Em seguida, vamos iniciar a construção do corpo da nossa requisição, que será feito com um objeto dinâmico em que adicionaremos os campos necessários.

				
					var requestBody = new
{
	model = "gpt-4o", // Modelo a ser utilizado
	messages = new[]
	{
		new { role = "user", content = query }
	},
	temperature = 0.7
};
				
			

No campo “model” é possível escolher qual modelo nós iremos utilizar. No nosso caso, vamos usar o “gpt-4o”, que é o mais recentemente lançado. A lista de modelos disponíveis pode ser encontrada no site da OpenAI.

No campo “messages” vamos inserir uma lista de objetos contendo as propriedades “role” e “content”. A primeira indica o tipo de mensagem que estamos enviando, neste caso, uma mensagem do usuário. A segunda representa o conteúdo da mensagem, que aqui é o valor recebido no nosso endpoint através do parâmetro “query”.

Por fim, no campo “temperature” vamos definir o grau de aleatoriedade das respostas, que varia de 0 a 1. Quanto maior a temperatura, mais variadas e surpreendentes são as respostas, mas também podem ser menos coerentes. 

Para enviar os dados no corpo da requisição em formato JSON, vamos serializar esse objeto usando o pacote “Newtonsoft”:

				
					var requestBodyJson = Newtonsoft.Json.JsonConvert.SerializeObject(requestBody);
				
			

Agora vamos criar um cliente HTTP para fazer a solicitação à API da OpenAI.

O código abaixo está dividido em três partes. A primeira é a adição da nossa chave de autorização no cabeçalho da requisição. A segunda é o envio da solicitação usando o verbo POST. E a terceira é a validação se a requisição foi bem-sucedida e o retorno para a nossa API.

				
					using (var httpClient = new HttpClient())
{
  // Adiciona a chave de API no cabeçalho de autorização
  httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {openaiApiKey}");

  // Envia a solicitação POST para a API do OpenAI
  var response = await httpClient.PostAsync("https://api.openai.com/v1/chat/completions",
new StringContent(requestBodyJson, Encoding.UTF8, "application/json"));
	
  // Verifica se a solicitação foi bem-sucedida
  if (response.IsSuccessStatusCode)
  {
    //Lê e processa a resposta da API
    string responseBody = await response.Content.ReadAsStringAsync();
    var responseObject = JsonConvert.DeserializeObject<dynamic>(responseBody);

    // Extrai o conteúdo da resposta
    string content = responseObject.choices[0].message.content;
    return Ok(content); // Retorna o conteúdo da resposta como um resultado OK
  }
  else
  {
    return BadRequest(response.StatusCode);
  }
}
				
			

Pronto, agora já podemos executar a nossa API e utilizá-la para conversar com o ChatGPT, como vemos na imagem abaixo:

Utilizando o pacote OpenAIApi

Achou o código anterior complexo? Existe uma alternativa para realizar a conexão com o ChatGPT que abstrai para nós toda a lógica de envio das requisições HTTP. Para isso, vamos instalar o pacote OpenAIApi.

Agora, veja abaixo como fica o código da nossa action UseChatGPT:

				
					[HttpPost]
public async Task<ActionResult> UseChatGPT(string query)
{
    try
    {
        var api = new OpenAIAPI("sua chave aqui ");
	    var result = await api.Chat.CreateChatCompletionAsync(query);
	    return Ok(result);
    }
    catch (Exception ex)
    {
        return StatusCode(500, $"Erro ao usar o ChatGPT: {ex.Message}");
    }
}
				
			

Como vemos acima, é possível criar uma instância da classe OpenAIAPI passando uma chave de API como parâmetro. Após isso, enviamos para a API da OpenAI a nossa “query” com a nossa pesquisa e o retorno será armazenado na variável “result”, sendo retornado pela nossa API em seguida.

Na imagem abaixo vemos um exemplo de uso da nossa API na interface do Swagger:

Como vimos aqui, é bastante simples e prático criar uma conta na OpenAI e ter acesso ao ChatGPT. Sem precisar conhecer a fundo tópicos como aprendizado de máquina e inteligência artificial, conseguimos adicionar capacidades modernas e inovadoras em nossas aplicações, rapidamente.