ChatGPT RESTful-API-Client
Beispiel für die Verwendung des OpenAPI-Generators zur Erstellung eines RESTful-API-Clients für die Kommunikation mit OpenAI-Modellen.

Dieses Beispiel verwendet die neueste OpenAPI-Spezifikation für die OpenAI-API, um Code für einen RESTful-API-Client zu erstellen. Da es sich hierbei lediglich um ein Beispiel handelt, werden nicht alle in der offiziellen OpenAI-Spezifikation beschriebenen Modelle und Operationen implementiert. Insbesondere beschränkt sich das Beispiel auf zwei Operationen, die in der Datei „ response_api.yaml “ beschrieben sind:
- listModels – ruft die Liste der verfügbaren Modelle ab.
- createResponse – sendet eine Benutzeranfrage an das ausgewählte Modell und empfängt eine Antwortnachricht.
Ausführen des Beispiels
Sie können das Beispiel ausführen unter:
- Qt Creator
Öffnen Sie den Modus „ Welcome “ und wählen Sie das Beispiel unter „ Examples “ aus. Weitere Informationen finden Sie unter Qt Creator: Tutorial: Erstellen und Ausführen.
- Qt Extension for Visual Studio Code
Führen Sie den Befehl „ Qt: Open Qt examples “ aus dem Verzeichnis „ Command Palette “ aus und wählen Sie das Beispiel aus der Liste aus. Weitere Informationen finden Sie unter Qt Extension for Visual Studio Code: Tutorial: Erstellen und Ausführen.
Hinweis: Das Beispiel benötigt einen privaten OpenAI-Schlüssel, um mit den Modellen zu interagieren. Verwenden Sie die Umgebungsvariable „ CHAT_OPENAI_KEY “, um den Schlüssel anzugeben. Wenn Sie das Beispiel aus Qt Creatorausführen, ist dies unter ` Projects -> Run Settings -> Environment` möglich.
Funktionalität der Anwendung
Das Beispiel ermöglicht es Ihnen, ein OpenAI-Modell aus der Liste der verfügbaren Modelle auszuwählen und anschließend mit ihm zu chatten. Die Kommunikation erfolgt in vier Konfigurationsmodi:
- Assistent – Das System verhält sich wie ein Assistent und spricht bevorzugt über Themen rund um Magie.
- Wissenschaftler – Die Konfiguration verhält sich wie Albert Einstein und diskutiert gerne über Physik.
- Normaler Modus – Standardmäßige ChatGPT-Einrichtung ohne zusätzliche Funktionen.
- „Ihre Wahl“ – Sie können eine benutzerdefinierte Beschreibung für das Verhalten von ChatGPT erstellen.
Sobald ein Modus ausgewählt wurde, wird die Chat-Seite angezeigt.

Generieren von Client-Code aus einer OpenAPI-Spezifikation
Der Qt 6 OpenAPI-Generator wird über die Datei „ CMakeLists.txt “ aufgerufen, um Client-Code aus der Spezifikation „ response_api.yaml “ zu generieren, indem die Funktion „ qt_add_openapi_client() “ aufgerufen wird.
qt_add_library(openAIResponseApi)
qt_add_openapi_client(openAIResponseApi
SPEC_FILE
${CMAKE_CURRENT_SOURCE_DIR}/response_api.yaml
)Die generierten API-Klassen ResponsesApi und ModelsApi übernehmen alle HTTP-Details auf niedriger Ebene:
- Serverkonfiguration
- Erstellung von HTTP-Anfragen für alle Standard-HTTP-Methoden
- Serialisierung der Eingabeparameter gemäß der Spezifikation
- Deserialisierung von Serverantworten in typisierte Objekte
- Erfolgs- und Fehlermeldung über Qt-Signale
Nun müssen Sie lediglich eine Anfrage an das Modell senden, indem Sie die Operation „ createResponse() “ der Klasse „ ResponsesApi “ aufrufen und deren Antwort auswerten, wie unten gezeigt:
m_responseApi->createResponse(response, this, [&](const QRestReply&reply,
const Response &summary) {
if (!reply.isSuccess()) {
qWarning() << "createResponse:" << reply.errorString() << reply.error();
} else {
// Um den Kontext der Unterhaltung mit dem OpenAI-Modell zu speichern,
// müssen wir die zurückgegebene ResponseId der letzten Nachricht des Modells erfassen.
// Der Kontext verliert nach dem Wechsel zu einem anderen Modell seine Relevanz. Wenn das Modell
// die Kontext-ID nicht kennt, antwortet es so, als wäre die `ResponseId` leer.
m_responseId = summary.getId();
const QList<OutputMessage> outputMessage = summary.getOutput();
for (qsizetype msgIndex = 0; msgIndex < outputMessage.size(); msgIndex++) {
const QList<OutputTextContent> messages
= outputMessage.at(msgIndex).getContent();
for (qsizetype contentIndex = 0; contentIndex < messages.size(); contentIndex++)
emit responseReady(messages.at(contentIndex).getText());
}
}
});Bereitstellung generierter APIs für QML
Die Hilfsklasse „ OpenAIChatManager “ stellt die generierten API-Klassen „ ResponsesApi “ und „ ModelsApi “ für QML bereit. Sie ist in „ openaichatmanager.h “ definiert.
Die Hilfsklasse verwendet die Makros „ QML_ELEMENT “ und „QML_SINGLETON“ und registriert die zugrunde liegende C++-Instanz als Singleton, wodurch QML auf dasselbe Objekt zugreifen kann, während die Eigentumsrechte bei C++ verbleiben:
class OpenAIChatManager : public QObject
{
Q_OBJECT
QML_ELEMENT
QML_SINGLETON
Q_PROPERTY(QString modelName READ modelName WRITE setModelName NOTIFY modelNameChanged FINAL)
Q_PROPERTY(QString userRequest READ userRequest
WRITE setUserRequest NOTIFY userRequestChanged FINAL)
Q_PROPERTY(QStringList modelList READ modelList
WRITE setModelList NOTIFY modelListChanged FINAL)
Q_PROPERTY(CharacterMode characterId READ characterId
WRITE setCharacterId NOTIFY characterIdChanged FINAL)
Q_PROPERTY(QString customUserCharacter READ customUserCharacter
WRITE setCustomUserCharacter NOTIFY customUserCharacterChanged FINAL)Die Operation „ createResponse() “ wird über die aufrufbare Funktion des Singletons „ OpenAIChatManager “ bereitgestellt:
Q_INVOKABLE void sendUserRequest();Weitere Informationen finden Sie in der Qt Qml-Dokumentation zur Registrierung einer Klasse zur Bereitstellung von Singletons.
Verwendung der APIs aus QML
Nach der Registrierung ist das Singleton in QML global verfügbar. Dadurch können QML-Komponenten über die Singleton-Methoden auf ResponsesApi und ModelsApi zugreifen, wie im folgenden Beispiel gezeigt:
function editingFinished() {
var messageObject = {"name": "Me", "message": messageField.text };
conversationModel.append(messageObject);
OpenAIChatManager.userRequest = messageField.text;
OpenAIChatManager.sendUserRequest();
messageField.text = "";
}Quelldateien
Siehe auch Alle Qt-Beispiele und ColorPalette-RESTful-API-Client.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.