为什么C++和ChatGPT不是奇怪组合,而是强大力量
\n\n当谈到神经网络集成时,不知为何大家总是首先想到Python。是的,Python开发者拥有像openai和requests这样优雅的库。但如果您的项目是一个高负载的C++服务器、桌面应用程序或游戏引擎,该怎么办?难道要全部用Python重写吗?
好消息是:在C++中集成ChatGPT API并非魔法,而是一个完全可以解决的工程问题。您将获得原生代码的速度、对内存的控制,以及将AI功能直接嵌入应用程序核心的能力。无需Python或Node.js中间层——只有纯C++和与API的直接交互。
\n\n在本文中,我们将从头开始讲解如何编写一个用于OpenAI API的C++客户端。您将学习如何发送HTTP请求、处理JSON以及从ChatGPT获取响应。让我们开始吧!
\n\n我们需要什么:工具集
\n\n为了在C++中使用ChatGPT API,我们需要解决两个基本任务:
\n\n- \n
- 发送HTTP请求(最好支持HTTPS) \n
- 解析和生成JSON \n
我们将使用两个经过验证的库:
\n\n- \n
- libcurl — C/C++中HTTP的事实标准。在任何包管理器中都能找到。 \n
- nlohmann/json — 一个现代、便捷的JSON库。只需包含头文件即可。 \n
我们还需要一个来自OpenAI的API密钥。如果您还没有,请访问platform.openai.com,注册并在API keys部分创建一个密钥。请安全保管,最好存储在环境变量中。
简单客户端的架构
\n\n我们的客户端将做一件事:将用户的消息发送给ChatGPT并获取回复。所有与API的通信都通过POST方法访问端点https://api.openai.com/v1/chat/completions。
结构如下:
\n\n- \n
- 构建包含请求参数(模型、消息、温度)的JSON \n
- 通过libcurl发送POST请求 \n
- 获取JSON响应并解析 \n
- 提取助手的回复文本 \n
听起来很简单?让我们开始编写代码。
\n\n步骤1:准备JSON请求
\n\n我们从构建请求体的函数开始。我们将使用nlohmann/json库。安装非常简单:从GitHub下载json.hpp并将其放在项目文件夹中。
#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请注意:我们使用了gpt-3.5-turbo模型——这是质量和速度之间的最佳平衡。如果您需要更强大的模型,可以使用gpt-4,但成本更高。
步骤2:使用libcurl发送HTTP请求
\n\n现在是最有趣的部分——C++ HTTP请求的处理。libcurl需要一些初始化,但总体来说非常直接。
\n\n让我们编写一个函数,它接受请求体和API密钥,并返回服务器的原始响应。
\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