Auf dieser Seite

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.

Dropdown-Menü zur Modellauswahl und vier Moduskarten mit den Bezeichnungen „Assistent“, „Wissenschaftler“, „Normalmodus“ und „Nach Wahl“

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:

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.

Chat-Dialog mit Texteingabefeld sowie „Zurück“- und „Senden“-Schaltflächen

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

Beispielprojekt @ code.qt.io

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.