C++AI大模型接入SDK---ChatSDK使用手册
文章目录
- C++AI大模型接入SDK---ChatSDK使用手册
-
- 1、ChatSDK介绍
- 2、ChatSDK获取
- 3、使用说明
-
- [3.1 类关系](#3.1 类关系)
- [3.2 ChatSDK使用介绍](#3.2 ChatSDK使用介绍)
- [3.3 快速上手](#3.3 快速上手)
项目地址: 橘子师兄/ai-model-acess-tech - Gitee.com
博客专栏:C++AI大模型接入SDK_橘子师兄的博客-CSDN博客
博主首页:橘子师兄-CSDN博客
1、ChatSDK介绍
ChatSDK是⼀款基于C++语⾔实现的⼤模型接⼊库,⽬前⽀持:
- 已接⼊deepseek-chat、qwen-max模型
- ⽀持gpt-4o-mini、gemini-2.0-flash,Ollama本地接⼊deepseek-r1:1.5b模型
- ⽀持多轮聊天,全量消息和流式消息
- ⽀持会话管理:获取历史会话、获取历史会话消息
- 使⽤sqlite对会话数据进⾏持久化存储
2、ChatSDK获取
bash
git clone git@gitee.com:senior-brother-orange/ai-model-acess-tech.git
目录结构:
sdk/
├── CMakeLists.txt
├── include/ # 对外头文件目录(SDK使用者主要包含这里的头文件)
│ ├── ChatSDK.h # SDK主入口类:模型初始化、会话创建、发送消息
│ ├── LLMManager.h # 模型管理器注册Provider、初始化模型、统一转发消息请求
│ ├── LLMProvider.h # Provider抽象基类:定义等统一接口
│ ├── SessionManager.h # 会话管理器
│ ├── DataManager.h # 数据管理器:负责SQLite读写(会话、消息等)
│ ├── common.h # 公共数据结构
│ ├── DeepSeekProvider.h # DeepSeek模型Provider声明(基于HTTP接口封装)
│ ├── ChatGPTProvider.h # ChatGPT(OpenAI)模型Provider声明
│ ├── QwenProvider.h # 通义千问Qwen模型Provider声明(OpenAI兼容接口)
│ ├── GeminiProvider.h # Google Gemini模型Provider声明
│ ├── OllamaLLMProvider.h # Ollama本地模型Provider声明
│ └── util/ # 工具类头文件目录(例如日志封装等,供SDK内部/示例使用)
├── src/ # SDK实现目录(对应include中的声明)
│ ├── ChatSDK.cpp # ChatSDK实现
│ ├── LLMManager.cpp
│ ├── SessionManager.cpp # 会话ID生成、消息追加、历史消息查询、时间戳更新
│ ├── DataManager.cpp # DataManager实现:SQLite表结构/增删改查逻辑
│ ├── DeepSeekProvider.cpp # DeepSeek HTTP调用与响应解析(含全量与流式)
│ ├── ChatGPTProvider.cpp # OpenAI HTTP调用与响应解析(含全量与流式)
│ ├── QwenProvider.cpp # Qwen HTTP调用与响应解析(含全量与流式)
│ ├── GeminiProvider.cpp # Gemini HTTP调用与响应解析(含全量与流式)
│ ├── OllamaLLMProvider.cpp # Ollama本地调用与响应解析(含全量与流式)
│ └── util/
└── my_logger.cpp
└── build/
进⼊ sdk 所在⽬录,然后执⾏如下命令:
bash
> mkdir build && cd build # 创建build⽬录并进⼊该⽬录
> cmake .. # 编译ChatSDK,⽣成 libai_chat_sdk.a 静态库
> sudo make install
> mkdir build && cd build # 创建build⽬录并进⼊该⽬录
> cmake ... # 编译ChatSDK,⽣成 libai_chat_sdk.a 静态库
> sudo make install
静态库安装在: /usr/local/lib
头⽂件安装位置: /usr/local/include/ai_chat_sdk
3、使用说明
3.1 类关系

3.2 ChatSDK使用介绍
在程序中使用ChatSDK库时,主要通过ChatSDK类与库交互。该库中涉及到的成员介绍如下:
Header : #include<ai_chat_sdk/ChatSDK.h>
CMake : target_link_libraries({ProjName} PRIVATE ai_chat_sdk)
public Functions
bool initModels(const std::vector<std::shared_ptr<Config>>& configs)
功能:初始化所支持的模型
参数:configs - 所有支持的模型需配置的参数
返回值:初始化成功返回ture,否则返回false
std::string createSession(const std::string& modelName)
功能:为modelName模型创建会话
参数:modelName - 模型名称
返回值:返回会话Id
std::shared_ptr<Session> getSession(const std::string& sessionId)
功能:获取sessionId对应的会话信息
参数:sessionId - 会话Id
返回值:sessionId对应的会话信息
std::vector<std::string> getSessionList()
功能:获取所有会话信息
返回值:返回所有会话信息
std::vector<ModelInfo> getAvailableModels()
功能:获取支持的所有模型
返回值:返回支持的所有模型
bool deleteSession(const std::string& sessionId)
功能:删除sessionId对应的会话信息
参数:sessionId - 会话Id
返回值:删除成功返回true,否则返回false
std::string sendMessage(const std::string sessionId, conststd::string& message)
功能:给大模型发送消息,大模型生成所有回复后一次性返回
参数:
sessionId - 会话Id
message - 给大模型发送的消息内容
返回值:返回大模型的完整回复
std::string sendMessageStream(const std::string sessionId, const std::string& message, std::function<void(const std::string&, bool)>callback)
功能:给大模型发送消息,大模型生成一点返回一点,即流式响应
参数:
sessionId - 会话Id
message - 给大模型发送的消息内容
callback - 大模型返回消息用户处理回到函数
返回值:返回大模型的完整回复
相关数据结构请查看 sdk/include/common.h 文件
3.3 快速上手
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;
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文件,按照如下规则进行编译:
txt
# 项目名称为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