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 类ResponsesApi 和ModelsApi 可处理所有底层 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 类ResponsesApi 和ModelsApi 暴露给 QML。它定义在openaichatmanager.h 中。
该辅助类使用QML_ELEMENT 和QML_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 组件通过使用单例方法访问ResponsesApi 和ModelsApi ,如下所示:
function editingFinished() { var messageObject = {"name": "Me", "message": messageField.text }; conversationModel.append(messageObject); OpenAIChatManager.userRequest = messageField.text; OpenAIChatManager.sendUserRequest(); messageField.text = ""; }
源文件
© 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.