2026年用C++调用DeepSeek API?保姆级教程来了(附完整代码)

用C++调用DeepSeek API?保姆级教程来了(附完整代码)在 AI 大模型 API 调用的主流示例中 curl Python Node js 是最常见的三种方式 但对于习惯用 C 开发的同学来说 如何快速对接大模型 API 呢 今天就以 DeepSeek API 为例 完整走一遍 C 调用大模型的全过程 从核心接口认知 到依赖环境搭建 再到完整代码实现与运行 无论用哪种语言调用 DeepSeek API 首先要确认 3 个关键信息 这是对接成功的基础 api key

大家好,我是讯享网,很高兴认识大家。这里提供最前沿的Ai技术和互联网信息。



在AI大模型API调用的主流示例中,curl、Python、Node.js是最常见的三种方式。但对于习惯用C++开发的同学来说,如何快速对接大模型API呢?

今天就以DeepSeek API为例,完整走一遍C++调用大模型的全过程——从核心接口认知,到依赖环境搭建,再到完整代码实现与运行!

无论用哪种语言调用DeepSeek API,首先要确认3个关键信息,这是对接成功的基础:

  • api_key:需到DeepSeek官网注册账号后获取,是身份认证的核心凭证;


  • base_url:访问大模型的基础URL地址,DeepSeek默认是 https://api.deepseek.com


  • model:要调用的模型类型,比如对话模型 deepseek-chat


先放一张DeepSeek官网文档的示例截图,大家可以清晰看到官方支持的三种调用方式:

DeepSeek API兼容OpenAI协议,所以先搞懂OpenAI接口的核心设计,后续C++实现会更顺畅。OpenAI API基于HTTP/HTTPS协议,核心逻辑可总结为“身份认证+接口参数”两部分。

所有请求必须携带api_key验证身份,两种传递方式对比:

  • 推荐方式:通过HTTP请求头传递,格式为 Authorization: Bearer <你的api key="">,安全性更高;


  • 备选方式:在请求参数中直接传递api_key,不推荐!容易导致密钥泄露。


日常开发中最常用的是对话接口、嵌入接口和函数调用接口,下面逐一说明关键参数(必选参数标红):

用于和大模型进行多轮对话,核心是构造符合格式的JSON请求参数,具体说明如下:

参数名 参数类型 是否必选 简介
model string 模型名称,如 deepseek-chat
messages list[dict] 对话历史,每个dict包含 role(角色)和 content(内容)
role string 可选值:system(系统指令)、user(用户)、assistant(助手)、function(函数)
temperature float 随机性,0~2,0最确定,2最随机(默认1)
max_tokens int 生成的最大tokens数(模型总tokens有限,如GPT-3.5上限4096)
top_p float 核采样,0~1,替代temperature的随机性控制(二选一即可)
stream bool 是否流式返回(实时输出,而非一次性返回)
tools list[dict] 函数调用配置,定义模型可调用的工具/函数
response_format dict 指定响应格式,如 {“type”: “json_object”}(强制JSON输出)
响应方式由 stream 参数决定:
  • 非流式响应:返回完整JSON,包含核心对话内容;


  • 流式响应:返回SSE(Server-Sent Events)流,逐段输出(适合实时对话场景)。


用于将文本转换为向量(Embedding),适用于文本检索、相似度计算等场景,核心参数如下:

参数名 参数类型 是否必选 简介
model string 模型名称,如 deepseek-embed
input string/list 待嵌入的文本(单文本或文本列表)
encodingformat string 输出格式:float(默认)、base64
data-pid=“RZZye3P”>属于对话接口的扩展,通过 tools 参数定义函数,让模型自主判断是否需要调用工具(比如查天气、调用数据库)。举个获取城市天气的示例:

model=“gpt-3.5-turbo”, messages=[{“role”: “user”, “content”: “北京今天气温多少?”}], tools=[ // 定义可调用的函数 
{ "type": "function", "function": { "name": "get_weather", "description": "获取指定城市的实时气温", "parameters": { "type": "object", "properties": { "city": {"type": "string", "description": "城市名"} }, "required": ["city"] } } } 

], tool_choice=“auto” // 让模型自动决定是否调用函数 }

接下来进入核心环节,用C++实现DeepSeek API的调用。我们需要两个核心依赖:处理HTTP请求的 libcurl 和处理JSON的 nlohmann-json。

直接执行以下两条命令即可完成安装:

sudo apt install nlohmann-json3-dev # 安装JSON处理库 sudo apt install libcurl4-openssl-dev # 安装HTTP请求库 

下面是完整的C++代码,实现了“持续对话”功能,包含类封装、请求构造、响应解析等逻辑,关键步骤已加注释:

#include 
   
     
     
       #include 
      
        #include 
       
         #include 
        
          #include 
          
          

using json = nlohmann::json;

// 回调函数:接收HTTP响应数据 static size_t WriteCallback(void* contents, size_t size, size_t nmemb, void* userp) {

((std::string*)userp)->append((char*)contents, size * nmemb); return size * nmemb; 

}

// OpenAI客户端类封装 class OpenAIClient { private:

std::string api_key; // 核心密钥 std::string base_url; // 基础URL CURL* curl; // curl句柄 

public:

// 构造函数:初始化密钥、URL和curl OpenAIClient(const std::string& api_key, const std::string& base_url = "https://api.deepseek.com") : api_key(api_key), base_url(base_url) { curl = curl_easy_init(); if (!curl) { throw std::runtime_error("Failed to initialize curl"); } } // 析构函数:释放资源 ~OpenAIClient() { if (curl) { curl_easy_cleanup(curl); } curl_global_cleanup(); } // 核心方法:发送对话请求并获取响应 // 参数:model-模型名;messages-对话历史(角色+内容) std::string chat_completion(const std::string& model, const std::vector 
          
            
            
              >& messages) { if (!curl) { throw std::runtime_error("Curl not initialized"); } // 1. 构造JSON请求体 json request_data; request_data["model"] = model; // 指定模型 // 构造对话历史数组 json messages_json = json::array(); for (const auto& msg : messages) { json msg_obj; msg_obj["role"] = msg.first; // 角色(system/user/assistant) msg_obj["content"] = msg.second; // 内容 messages_json.push_back(msg_obj); } request_data["messages"] = messages_json; request_data["temperature"] = 0.7; // 中等随机性 request_data["max_tokens"] = 1000; // 最大生成 tokens 数 std::string request_body = request_data.dump(); // JSON转字符串 std::string response_string; // 存储响应数据 // 2. 设置curl选项 curl_easy_setopt(curl, CURLOPT_URL, (base_url + "/v1/chat/completions").c_str()); // 完整请求URL curl_easy_setopt(curl, CURLOPT_POST, 1L); // POST请求 curl_easy_setopt(curl, CURLOPT_POSTFIELDS, request_body.c_str()); // 请求体 curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, request_body.length()); // 请求体长度 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); // 响应回调函数 curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response_string); // 响应数据存储地址 // 3. 设置请求头(身份认证+JSON格式) struct curl_slist* headers = NULL; headers = curl_slist_append(headers, "Content-Type: application/json"); headers = curl_slist_append(headers, ("Authorization: Bearer " + api_key).c_str()); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); // 4. 执行请求 CURLcode res = curl_easy_perform(curl); curl_slist_free_all(headers); // 释放请求头资源 // 错误处理 if (res != CURLE_OK) { throw std::runtime_error(std::string("curl_easy_perform() failed: ") + curl_easy_strerror(res)); } // 5. 解析响应JSON json response_data = json::parse(response_string); if (response_data.contains("error")) { throw std::runtime_error("API Error: " + response_data["error"]["message"].get 
             
               ()); } // 返回核心对话内容 return response_data["choices"][0]["message"]["content"].get 
              
                (); } 
               
              
            

};

// 主函数:测试持续对话 int main() {

try { // 初始化curl全局环境 curl_global_init(CURL_GLOBAL_DEFAULT); // 替换为你的DeepSeek API密钥(官网注册获取) std::string api_key = "填写你的API密钥(官网注册账号获取)"; OpenAIClient client(api_key); // 定义模型和初始系统指令 std::string model = "deepseek-chat"; std::vector 
          
            
            
              > messages = { {"system", "You are a helpful assistant."} }; // 打印欢迎信息 std::cout << "========================================" << std::endl; std::cout << "DeepSeek AI 对话系统(C++版)" << std::endl; std::cout << "输入 'exit' 或 'quit' 结束对话" << std::endl; std::cout << "========================================" << std::endl; // 持续对话循环 while (true) { // 获取用户输入 std::string user_input; std::cout << "\n用户: "; std::getline(std::cin, user_input); // 退出条件判断 if (user_input == "exit" || user_input == "quit") { std::cout << "\n感谢使用,对话结束!" << std::endl; break; } // 添加用户消息到对话历史 messages.emplace_back("user", user_input); try { // 调用API获取响应 std::string response = client.chat_completion(model, messages); // 打印响应内容 std::cout << "\nDeepSeek: " << std::endl; std::cout << response << std::endl; // 添加模型响应到对话历史(支持多轮对话) messages.emplace_back("assistant", response); } catch (const std::exception& e) { // 异常处理:打印错误信息并回滚对话历史 std::cerr << "\n错误: " << e.what() << std::endl; messages.pop_back(); // 移除失败的用户消息 std::cout << "请重试或输入 'exit' 结束对话" << std::endl; } } } catch (const std::exception& e) { // 全局异常处理 std::cerr << "程序错误: " << e.what() << std::endl; return 1; } return 0; 
            

}

将代码保存为 deepseek_chat.cpp,然后执行以下编译命令(需链接curl库):

g++ deepseek_chat.cpp -o deepseek_chat -lcurl -std=c++11 

编译成功后,运行生成的可执行文件:

./deepseek_chat 

运行程序后,输入问题即可和DeepSeek进行对话,输入 exitquit 可结束对话。实际运行效果如下:

“C++通过OpenAI协议调用DeepSeek API”,本质是封装HTTPS请求+JSON数据交互:

  • 依赖:libcurl(处理HTTP请求)+ nlohmann-json(处理JSON序列化/反序列化);


  • 步骤:构造符合协议的JSON请求体 → 设置HTTP请求头(携带api_key) → 执行请求 → 解析JSON响应。


拓展方向:

  • 实现流式响应(设置stream=true),适配实时对话场景;


  • 集成函数调用,让大模型能调用本地工具/接口;


  • 替换为其他兼容OpenAI协议的模型(如GPT、通义千问等),只需修改base_url和model、apikey参数。


我是小C 欢迎大家讨论交流~ 觉得有用的话,记得点赞+在看+转发哦!

小讯
上一篇 2026-04-04 15:42
下一篇 2026-04-04 15:40

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/223307.html