Pourquoi C++ et ChatGPT, ce n'est pas étrange, mais puissant
\n\nQuand on parle d'intégration de réseaux de neurones, tout le monde pense tout de suite à Python. Oui, les pythonistes ont des bibliothèques élégantes comme openai et requests. Mais que faire si votre projet est un serveur à forte charge en C++, une application de bureau ou un moteur de jeu ? Pas question de tout réécrire en Python, non ?
Bonne nouvelle : l'intégration avec l'API ChatGPT en C++ n'est pas de la magie, mais un problème d'ingénierie tout à fait soluble. Vous obtenez la vitesse du code natif, le contrôle de la mémoire et la possibilité d'intégrer des fonctions d'IA directement dans le cœur de votre application. Pas de couches intermédiaires en Python ou Node.js — seulement du C++ pur et un travail direct avec l'API.
\n\nDans cet article, nous allons voir comment écrire un client pour l'API OpenAI en C++ à partir de zéro. Vous apprendrez à envoyer des requêtes HTTP, à traiter du JSON et à obtenir des réponses de ChatGPT. C'est parti !
\n\nDe quoi avons-nous besoin : l'outillage
\n\nPour travailler avec l'API ChatGPT en C++, nous devons résoudre deux tâches de base :
\n\n- \n
- Envoyer des requêtes HTTP (de préférence avec support HTTPS) \n
- Parser et générer du JSON \n
Nous utiliserons deux bibliothèques éprouvées :
\n\n- \n
- libcurl — le standard de facto pour HTTP en C/C++. Présent dans tous les gestionnaires de paquets. \n
- nlohmann/json — une bibliothèque JSON moderne et pratique. Il suffit d'inclure le fichier d'en-tête. \n
Nous aurons également besoin d'une clé API d'OpenAI. Si vous n'en avez pas encore, allez sur platform.openai.com, inscrivez-vous et créez une clé dans la section API keys. Gardez-la en sécurité, de préférence dans une variable d'environnement.
Architecture d'un client simple
\n\nNotre client fera une seule chose : envoyer le message de l'utilisateur à ChatGPT et recevoir une réponse. Toute la communication avec l'API se fait via le point de terminaison https://api.openai.com/v1/chat/completions par la méthode POST.
La structure sera la suivante :
\n\n- \n
- Générer du JSON avec les paramètres de la requête (modèle, messages, température) \n
- Envoyer une requête POST via libcurl \n
- Recevoir la réponse JSON et la parser \n
- Extraire le texte de la réponse de l'assistant \n
Cela semble simple ? Passons au code.
\n\nÉtape 1 : Préparation de la requête JSON
\n\nCommençons par une fonction qui génère le corps de la requête. Nous utiliserons la bibliothèque nlohmann/json. L'installer est très simple : téléchargez json.hpp depuis GitHub et placez-le dans le dossier de votre projet.
#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\nNotez que nous utilisons le modèle gpt-3.5-turbo — c'est le meilleur équilibre entre qualité et rapidité. Si vous avez besoin de quelque chose de plus puissant, vous pouvez spécifier gpt-4, mais c'est plus cher.
Étape 2 : Envoi de la requête HTTP avec libcurl
\n\nVoici la partie la plus intéressante — le travail avec les requêtes HTTP en C++. libcurl nécessite une certaine initialisation, mais dans l'ensemble, c'est assez simple.
\n\nÉcrivons une fonction qui prend le corps de la requête et la clé API, et retourne la réponse brute du serveur.
\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