当前位置: 首页 > ai >正文

使用c++调用deepseek的api(附带源码)

可以给服务器添加deepseek这样就相当于多了一个智能ai助手

  • deepseek的api申请地址
  • 使用格式
  • 测试效果
  • 源码

deepseek的api申请地址

这边使用硅基流动的api,注册就有免费额度
硅基流动: link
在这里插入图片描述

使用格式

api的调用格式,ds的api调用就是用固定协议然后发送到对应服务器即可
然后解析json格式的文件。
在这里插入图片描述
让ds有记忆需要这样的格式发送数据,相当于把回答的和之前的问题合一起
在这里插入图片描述

测试效果

20250421_191636

在这里插入图片描述

源码

#include <iostream>
#include <string>
#include <vector>
#include <curl/curl.h>
#include <json/json.h>using namespace Json;static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* response) {size_t total_size = size * nmemb;response->append((char*)contents, total_size);return total_size;
}class ChatGPTClient {
public:ChatGPTClient(const std::string& api_key): api_key_(api_key),endpoint_("https://api.siliconflow.cn/v1/chat/completions"),model_("deepseek-ai/DeepSeek-R1") {curl_ = curl_easy_init();// 初始化系统消息addSystemMessage(u8"你是一个乐于助人的AI助手,我发送的可能是gbk格式数据给你,你可能要自己转换");}~ChatGPTClient() {if (curl_) curl_easy_cleanup(curl_);}void addSystemMessage(const std::string& content) {Value message;message["role"] = "system";message["content"] = content;history_.append(message);}std::string ask(const std::string& question) {if (!curl_) return "Error: CURL init failed";// 添加用户问题到历史Value userMessage;userMessage["role"] = "user";userMessage["content"] = question;history_.append(userMessage);// 构建请求体Value request;request["model"] = model_;request["messages"] = history_;request["temperature"] = 0.7;request["max_tokens"] = 4096;// 序列化StreamWriterBuilder writer;std::string post_data = writeString(writer, request);// 发送请求struct curl_slist* headers = nullptr;headers = curl_slist_append(headers, "Content-Type: application/json");headers = curl_slist_append(headers, ("Authorization: Bearer " + api_key_).c_str());std::string response_str;char error_buffer[CURL_ERROR_SIZE] = { 0 };curl_easy_setopt(curl_, CURLOPT_URL, endpoint_.c_str());curl_easy_setopt(curl_, CURLOPT_HTTPHEADER, headers);curl_easy_setopt(curl_, CURLOPT_POSTFIELDS, post_data.c_str());curl_easy_setopt(curl_, CURLOPT_WRITEFUNCTION, WriteCallback);curl_easy_setopt(curl_, CURLOPT_WRITEDATA, &response_str);curl_easy_setopt(curl_, CURLOPT_ERRORBUFFER, error_buffer);curl_easy_setopt(curl_, CURLOPT_SSL_VERIFYPEER, 0L);CURLcode res = curl_easy_perform(curl_);curl_slist_free_all(headers);if (res != CURLE_OK) {return "CURL Error: " + std::string(error_buffer);}// 解析响应CharReaderBuilder reader;Value response_json;std::string parse_errors;std::istringstream response_stream(response_str);bool parse_ok = Json::parseFromStream(reader, response_stream, &response_json, &parse_errors);if (!parse_ok) return "JSON Error: " + parse_errors;if (response_json.isMember("error")) {return "API Error: " + response_json["error"]["message"].asString();}const Value& choices = response_json["choices"];if (!choices.empty() && choices[0].isMember("message")) {// 添加AI回复到历史Value assistantMessage = choices[0]["message"];history_.append(assistantMessage);return assistantMessage["content"].asString();}return "No valid response";}private:CURL* curl_;std::string api_key_;std::string endpoint_;std::string model_;Value history_;  // 使用JSON数组存储对话历史
};int main() {ChatGPTClient client("填key");while (true) {std::cout << "You: ";std::string input;std::getline(std::cin, input);if (input == "exit") break;std::cout << "AI: " << client.ask(input) << "\n\n";}return 0;
}

在这里插入图片描述
要下载
jsoncpp和ucrl
https://github.com/open-source-parsers/jsoncpp
https://github.com/curl/curl
编译参考这个文章,和libevent的编译流程一样
https://blog.csdn.net/m0_54069809/article/details/147250776?spm=1001.2014.3001.5502

http://www.xdnf.cn/news/750.html

相关文章:

  • 深度解析算法之位运算
  • 突破传统!SEARCH-R1如何让LLM与搜索引擎协同推理?
  • 使用SystemWeaver生成SOME/IP ETS ARXML的完整实战指南
  • FastGPT Docker Compose本地部署与硅基流动免费AI接口集成指南
  • Kubernetes相关的名词解释Metrics Server组件(7)
  • IPv4地址分类与常用网络地址详解
  • 基于Spring AI Alibaba实现MCP-Stdio的全栈解析与实践指南
  • Vue常用指令入门
  • 【NLP 60、实践 ⑭ 使用bpe构建词表】
  • SMTP发送邮件
  • 【C++单调栈向量】3288最长上升路径的长度|2449
  • 2025-4-20-C++ 学习 数组(1)
  • 【洛谷】P3156 【深基15.例1】询问学号 的题解
  • Agent安装-Beszel​​ 轻量级服务器监控平台
  • Milvus(1):什么是 Milvus
  • 【ROS】航点导航功能
  • 八大排序之希尔排序
  • leetcode 718. Maximum Length of Repeated Subarray
  • 【matlab|python】矢量棍棒图应用场景和代码
  • Redis——通信协议
  • 第35讲:构建属于自己的遥感大模型平台,并接入地理数据工作流
  • Ubuntu修改Swap交换空间大小
  • 深入浅出 C++ 核心基础:从语法特性到入门体系构建
  • C语言if
  • 大模型之路(day 1)
  • 嵌入式学习——远程终端登录和桌面访问
  • Java Web项目(一)
  • Mysql相关知识2:Mysql隔离级别、MVCC、锁
  • 深度可分离卷积与普通卷积的区别及原理
  • 【C++】继承----上篇