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
相关推荐
风象南几秒前
OpenSpec 与 Spec Kit 使用对比:规范驱动开发该选哪个?
人工智能
草莓熊Lotso1 小时前
Linux 文件描述符与重定向实战:从原理到 minishell 实现
android·linux·运维·服务器·数据库·c++·人工智能
傻乐u兔1 小时前
C语言进阶————指针4
c语言·开发语言
大模型玩家七七1 小时前
基于语义切分 vs 基于结构切分的实际差异
java·开发语言·数据库·安全·batch
历程里程碑1 小时前
Linux22 文件系统
linux·运维·c语言·开发语言·数据结构·c++·算法
Coder_Boy_2 小时前
技术发展的核心规律是「加法打底,减法优化,重构平衡」
人工智能·spring boot·spring·重构
牛奔2 小时前
Go 如何避免频繁抢占?
开发语言·后端·golang
会飞的老朱4 小时前
医药集团数智化转型,智能综合管理平台激活集团管理新效能
大数据·人工智能·oa协同办公
聆风吟º5 小时前
CANN runtime 实战指南:异构计算场景中运行时组件的部署、调优与扩展技巧
人工智能·神经网络·cann·异构计算
寻星探路6 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https