C++AI大模型接入SDK—ChatSDK使用手册

C++AI大模型接入SDK---ChatSDK使用手册

文章目录

项目地址: 橘子师兄/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
相关推荐
ZCXZ12385296a2 小时前
果园喷药除草机器人目标检测:YOLO11-Seg-FasterNet实现喷雾药车遥感药箱识别
人工智能·目标检测·机器人
txinyu的博客2 小时前
STL string 源码深度解析
开发语言·c++
公链开发2 小时前
2026链上预测趋势:Prediction Markets + AI融合真实案例与开发路径
人工智能
2013092416272 小时前
1956年Newell与Simon经典论文逻辑理论家(The Logic Theorist):人工智能符号主义的创世纪
人工智能
Channing Lewis2 小时前
正则灾难性回溯(catastrophic backtracking)
开发语言·python
悟纤2 小时前
什么是音乐音高?——AI 音乐创作的完整指南 | Suno高级篇 | 第27篇
大数据·人工智能·suno·suno api·ai music
旗讯数字2 小时前
旗讯OCR深度解析:智能解析与纸质文档识别抽取全链路解决方案
大数据·人工智能·文档数字化·数据结构化·旗讯ocr
sunfove2 小时前
从数据到智能:机器学习核心方法的数学原理与全景解构
人工智能·机器学习
布谷鸟科技cookoo2 小时前
布谷鸟科技走进小鹏汽车,解构远程驾驶全栈解决方案
人工智能·科技·ai·自动驾驶·边缘计算·远程驾驶