在本页

ChatGPT RESTful API 客户端

如何使用 OpenAPI 生成器创建与 OpenAI 模型通信的 RESTful API 客户端的示例。

模式选择器下拉菜单和四个模式卡,分别标有向导、科学家、常规模式和您的选择

本示例使用OpenAIAPI 的最新OpenAPI 规范来创建 RESTful API 客户端代码。由于这只是一个示例,它并没有实现官方 OpenAI 规范中描述的整套模型和操作。特别是,该示例仅限于response_api.yaml 文件中描述的两种操作:

  • listModels - 接收可用模型列表。
  • createResponse - 向所选模型发送用户请求,接收响应消息。

运行示例

要运行来自 Qt Creator,打开Welcome 模式并从Examples 中选择示例。更多信息,请参阅Qt Creator: 教程:构建并运行

注: 该示例需要一个私人 OpenAI 密钥才能与模型交互。使用CHAT_OPENAI_KEY 环境变量指定密钥。如果从 Qt CreatorProjects -> Run Settings -> Environment 下运行示例。

应用程序功能

该示例允许您从可用模型列表中选择一个 OpenAI 模型,然后与之聊天。通信有四种配置模式:

  • 魔法师 - 该设置像一个魔法师,喜欢讨论与魔法有关的话题。
  • 科学家 - 该设置像阿尔伯特-爱因斯坦,喜欢讨论物理问题。
  • 常规模式 - 没有附加功能的标准 ChatGPT 设置。
  • 您的选择 - 您可以为 ChatGPT 行为创建自定义描述。

选择模式后,聊天页面就会出现。

带有文本输入框以及返回和发送按钮的聊天对话

从 OpenAPI 规范生成客户端代码

CMakeLists.txt 文件调用 Qt XML 6 OpenAPI 生成器,通过调用qt_add_openapi_client() 函数从response_api.yaml 规范生成客户端代码。

qt_add_library(openAIResponseApi)
qt_add_openapi_client(openAIResponseApi
    SPEC_FILE
        ${CMAKE_CURRENT_SOURCE_DIR}/response_api.yaml
)

生成的 API 类ResponsesApiModelsApi 可处理所有底层 HTTP 细节:

  • 服务器配置
  • 为所有标准 HTTP 方法构建 HTTP 请求
  • 根据规范序列化输入参数
  • 将服务器响应反序列化为类型化对象
  • 通过 Qt 信号报告成功和错误

现在,您需要做的就是通过调用ResponsesApi 类的createResponse() 操作向模型发送请求,并解析其响应,如下图所示:

m_responseApi->createResponse(response, this, [&](constQRestReply&reply constResponse&summary) {if(!reply.isSuccess()) {        qWarning() << "createResponse:" << reply.errorString() << reply.error();
    }else{// 为了保存与 openAI 模型对话的上下文, 我们需要跟踪上一个模型消息的返回 ResponseId  m_responseId =summary.getIdValue();constQList<OutputMessage>outputMessage=summary.getOutputValue();for(qsizetype msgIndex= 0; msgIndex<outputMessage.size(); msgIndex++) {constQList<OutputTextContent>messages=outputMessage.at(msgIndex).getContentValue();for(qsizetype contentIndex= 0; contentIndex<messages.size(); contentIndex++)emitresponseReady(messages.at(contentIndex).getTextValue(); } });

将生成的 API 暴露于 QML

辅助类OpenAIChatManager 将生成的 API 类ResponsesApiModelsApi 暴露给 QML。它定义在openaichatmanager.h 中。

该辅助类使用QML_ELEMENTQML_SINGLETON宏,并将底层 C++ 实例注册为单例,允许 QML 访问同一对象,而所有权仍在 C++ 中:

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)

createResponse() 操作通过OpenAIChatManager 单例的可调用函数公开:

    Q_INVOKABLE void sendUserRequest();

更多详情,请参阅 Qt QML 有关注册类以提供单例的文档。

使用 QML 的 API

一旦注册,单例在 QML 中全局可用。这允许 QML 组件通过使用单例方法访问ResponsesApiModelsApi ,如下所示:

function editingFinished() {
    var messageObject = {"name": "Me", "message": messageField.text };
    conversationModel.append(messageObject);
    OpenAIChatManager.userRequest = messageField.text;
    OpenAIChatManager.sendUserRequest();
    messageField.text = "";
}

源文件

示例项目 @ code.qt.io

另请参阅 所有 Qt 示例ColorPalette RESTful API 客户端

© 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.