基于我上篇博客:
SpringBoot 调用deepseek的API进行对话-CSDN博客文章浏览阅读2次。这里只讲发一次消息和多轮对话,其余的拓展欢迎去官方文档参考进行实验首次调用 API | DeepSeek API DocsDeepSeek API 使用与 OpenAI 兼容的 API 格式,通过修改配置,您可以使用 OpenAI SDK 来访问 DeepSeek API,或使用与 OpenAI API 兼容的软件。https://blog.csdn.net/qq_73440769/article/details/148926987?spm=1001.2014.3001.5501我将java的接口暴露成一个接口供c++使用http进行调用,达到跨语言间的服务调用:
一、准备必要的外部库
curl/curl.h
nlohmann/json.hpp

二、代码结构

发送http工具类
#pragma once
// HttpUtil.h
#pragma once
#include <string>class HttpUtil {
public:static std::string sendPostRequest(const std::string& url, const std::string& jsonData);
};
// HttpUtil.cpp
#include "../include/HttpUtil.h"
#include <curl/curl.h>
#include <string>size_t WriteCallback(void* contents, size_t size, size_t nmemb, void* userp) {((std::string*)userp)->append((char*)contents, size * nmemb);return size * nmemb;
}std::string HttpUtil::sendPostRequest(const std::string& url, const std::string& jsonData) {CURL* curl;CURLcode res;std::string readBuffer;curl = curl_easy_init();if (curl) {struct curl_slist* headers = nullptr;headers = curl_slist_append(headers, "Content-Type: application/json");curl_easy_setopt(curl, CURLOPT_URL, url.c_str());curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jsonData.c_str());curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);res = curl_easy_perform(curl);if (res != CURLE_OK) {fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));}curl_easy_cleanup(curl);curl_slist_free_all(headers);}return readBuffer;
}
Json转map工具类
#pragma once#include <string>
#include <map>
#include "nlohmann/json.hpp"class JsonToMapUtil {
public:static std::map<std::string, std::string> jsonToMap(const std::string& jsonString);
};
#include "../include/JsonToMapUtil.h"std::map<std::string, std::string> JsonToMapUtil::jsonToMap(const std::string& jsonString) {nlohmann::json jsonObj = nlohmann::json::parse(jsonString);std::map<std::string, std::string> result;for (auto it = jsonObj.begin(); it != jsonObj.end(); ++it) {std::string key = it.key();std::string value = it.value().get<std::string>();result[key] = value;}return result;
}
关键后端代码实现

#include <iostream>
#include "include/HttpUtil.h"
#include "include/JsonToMapUtil.h"int main() {// 发送一条消息std::string url = "http://localhost:8081/api/chat/one";std::string jsonData = R"("jdk21新特性")";// 多轮对话
// std::string url = "http://localhost:8081/api/chat/completion";
// std::string jsonData = R"({
// "message": "你好,我刚刚问你啥问题",
// "conversation_id": "6"
// })";std::cout << "Sending POST request..." << std::endl;std::string response = HttpUtil::sendPostRequest(url, jsonData);std::cout << "Response received:\n" << response << std::endl;// 将 JSON 响应字符串转换为 mapstd::map<std::string, std::string> ansMap = JsonToMapUtil::jsonToMap(response);// 检查 map 中是否存在 "data" 键,并输出相应的值if (ansMap.find("data") != ansMap.end()) {std::cout << "DeepSeek 回答内容为:" << ansMap["data"] << std::endl;} else {std::cerr << "JSON 响应中没有找到 'data' 键." << std::endl;}return 0;
}
三、测试
