《Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享》
🎬 艾莉丝的简介:
文章目录
- 1 ~> ChatSDK 整体介绍
- 1.1 项目概述
- 1.2 支持模型列表
- 1.3 核心能力
- 2 ~> ChatSDK 获取、编译与安装
- 2.1 获取源码
- 2.2 源码目录结构
- 2.3 编译安装流程
- 2.4 安装后系统路径
- 3 ~> SDK 内部类架构与 UML 关系
- 3.1 对外入口类 ChatSDK
- 3.2 核心组件说明
- 3.2.1 LLMManager
- 3.2.2 SessionManager 会话管理器
- 3.2.3 DataManager
- 3.2.4 Session + Message
- 3.2.5 LLMProvider(抽象基类 / 接口)
- 3.2.6 Config 配置体系
- 4 ~> ChatSDK API 使用说明
- 4.1 工程接入
- 4.1.1 头文件引入
- 4.1.2 CMake 链接配置
- 4.2 ChatSDK 公开成员函数
- 4.3 完整可运行示例(DeepSeek 流式对话命令行 Demo)
- 5 ~> SDK 设计思路总结
- 结尾
1 ~> ChatSDK 整体介绍
1.1 项目概述
- ChatSDK 是基于 C++ 实现的大模型接入静态库,编译产物为静态库
libai_chat_sdk.a。 - 项目源码仓库:https://gitee.com/zhibite-edu/ai-model-acess-tech
1.2 支持模型列表
- 云端模型
- deepseek‑chat
- gpt‑4o‑mini
- gemini‑2.0‑flash
- 本地 Ollama 模型
- deepseek‑r1:1.5b
1.3 核心能力
- 支持多轮对话,同时提供全量消息、流式消息两种消息返回模式
- 会话管理:新建会话、获取会话列表、获取会话历史消息、删除会话
- 基于 SQLite 完成会话数据持久化存储
2 ~> ChatSDK 获取、编译与安装
2.1 获取源码
gitclone https://gitee.com/zhibite-edu/ai-model-acess-dev.git2.2 源码目录结构
sdk ├── CMakeLists.txt ├── include#头文件目录│ ├── ChatGPTProvider.h │ ├── chat_sdk.h │ ├── common.h │ ├── dataManager.h │ ├── DeepSeekProvider.h │ ├── GeminiProvider.h │ ├── ILLMProvider.h │ ├── LLManager.h │ ├── session_manager.h │ └── util │ └── my_logger.h ├── src#实现源码│ ├── ChatGPTProvider.cpp │ ├── chat_sdk.cpp │ ├── DataManager.cpp │ ├── DeepSeekProvider.cpp │ ├── GeminiProvider.cpp │ ├── LLMManager.cpp │ ├── OllamaDeepSeekProvider.cpp │ ├── session_manager.cpp │ └── util │ └── my_logger.cpp └── build#编译输出目录(手动创建)2.3 编译安装流程
#1. 创建并进入编译目录mkdirbuild&&cdbuild#2. cmake构建,生成静态库libai_chat_sdk.acmake..#3. 系统级安装sudomakeinstall2.4 安装后系统路径
- 静态库:
/usr/local/lib/libai_chat_sdk.a - 头文件:
/usr/local/include/ai_chat_sdk/
3 ~> SDK 内部类架构与 UML 关系
UML 图例约定
- 实心菱形箭头:组合关系,箭头指向类为被包含成员,箭羽端类持有对方作为成员变量
- 空心三角箭头:继承关系,子类指向父类
- 虚线箭头:依赖关系,一个类在方法 / 参数中使用另一个类
3.1 对外入口类 ChatSDK
- 使用者仅需操作
ChatSDK,该类通过组合关系聚合所有内部功能组件,屏蔽底层复杂实现。 - 组合成员:
SessionManager、LLMManager、Config配置对象。
3.2 核心组件说明
3.2.1 LLMManager
负责大模型整体调度管理
- 大模型实例初始化
- 向大模型发送消息
- 获取模型名称、模型描述
- 检测模型可用性
内部持有
LLMProvider抽象接口对象,不直接实现网络请求逻辑。
3.2.2 SessionManager 会话管理器
- 内部维护多组
Session会话对象;每个Session包含多条Message消息。 - 成员变量包含
DataManager对象,完成会话持久化。 - 核心接口
- 更新会话时间戳
- 获取全部会话 ID 列表
- 删除指定会话
- 清空全部会话
- 获取会话总数量
- 内部自动生成 sessionId、messageId
3.2.3 DataManager
- 负责会话、消息数据的 SQLite 持久化存储,完成内存会话对象与磁盘数据库读写。
3.2.4 Session + Message
Session:一次聊天会话,唯一标识为 sessionId。Message:单条消息结构体,存储用户 / 助手对话内容;LLMProvider依赖 Message,将历史消息传递给大模型接口实现多轮上下文。
3.2.5 LLMProvider(抽象基类 / 接口)
- 抽象接口类,定义统一大模型调用接口,不实现具体业务逻辑。
- 子类实现(继承 LLMProvider)
DeepSeekProvider:deepseek‑chat 云端模型实现ChatGPTProvider:gpt‑4o‑mini 云端模型实现GeminiProvider:gemini‑2.0‑flash 云端模型实现OllamaDeepSeekProvider:Ollama 本地模型实现
3.2.6 Config 配置体系
- 基类
Config,两种子类继承自 ConfigApiConfig:云端 API 模型配置,存储 api_key、temperature、max_tokens、model_name 等参数OllamaConfig:Ollama 本地模型配置,存储本地服务地址、模型名称等参数
ChatSDK以组合关系持有 Config 对象。
4 ~> ChatSDK API 使用说明
4.1 工程接入
4.1.1 头文件引入
#include<ai_chat_sdk/chat_sdk.h>4.1.2 CMake 链接配置
target_link_libraries(你的项目目标 PRIVATE ai_chat_sdk)4.2 ChatSDK 公开成员函数
| 函数签名 | 功能说明 | 参数说明 | 返回值 |
|---|---|---|---|
bool initModels(const std::vector<std::shared_ptr<Config>>& configs) | 批量初始化模型 | configs:多个模型配置智能指针集合 | 初始化成功 true,失败 false |
std::string createSession(const std::string& modelName) | 为指定模型创建全新会话 | modelName:已初始化的模型名称 | 返回会话 sessionId 字符串 |
std::shared_ptr<Session> getSession(const std::string& sessionId) | 获取指定会话对象 | sessionId:会话唯一 ID | 会话智能指针 |
std::vector<std::string> getSessionlist() | 获取全部会话 ID 列表 | 无 | 所有 sessionId 集合 |
std::vector<ModelInfo> getAvailableModels() | 获取所有可用模型信息 | 无 | 模型信息结构体数组 |
bool deleteSession(const std::string& sessionId) | 删除指定会话 | sessionId:待删除会话 ID | 删除成功 true |
std::string sendMessage(const std::string sessionId, const std::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 回调:第一个参数分片文本,第二个 bool 标记是否流式结束 | 完整助手回复字符串 |
补充:相关结构体定义参考头文件
sdk/include/common.h
4.3 完整可运行示例(DeepSeek 流式对话命令行 Demo)
#include<iostream>#include<string>#include<cstdio>#include<memory>#include<ai_chat_sdk/chat_sdk.h>#include<ai_chat_sdk/util/my_logger.h>/** * @brief 封装流式消息发送交互函数 * @param chatSDK ChatSDK实例引用 * @param sessionId 当前会话ID */voidsendMessageStreamDemo(ai_chat_sdk::ChatSDK&chatSDK,conststd::string&sessionId){std::cout<<"\n------发送消息------"<<std::endl;std::cout<<"user消息>";std::string message;//读取整行用户输入std::getline(std::cin,message);std::cout<<"------发送消息完成------"<<std::endl;//调用流式消息接口,传入回调处理分片输出chatSDK.sendMessageStream(sessionId,message,[](conststd::string&response,booldone){std::cout<<"assistant消息:"<<response;if(done){std::cout<<"\n------接收完成------\n";}});}intmain(intargc,char*argv[]){//初始化日志系统,输出到stdout,日志等级infobite::Logger::init_logger("aiChatServer","stdout",spdlog::level::info);//实例化SDK对象ai_chat_sdk::ChatSDK chatSDK;//构建DeepSeek云端模型配置ai_chat_sdk::ApiConfig deepseekConfig;//从环境变量读取api_key,运行前需export deepseek_apikey="你的密钥"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<<"\n------创建会话--------"<<std::endl;std::string sessionId=chatSDK.createSession("deepseek-chat");std::cout<<"创建会话成功,会话ID:"<<sessionId<<std::endl;intuserOp=1;while(true){std::cout<<"\n-------1.send message | 0.exit---------"<<std::endl;std::cin>>userOp;if(userOp==0){break;}//吸收cin遗留换行符,避免getline读取空字符串getchar();sendMessageStreamDemo(chatSDK,sessionId);}return0;}5 ~> SDK 设计思路总结
- 将编译完成的静态库配合头文件、CMake 脚本、使用文档托管至代码仓库,降低第三方使用者接入成本。
- 外观模式:
ChatSDK作为外观入口,隔离内部复杂的会话管理、模型适配、持久化逻辑。 - 面向接口编程:
LLMProvider抽象接口隔离不同大模型的差异,新增模型只需要新增子类实现,上层调用无需修改。 - 会话与持久化分离:业务会话内存对象与 SQLite 磁盘存储解耦。
- 同时支持云端 API 模型、本地 Ollama 模型;兼容一次性全量应答、流式分片应答两种交互模式。
结尾
uu们,本文的内容到这里就全部结束了,艾莉丝在这里再次感谢您的阅读!
|
结语:希望对学习Linux相关内容的uu有所帮助,不要忘记给博主“一键四连”哦!
往期回顾:
【AI大模型接入SDK】ChatSDK:CMake构建静态库完整实现
🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡 ૮₍ ˶ ˊ ᴥ ˋ˶₎ა