【AI接入大模型SDK】ChatSDK示例验证
个人主页艾莉丝努力练剑❄专栏传送门《C语言》《数据结构与算法》《C/C干货分享学习过程记录》《Linux操作系统编程详解》《笔试/面试常见算法从基础到进阶》《Python干货分享》⭐️为天地立心为生民立命为往圣继绝学为万世开太平 艾莉丝的简介文章目录ChatSDK 知识体系一、ChatSDK 基础概述二、SDK 部署流程三、核心类层次体系四、核心 API 能力集五、项目集成规范六、常见踩坑与排错1 ~ ChatSDK 基础概述1.1 产品定位1.2 支持模型清单1.3 核心特性2 ~ SDK 编译与安装流程2.1 源码获取2.2 SDK 源码目录结构2.3 标准编译安装步骤2.4 安装路径说明2.5 CMake 安装规则原理3 ~ 核心类体系与 API 规范3.1 类设计关系3.2 ChatSDK 核心 API 详解3.2.1 模型初始化3.2.2 会话管理接口3.2.3 消息交互接口4 ~ 快速上手实战代码4.1 前置要求4.2 完整可运行示例代码5 ~ 项目 CMake 构建配置5.1 CMakeLists.txt 完整配置5.2 编译运行命令5.3 常见构建错误排查结尾ChatSDK 知识体系一、ChatSDK 基础概述定位C17 实现的大模型接入静态库封装 HTTP 请求、会话管理、持久化底层逻辑支持模型云端DeepSeek、GPT-4o、Gemini、本地Ollama DeepSeek R1核心能力多轮对话、流式 / 非流式响应、会话全生命周期管理、SQLite 数据持久化依赖栈OpenSSL、fmt、jsoncpp、spdlog、gflags、sqlite3二、SDK 部署流程源码获取Git 克隆官方仓库构建生成CMake 生成 Makefile Make 编译生成静态库系统安装头文件与静态库安装至系统标准目录三、核心类层次体系顶层入口类ChatSDK统一对外接口管理层LLMManager模型实例管理SessionManager会话生命周期管理DataManagerSQLite 持久化数据管理配置层基类Config派生ApiConfig云端模型、OllamaConfig本地模型数据实体Session、ModelInfo、Message提供者层多态实现基类LLMProvider派生DeepSeekProvider、ChatGPTProvider、GeminiProvider、OllamaDeepSeekProvider四、核心 API 能力集模型初始化initModels会话管理createSession、getSession、getSessionList、deleteSession消息交互sendMessage同步非流式、sendMessageStream异步流式元信息查询getAvailableModels五、项目集成规范头文件引入路径CMake 链接配置规则日志库前置初始化要求六、常见踩坑与排错日志未初始化导致段错误头文件大小写不一致系统依赖库缺失API Key 环境变量未配置CMake 源文件名不匹配1 ~ ChatSDK 基础概述1.1 产品定位ChatSDK 是基于 C 语言封装的大模型接入开发库屏蔽了不同厂商 API 的协议差异、HTTP 通信细节、会话上下文维护与数据持久化逻辑为上层应用提供统一的调用接口。1.2 支持模型清单云端 API 模型deepseek-chat、gpt-4o-mini、gemini-2.0-flash本地部署模型通过 Ollama 接入 deepseek-r1:1.5b1.3 核心特性多轮对话自动维护会话上下文无需开发者手动拼接历史消息双模式响应支持一次性完整返回、流式逐块回调两种响应模式会话管理支持会话创建、查询、删除全生命周期操作持久化存储基于 SQLite 实现会话与消息数据的本地落盘2 ~ SDK 编译与安装流程补充cmake ..描述为 “编译”属于概念错误。因为cmake是构建系统生成工具仅负责生成 Makefile 等构建脚本真正的编译动作由make命令执行。2.1 源码获取仓库地址https://gitee.com/zhibite-edu/ai-model-access-dev.gitgitclone https://gitee.com/zhibite-edu/ai-model-access-dev.git2.2 SDK 源码目录结构SDK 核心代码位于仓库sdk/目录下结构如下sdk/ ├── CMakeLists.txt # CMake构建配置 ├── include/ # 头文件目录 │ ├── chat_sdk.h # 核心入口头文件 │ ├── common.h # 公共数据结构定义 │ ├── ILLMProvider.h # 模型提供者抽象接口 │ ├── LLMManager.h # 模型管理器 │ ├── SessionManager.h # 会话管理器 │ ├── DataManager.h # 数据持久化管理器 │ ├── DeepSeekProvider.h │ ├── ChatGPTProvider.h │ ├── GeminiProvider.h │ ├── OllamaDeepSeekProvider.h │ └── util/my_logger.h # 日志工具 ├── src/ # 核心源文件 └── util/ # 工具类源文件2.3 标准编译安装步骤# 1. 进入sdk源码根目录cdsdk# 2. 创建独立构建目录并进入mkdirbuildcdbuild# 3. 生成Makefile构建脚本非编译cmake..# 4. 执行编译生成静态库 libai_chat_sdk.amake# 5. 安装至系统目录需root权限sudomakeinstall2.4 安装路径说明静态库安装路径/usr/local/lib/libai_chat_sdk.a头文件安装路径/usr/local/include/ai_chat_sdk/2.5 CMake 安装规则原理SDK 的 CMakeLists.txt 通过install指令指定安装行为静态库目标安装至系统lib目录include/下所有.h文件安装至系统include/ai_chat_sdk目录保证头文件路径统一3 ~ 核心类体系与 API 规范3.1 类设计关系组合关系ChatSDK 类内部组合了 LLMManager、SessionManager、Config 三类对象对外提供统一门面继承关系采用策略模式实现多厂商模型适配不同厂商 Provider 继承自 LLMProvider 抽象基类数据实体Session、ModelInfo、Message 为纯数据结构对应业务实体3.2 ChatSDK 核心 API 详解3.2.1 模型初始化bool initModels(const std::vectorstd::shared_ptrConfig configs);功能根据传入的配置列表初始化所有模型实例参数configs为所有模型配置的智能指针数组返回值初始化成功返回true失败返回false3.2.2 会话管理接口// 创建指定模型的会话返回唯一会话ID std::string createSession(const std::string modelName); // 根据会话ID获取会话对象 std::shared_ptrSession getSession(const std::string sessionId); // 获取所有会话的ID列表 std::vectorstd::string getSessionList(); // 删除指定会话及其历史消息 bool deleteSession(const std::string sessionId); // 获取所有已初始化的可用模型列表 std::vectorModelInfo getAvailableModels();3.2.3 消息交互接口非流式发送同步返回std::string sendMessage(const std::string sessionId, const std::string message);阻塞等待模型生成完整回复后一次性返回返回值模型完整响应文本流式发送回调返回std::string sendMessageStream( const std::string sessionId, const std::string message, std::functionvoid(const std::string, bool) callback );模型每生成一段文本即触发一次回调模拟打字效果callback参数第一个参数为当前文本片段第二个参数done标识响应是否结束返回值最终完整的响应文本4 ~ 快速上手实战代码**补充**如果直接运行会触发Segmentation fault核心原因是未初始化 spdlog 日志库。4.1 前置要求已完成 SDK 编译与系统安装已配置环境变量deepseek_apikey存储 API 密钥系统已安装所有依赖库4.2 完整可运行示例代码#include iostream #include string #include vector #include memory #include ai_chat_sdk/chat_sdk.h #include ai_chat_sdk/common.h #include ai_chat_sdk/util/my_logger.h /** * brief 封装流式消息发送与打印 * param chatSDK ChatSDK实例引用 * param sessionId 会话ID */ 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; // 调用流式接口lambda表达式作为回调处理返回 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); // 1. 创建ChatSDK核心实例 ai_chat_sdk::ChatSDK chatSDK; // 2. 配置DeepSeek模型参数 ai_chat_sdk::ApiConfig deepseekConfig; deepseekConfig.api_key std::getenv(deepseek_apikey); // 从环境变量读取密钥 deepseekConfig.temperature 0.7; // 采样温度值越高随机性越强 deepseekConfig.max_tokens 2048; // 单次响应最大token数 deepseekConfig.model_name deepseek-chat; // 3. 组装配置数组支持同时配置多个模型 std::vectorstd::shared_ptrai_chat_sdk::Config configs; configs.push_back(std::make_sharedai_chat_sdk::ApiConfig(deepseekConfig)); // 4. 初始化所有模型 chatSDK.initModels(configs); // 5. 创建会话 std::cout -----创建会话----- std::endl; std::string sessionId chatSDK.createSession(deepseek-chat); std::cout 创建会话成功会话ID: sessionId std::endl; // 6. 主交互循环 int userOp 1; while(true){ std::cout -------1.send message 0.exit------- std::endl; std::cin userOp; if(userOp 0){ break; } getchar(); // 消化输入缓冲区残留的换行符避免getline读空 sendMessageStream(chatSDK, sessionId); } std::cout -----程序退出----- std::endl; return 0; }5 ~ 项目 CMake 构建配置5.1 CMakeLists.txt 完整配置cmake_minimum_required(VERSION 3.10) project(AIChatDemo) # 强制使用C17标准 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 设置构建类型为Debug set(CMAKE_BUILD_TYPE Debug) # 添加可执行目标源文件名必须与实际文件一致 add_executable(AIChatDemo chatDemo.cpp) # 查找并引入OpenSSL依赖 find_package(OpenSSL REQUIRED) include_directories(${OPENSSL_INCLUDE_DIR}) # 指定系统库搜索路径确保能找到安装的ai_chat_sdk link_directories(/usr/local/lib) # 链接所有依赖库 target_link_libraries(AIChatDemo PRIVATE ai_chat_sdk # ChatSDK静态库 fmt jsoncpp OpenSSL::SSL OpenSSL::Crypto gflags spdlog sqlite3 )5.2 编译运行命令# 在项目根目录创建构建目录mkdirbuildcdbuild# 生成构建文件cmake..# 编译生成可执行文件make# 运行程序需提前配置deepseek_apikey环境变量./AIChatDemo5.3 常见构建错误排查源文件找不到add_executable中指定的文件名必须与实际源文件名完全一致大小写敏感依赖库缺失需提前通过系统包管理器安装libssl-dev、libfmt-dev、libjsoncpp-dev、libspdlog-dev、libgflags-dev、libsqlite3-dev链接不到 SDK确保已执行sudo make install且link_directories路径正确结尾uu们本文的内容到这里就全部结束了艾莉丝在这里再次感谢您的阅读艾莉丝努力练剑C/C Linux 底层探索者 | 一个正在努力练剑的技术博主【关注】跟随我一起深耕技术领域见证每一次成长。❤️【点赞】让优质内容被更多人看见让知识传递更有力量。⭐【收藏】把核心知识点存好在需要时随时查、随时用。【评论】分享你的经验或疑问评论区一起交流避坑不要忘记给博主“一键四连”哦“今日练剑达成”“技术之路难免有困惑但同行的人会让前进更有方向。”结语希望对学习Linux相关内容的uu有所帮助不要忘记给博主“一键四连”哦往期回顾【AI接入大模型SDK】Trae IDE开发环境搭建指南博主在这里放了一只小狗大家看完了摸摸小狗放松一下吧૮₍ ˶ ˊ ᴥ ˋ˶₎ა