Por que C++ e ChatGPT não é estranho, mas poderoso
\n\nQuando se fala em integração de redes neurais, todo mundo imediatamente pensa em Python. Sim, os pythonistas têm bibliotecas elegantes como openai e requests. Mas o que fazer se o seu projeto é um servidor de alta carga em C++, um aplicativo desktop ou um motor de jogo? Não vai reescrever tudo em Python?
A boa notícia: a integração com a API do ChatGPT em C++ não é mágica, mas sim um problema de engenharia perfeitamente solucionável. Você obtém a velocidade do código nativo, controle sobre a memória e a capacidade de incorporar funções de IA diretamente no núcleo da sua aplicação. Sem camadas intermediárias em Python ou Node.js — apenas C++ puro e trabalho direto com a API.
\n\nNeste artigo, vamos analisar como escrever um cliente para a API da OpenAI em C++ do zero. Você aprenderá como enviar requisições HTTP, processar JSON e obter respostas do ChatGPT. Vamos lá!
\n\nO que precisamos: ferramentas
\n\nPara trabalhar com a API do ChatGPT em C++, precisamos resolver duas tarefas básicas:
\n\n- \n
- Enviar requisições HTTP (de preferência com suporte a HTTPS) \n
- Analisar e gerar JSON \n
Usaremos duas bibliotecas consolidadas:
\n\n- \n
- libcurl — o padrão de facto para HTTP em C/C++. Está disponível em qualquer gerenciador de pacotes. \n
- nlohmann/json — uma biblioteca JSON moderna e conveniente. Basta incluir o arquivo de cabeçalho. \n
Também precisaremos de uma chave de API da OpenAI. Se você ainda não tem uma, acesse platform.openai.com, registre-se e crie uma chave na seção API keys. Mantenha-a segura, de preferência em uma variável de ambiente.
Arquitetura de um cliente simples
\n\nNosso cliente fará uma coisa: enviar a mensagem do usuário para o ChatGPT e obter a resposta. Toda a comunicação com a API ocorre através do endpoint https://api.openai.com/v1/chat/completions pelo método POST.
A estrutura será a seguinte:
\n\n- \n
- Gerar o JSON com os parâmetros da requisição (modelo, mensagens, temperatura) \n
- Enviar a requisição POST via libcurl \n
- Receber a resposta JSON e analisá-la \n
- Extrair o texto da resposta do assistente \n
Parece simples? Vamos escrever o código.
\n\nPasso 1: Preparação da requisição JSON
\n\nVamos começar com uma função que monta o corpo da requisição. Usaremos a biblioteca nlohmann/json. Instalá-la é muito fácil: baixe o arquivo json.hpp do GitHub e coloque na pasta do projeto.
#include <string>\n#include "json.hpp"\n\nusing json = nlohmann::json;\n\nstd::string build_chat_request(const std::string& user_message) {\n json request;\n request["model"] = "gpt-3.5-turbo";\n\n json messages = json::array();\n json user_msg;\n user_msg["role"] = "user";\n user_msg["content"] = user_message;\n messages.push_back(user_msg);\n\n request["messages"] = messages;\n request["temperature"] = 0.7;\n request["max_tokens"] = 1024;\n\n return request.dump();\n}\n\nObserve: estamos usando o modelo gpt-3.5-turbo — este é o equilíbrio ideal entre qualidade e velocidade. Se você precisar de algo mais potente, pode usar gpt-4, mas é mais caro.
Passo 2: Envio da requisição HTTP com libcurl
\n\nAgora a parte interessante — trabalhar com requisições HTTP em C++. A libcurl requer alguma inicialização, mas no geral é bem direta.
\n\nVamos escrever uma função que recebe o corpo da requisição e a chave da API, e retorna a resposta bruta do servidor.
\n\n#include <curl/curl.h>\n#include <string>\n\nsize_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {\n size_t total_size = size * nmemb;\n output->append((char*)contents, total_size);\n return total_size;\n}\n\nstd::string send_chat_request(const std::string& json_body, const