C++AI大模型接入SDK---ChatSDK编写---快速上手
项目地址:橘子师兄/ai-model-acess-tech - Gitee.com
博客专栏:C++AI大模型接入SDK_橘子师兄的博客-CSDN博客
博主首页:橘子师兄-CSDN博客
ChatSDK支持功能如下:
• 获取支持模型
• 创建会话
• 获取会话列表
• 给模型发送消息,模型响应以全量方式返回
• 给模型发送消息,模型响应以流式方式返回
• 获取历史会话消息
• 删除会话
详细参考使用手册:C++AI大模型接入SDK---ChatSDK使用手册-CSDN博客
使用介绍:
- 下载ChatSDK库
- 编译并安装libai_chat_sdk库
- 在项目中包含 <ai_chat_sdk/chat_sdk.h> 和 ai_chat_sdk 库
具体请详细阅读ChatSDK使用手册,以及仓库中的server案例。
下面快速实现一个基于ChatSDK的使用deepseek的cmd案例,大家看下效果:
c++
#include <iostream>
#include <ai_chat_sdk/chat_sdk.h>
#include <ai_chat_sdk/util/my_logger.h>
void sendMessageStream(ai_chat_sdk::ChatSDK& chatSDK, const std::string& sessionId)
{
std::cout << "--------------发送消息--------------" << std::endl;
std::cout << "user消息 > ";
std::string message;
std::getline(std::cin, message);
std::cout << "--------------发送消息完成--------------" << std::endl;
chatSDK.sendMessageStream(sessionId, message, [](const std::string& response, bool done) {
std::cout << "assistant消息: " << response << std::endl;
if (done) {
std::cout << "--------------接收消息完成--------------" << std::endl;
}
});
}
int main(int argc, char* argv[])
{
bite::Logger::init_logger("aiChatServer", "stdout", spdlog::level::info);
ai_chat_sdk::ChatSDK chatSDK;
// 初始化deepseek模型信息
ai_chat_sdk::ApiConfig deepseekConfig;
deepseekConfig.api_key = std::getenv("deepseek_apikey");
deepseekConfig.temperature = 0.7;
deepseekConfig.max_tokens = 2048;
deepseekConfig.model_name = "deepseek-chat";
std::vector<std::shared_ptr<ai_chat_sdk::Config>> configs;
configs.push_back(std::make_shared<ai_chat_sdk::ApiConfig>(deepseekConfig));
// 初始化模型
chatSDK.initModels(configs);
std::cout << "--------------创建会话--------------" << std::endl;
std::string sessionId = chatSDK.createSession("deepseek-chat");
std::cout << "创建会话成功, 会话ID: " << sessionId << std::endl;
int userOp = 1; // 注意:原代码中变量名不一致,这里统一为userOp
while (true) {
std::cout << "-------1. send message 0. exit-----------------" << std::endl;
std::cin >> userOp;
if (userOp == 0) {
break;
}
getchar(); // 清除输入缓冲区中的换行符
sendMessageStream(chatSDK, sessionId);
}
std::cout << "--------------程序退出--------------" << std::endl;
return 0;
}
在源码目录下创建CMakeList.txt文件,按照如下规则进行编译:
cmake
# 项目名称为AIChatDemo
project(AIChatDemo)
# 设置C++标准,使用C++17标准进行编译,REQUIRED表示编译器如果不支持C++17则报错
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 设置构建类型为Debug
set(CMAKE_BUILD_TYPE Debug)
# 添加可执行文件
add_executable(AIChatDemo cmdChatDemo.cpp)
# 查找OpenSSL包
find_package(OpenSSL REQUIRED)
# 将 OpenSSL 的头文件目录添加到编译器的搜索路径中
include_directories(${OPENSSL_INCLUDE_DIR})
# 设置库的目录,链接器会在这个目录中查找需要的库文件ai_chat_sdk库文件
link_directories(/usr/local/lib)
# 链接SDK
target_link_libraries(AIChatDemo PRIVATE
ai_chat_sdk
fmt
jsoncpp
OpenSSL::SSL
OpenSSL::Crypto
gflags
spdlog
sqlite3
)
编译命令:
bash
# 构建build目录,并进入build目录
mkdir build && cd build
# 生成构建系统文件
camke ..
# 对程序进行编译
make
运行结果:
./AIChatDemo
// ...
--------------创建会话--------------
09:50:44 [aiChatServer][info ][/home/bit/will/AIModelAcess/ai-modelacess/
sdk/src/SessionManager.cpp:66 ] create session, session_id:
session_1758016244_00000001, model_name: deepseek-chat
09:50:44 [aiChatServer][info ][/home/bit/will/AIModelAcess/ai-modelacess/
sdk/src/DataManager.cpp:106 ] Inserted session:
session_1758016244_00000001
09:50:44 [aiChatServer][info ][/home/bit/will/AIModelAcess/ai-modelacess/
sdk/src/ChatSDK.cpp:34 ] create session session_1758016244_00000001
success with model deepseek-chat!!!
创建会话成功, 会话ID: session_1758016244_00000001
--------------发送消息--------------
user消息 > 你是谁?
--------------发送消息完成--------------
09:50:47 [aiChatServer][info ][/home/bit/will/AIModelAcess/ai-modelacess/
sdk/src/SessionManager.cpp:123 ] add message to session
session_1758016244_00000001:你是谁?
09:50:48 [aiChatServer][info ][/home/bit/will/AIModelAcess/ai-modelacess/
sdk/src/DeepSeekProvider.cpp:179 ] DeepSeekProvider sendMessageStream
buffer: data: {"id":"e4d2b6db-9a30-4088-852ed188d3b34b85","
object":"chat.completion.chunk","created":1758016248,"model":"de
epseekchat","
system_fingerprint":"fp_08f168e49b_prod0820_fp8_kvcache","choices":
[{"index":0,"delta":
{"role":"assistant","content":""},"logprobs":null,"finish_reason":null}]}
data: {"id":"e4d2b6db-9a30-4088-852ed188d3b34b85","
object":"chat.completion.chunk","created":1758016248,"model":"de
epseekchat","
system_fingerprint":"fp_08f168e49b_prod0820_fp8_kvcache","choices":
[{"index":0,"delta":{"content":"我是"},"logprobs":null,"finish_reason":null}]}
buffer: data: {"id":"e4d2b6db-9a30-4088-852ed188d3b34b85","
object":"chat.completion.chunk","created":1758016248,"model":"de
epseekchat","
system_fingerprint":"fp_08f168e49b_prod0820_fp8_kvcache","choices":
[{"index":0,"delta":{"content":" Deep"},"logprobs":null,"finish_reason":null}]}
buffer: data: {"id":"e4d2b6db-9a30-4088-852ed188d3b34b85","
object":"chat.completion.chunk","created":1758016248,"model":"de
epseekchat","
system_fingerprint":"fp_08f168e49b_prod0820_fp8_kvcache","choices":
[{"index":0,"delta":{"content":"Se"},"logprobs":null,"finish_reason":null}]}
data: {"id":"e4d2b6db-9a30-4088-852ed188d3b34b85","
object":"chat.completion.chunk","created":1758016248,"model":"de
epseekchat","
system_fingerprint":"fp_08f168e49b_prod0820_fp8_kvcache","choices":
[{"index":0,"delta":{"content":"ek"},"logprobs":null,"finish_reason":null}]}
buffer: data: {"id":"e4d2b6db-9a30-4088-852ed188d3b34b85","
object":"chat.completion.chunk","created":1758016248,"model":"de
epseekchat","
system_fingerprint":"fp_08f168e49b_prod0820_fp8_kvcache","choices":
[{"index":0,"delta":{"content":"-V"},"logprobs":null,"finish_reason":null}]}
data: {"id":"e4d2b6db-9a30-4088-852ed188d3b34b85","
object":"chat.completion.chunk","created":1758016248,"model":"de
epseekchat","
system_fingerprint":"fp_08f168e49b_prod0820_fp8_kvcache","choices":
[{"index":0,"delta":{"content":"3"},"logprobs":null,"finish_reason":null}]}
buffer: data: {"id":"e4d2b6db-9a30-4088-852ed188d3b34b85","
object":"chat.completion.chunk","created":1758016248,"model":"de
epseekchat","
system_fingerprint":"fp_08f168e49b_prod0820_fp8_kvcache","choices":
[{"index":0,"delta":{"content":","},"logprobs":null,"finish_reason":null}]}
data: {"id":"e4d2b6db-9a30-4088-852ed188d3b34b85","
object":"chat.completion.chunk","created":1758016248,"model":"de
epseekchat","
system_fingerprint":"fp_08f168e49b_prod0820_fp8_kvcache","choices":
[{"index":0,"delta":{"content":"由"},"logprobs":null,"finish_reason":null}]}
buffer: data: {"id":"e4d2b6db-9a30-4088-852ed188d3b34b85","
object":"chat.completion.chunk","created":1758016248,"model":"de
epseekchat","
system_fingerprint":"fp_08f168e49b_prod0820_fp8_kvcache","choices":
[{"index":0,"delta":{"content":"深度"},"logprobs":null,"finish_reason":null}]}
// ...
buffer: data: [DONE]
assistant消息:
--------------接收消息完成--------------
09:50:53 [aiChatServer][info ][/home/bit/will/AIModelAcess/ai-modelacess/
sdk/src/ChatSDK.cpp:146 ] chatsdk sendMessageStream end : 我是 DeepSeek-
V3,由深度求索公司打造的智能助手!🤖✨ 我的目标是帮助你解答各类问题,无论是学习、工作,还
是生活中的小困扰,我都会尽力提供有用的信息和建议。有什么想问的,尽管来吧!😊
09:50:53 [aiChatServer][info ][/home/bit/will/AIModelAcess/ai-modelacess/
sdk/src/DataManager.cpp:170 ] Updated session timestamp:
session_1758016244_00000001, round 1
09:50:53 [aiChatServer][info ][/home/bit/will/AIModelAcess/ai-modelacess/
sdk/src/ChatSDK.cpp:152 ] Message send and response received for session
session_1758016244_00000001, round 1
--------------发送消息--------------