Wie man C++ mit neuronalen Netzen verbindet: Einen Client für die ChatGPT API schreiben

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Warum C++ und ChatGPT nicht seltsam, sondern leistungsstark sind

\n\n

Wenn es um die Integration neuronaler Netze geht, denken alle sofort an Python. Ja, Python-Entwickler haben elegante Bibliotheken wie openai und requests. Aber was tun, wenn Ihr Projekt ein hochbelasteter Server in C++, eine Desktop-Anwendung oder eine Spiel-Engine ist? Soll man das alles in Python umschreiben?

\n\n

Die gute Nachricht: Integration mit der ChatGPT API in C++ ist keine Magie, sondern eine durchaus lösbare Ingenieursaufgabe. Sie erhalten die Geschwindigkeit von nativem Code, die Kontrolle über den Speicher und die Möglichkeit, KI-Funktionen direkt in den Kern Ihrer Anwendung einzubetten. Keine Zwischenschichten in Python oder Node.js – nur reines C++ und direkte Arbeit mit der API.

\n\n

In diesem Artikel werden wir durchgehen, wie man einen Client für die OpenAI API in C++ von Grund auf schreibt. Sie erfahren, wie man HTTP-Anfragen sendet, JSON verarbeitet und Antworten von ChatGPT erhält. Los geht's!

\n\n

Was wir brauchen: Werkzeuge

\n\n

Für die Arbeit mit der ChatGPT API in C++ müssen wir zwei grundlegende Aufgaben lösen:

\n\n
    \n
  • HTTP-Anfragen senden (idealerweise mit HTTPS-Unterstützung)
  • \n
  • JSON parsen und erstellen
  • \n
\n\n

Wir werden zwei bewährte Bibliotheken verwenden:

\n\n
    \n
  • libcurl – der De-facto-Standard für HTTP in C/C++. In jedem Paketmanager vorhanden.
  • \n
  • nlohmann/json – eine moderne, benutzerfreundliche JSON-Bibliothek. Einfach die Header-Datei einbinden.
  • \n
\n\n

Außerdem benötigen wir einen API-Schlüssel von OpenAI. Falls Sie noch keinen haben, gehen Sie auf platform.openai.com, registrieren Sie sich und erstellen Sie einen Schlüssel im Bereich API keys. Bewahren Sie ihn sicher auf, am besten in einer Umgebungsvariable.

\n\n

Architektur eines einfachen Clients

\n\n

Unser Client wird eine Sache tun: die Nachricht des Benutzers an ChatGPT senden und die Antwort erhalten. Die gesamte Kommunikation mit der API erfolgt über den Endpunkt https://api.openai.com/v1/chat/completions per POST-Methode.

\n\n

Die Struktur wird wie folgt sein:

\n\n
    \n
  1. JSON mit den Anfrageparametern erstellen (Modell, Nachrichten, Temperatur)
  2. \n
  3. POST-Anfrage über libcurl senden
  4. \n
  5. JSON-Antwort erhalten und parsen
  6. \n
  7. Antworttext des Assistenten extrahieren
  8. \n
\n\n

Klingt einfach? Lassen Sie uns Code schreiben.

\n\n

Schritt 1: Vorbereitung der JSON-Anfrage

\n\n

Beginnen wir mit einer Funktion, die den Anfragetext erstellt. Wir verwenden die Bibliothek nlohmann/json. Die Installation ist denkbar einfach: Laden Sie json.hpp von GitHub herunter und legen Sie es in den Projektordner.

\n\n
#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\n

Beachten Sie: Wir verwenden das Modell gpt-3.5-turbo – das ist der optimale Kompromiss zwischen Qualität und Geschwindigkeit. Wenn Sie etwas Leistungsstärkeres benötigen, können Sie gpt-4 angeben, aber das ist teurer.

\n\n

Schritt 2: Senden der HTTP-Anfrage mit libcurl

\n\n

Jetzt kommt der spannende Teil – die Arbeit mit C++ HTTP Anfragen. libcurl erfordert etwas Initialisierung, aber insgesamt ist es unkompliziert.

\n\n

Wir schreiben eine Funktion, die den Anfragetext und den API-Schlüssel entgegennimmt und die rohe Antwort vom Server zurückgibt.

\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                

Blogs

Buchempfehlungen