在C++中接入DeepSeek的API通常涉及HTTP请求和JSON数据处理。以下是分步指南及示例代码:
### 1. 准备工作
- **获取API密钥**:前往DeepSeek平台注册并创建应用,获取API Key。
- **查阅API文档**:确认API端点、请求格式和参数要求(如`https://api.deepseek.com/v1/chat/completions`)。
### 2. 安装依赖库
- **libcurl**:用于HTTP通信(Ubuntu安装:`sudo apt-get install libcurl4-openssl-dev`)
- **JSON库**:推荐使用[nlohmann/json](https://github.com/nlohmann/json)(单头文件库)
### 3. 示例代码实现
```cpp
#include <iostream>
#include <string>
#include <curl/curl.h>
#include <nlohmann/json.hpp>
using json = nlohmann::json;
// 回调函数处理响应数据
static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* s) {
size_t newLength = size * nmemb;
try {
s->append((char*)contents, newLength);
return newLength;
} catch(std::bad_alloc &e) {
return 0;
}
}
int main() {
CURL* curl;
CURLcode res;
std::string readBuffer;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if(curl) {
// 设置API端点
curl_easy_setopt(curl, CURLOPT_URL, "https://api.deepseek.com/v1/chat/completions");
// 设置请求头
struct curl_slist* headers = NULL;
headers = curl_slist_append(headers, "Content-Type: application/json");
headers = curl_slist_append(headers, ("Authorization: Bearer " + std::string("你的API_KEY")).c_str());
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
// 构建请求体
json requestBody = {
{"model", "deepseek-chat"},
{"messages", {
{{"role", "user"}, {"content", "你好,请自我介绍"}}
}},
{"temperature", 0.7}
};
std::string requestStr = requestBody.dump();
// 设置POST参数
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, requestStr.c_str());
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, requestStr.length());
// 设置响应回调
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
// 执行请求
res = curl_easy_perform(curl);
// 处理响应
if(res == CURLE_OK) {
try {
json response = json::parse(readBuffer);
if(response.contains("choices") && !response["choices"].empty()) {
std::cout << "回复:" << response["choices"][0]["message"]["content"] << std::endl;
} else {
std::cerr << "错误响应:" << response.dump(2) << std::endl;
}
} catch(json::parse_error& e) {
std::cerr << "JSON解析失败: " << e.what() << std::endl;
}
} else {
std::cerr << "请求失败: " << curl_easy_strerror(res) << std::endl;
}
// 清理资源
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}
```
### 4. 编译命令
```bash
g++ -o deepseek_demo deepseek_demo.cpp -lcurl
```
### 5. 关键注意事项
1. **安全存储API密钥**:建议使用环境变量或配置文件,不要硬编码
2. **错误处理**:
- 检查HTTP状态码(200表示成功)
- 处理网络异常和JSON解析错误
3. **性能优化**:
- 复用CURL句柄(curl_easy_init)
- 启用连接池(CURLOPT_TCP_KEEPALIVE)
4. **异步处理**:对于高并发需求,考虑使用libcurl的多线程接口或异步IO
### 6. 高级功能实现
如需流式响应处理,可修改回调函数:
```cpp
static size_t StreamCallback(char* ptr, size_t size, size_t nmemb, void* userdata) {
size_t dataSize = size * nmemb;
std::string chunk(ptr, dataSize);
try {
// 处理流式数据(示例:直接输出)
std::cout << chunk << std::flush;
} catch(...) {
return 0;
}
return dataSize;
}
// 设置流式回调
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, StreamCallback);
```
建议参考官方文档获取最新API规范,并根据实际需求调整参数和处理逻辑。