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获取

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 所在⽬录,然后执⾏如下命令:

> 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 快速上手

#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文件,按照如下规则进行编译:

# 项目名称为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
)

编译命令:

# 构建build目录,并进入build目录
mkdir build && cd build
# 生成构建系统文件
camke ..
# 对程序进行编译
make
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐