尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

【AI大模型接入SDK】ChatSDK架构设计与实现

发布时间:2026/9/28 20:13:03

资讯中心
01
ARTICLE

【AI大模型接入SDK】ChatSDK架构设计与实现

【AI大模型接入SDK】ChatSDK架构设计与实现
个人主页艾莉丝努力练剑❄专栏传送门《C语言》《数据结构与算法》《C/C干货分享学习过程记录》《Linux操作系统编程详解》《笔试/面试常见算法从基础到进阶》《Python干货分享》⭐️为天地立心为生民立命为往圣继绝学为万世开太平 艾莉丝的简介文章目录1 ~ SDK 基础概念1.1 SDK 定义1.2 SDK 与 API 区别1.3 项目业务背景2 ~ ChatSDK 整体架构设计2.1 核心设计目标2.2 ChatSDK 类成员分析2.2.1 对外公开接口Public2.2.2 私有成员变量说明2.3 common.h 公共结构体定义3 ~ 会话管理相关接口逻辑3.1 createSession 创建会话3.2 getSession 查询会话3.3 getSessionList 获取全部会话 ID3.4 deleteSession 删除会话4 ~ 消息发送接口逻辑4.1 sendMessage 全量返回消息4.2 sendMessageStream 流式增量消息5 ~ 模型初始化与可用模型查询5.1 initModels 初始化模型5.2 getAvailableModels 获取可用模型列表6 ~ 关键约束与易错点结尾1 ~ SDK 基础概念1.1 SDK 定义SDKSoftware Development Kit软件开发工具包面向开发者的功能工具集合类比程序员的工具箱用于快速实现特定业务能力屏蔽底层复杂实现细节降低开发接入成本。SDK 标准组成库文件已经实现业务逻辑的编译好的代码分为静态库.lib/.a、动态库.dll/.so开发者通过头文件获知对外暴露的类、函数接口。API 接口SDK 对外暴露调用入口规定调用参数、返回值是 SDK 的调用契约。开发文档接口说明、配置说明、使用约束。示例代码可直接运行的 Demo用于快速跑通业务流程。调试工具辅助定位运行时错误。1.2 SDK 与 API 区别特性APISDK本质软件之间交互调用的接口 / 一组函数完整可部署下载的工具包集合包含关系API 是 SDK 的组成部分SDK 包含 API、库、文档、示例、调试工具使用场景仅需要调用外部服务接口完整开发业务应用需要整套工具链支撑获取方式查阅文档即可调用无需下载需要下载整套工具包到本地工程通俗类比做菜场景API菜谱告诉你食材、步骤灶台、锅具需要自己准备。SDK食材包 菜谱 锅铲小锅物料工具全部打包开箱即可制作。1.3 项目业务背景项目原有三大独立模块模型管理模块完成多模型接入封装与大模型交互逻辑。会话管理模块管理聊天会话、会话内历史消息。数据管理模块会话、聊天消息持久化存储。问题直接对外暴露三大模块外部使用者需要同时操作三套模块接入成本高。解决方案封装ChatSDK将模型管理、会话管理、数据管理做上层封装外部应用仅依赖ChatSDK类即可完成全部聊天业务不需要感知底层模块细节。会话管理内部持有数据管理对象会话管理与数据管理可以视作一个逻辑单元。2 ~ ChatSDK 整体架构设计2.1 核心设计目标整合LLMManager模型管理器、SessionManager会话管理器对外提供统一简洁接口。屏蔽底层模型差异、会话存储、持久化细节。支持多模型配置初始化、会话生命周期管理、普通全量消息返回、流式增量消息回调返回。交付产物头文件 编译库文件 SDK 文档 使用示例。2.2 ChatSDK 类成员分析2.2.1 对外公开接口Public#pragmaonce#includeLLMManager.h#includecommon.h#includeSessionManager.h#includememory#includestring#includectime#includevector#includefunctionalnamespaceai_chat_sdk{classChatSDK{public:/** * brief 初始化SDK加载多个模型配置 * param configs 多个模型配置智能指针数组支持API模型、Ollama本地模型 * return true初始化成功false失败 */boolinitModels(conststd::vectorstd::shared_ptrConfigconfigs);/** * brief 创建聊天会话 * param modelName 指定会话绑定的模型名称 * return 生成唯一sessionId会话标识字符串 */std::stringcreateSession(conststd::stringmodelName);/** * brief 根据sessionId获取会话对象 * param sessionId 会话唯一ID * return 会话智能指针会话不存在返回空智能指针 */std::shared_ptrSessiongetSession(conststd::stringsessionId);/** * brief 获取全部会话ID列表 * return 所有会话id字符串vector */std::vectorstd::stringgetSessionList();/** * brief 删除指定会话同时清理内存与持久化存储数据 * param sessionId 待删除会话ID * return true删除成功 */booldeleteSession(conststd::stringsessionId);/** * brief 获取当前所有可用模型元信息 * return ModelInfo模型信息数组用于前端模型选择UI渲染 */std::vectorModelInfogetAvailableModels();/** * brief 发送消息全量一次性返回完整模型回复 * param sessionId 会话ID * param message 用户输入消息文本 * return 模型完整响应字符串 */std::stringsendMessage(conststd::stringsessionId,conststd::stringmessage);/** * brief 发送消息流式增量返回结果 * param sessionId 会话ID * param message 用户输入消息 * param callback 回调函数第一个参数为增量分片文本第二个bool标记是否是最后分片 */voidsendMessageStream(conststd::stringsessionId,conststd::stringmessage,std::functionvoid(conststd::string,bool)callback);private:/// 注册全部模型提供者voidregisterLLMProvider(conststd::vectorstd::shared_ptrConfigconfigs);/// 初始化全部模型提供者voidinitProviders(conststd::vectorstd::shared_ptrConfigconfigs);/// API云端模型初始化GPT、Gemini等boolapiProviderInit(conststd::stringmodelName,conststd::shared_ptrApiConfigapiConfig);/// Ollama本地模型初始化boolollamaProviderInit(conststd::stringmodelName,conststd::shared_ptrOllamaConfigollamaConfig);bool_initializedfalse;/// SDK整体初始化标记/// key:模型名称 value:模型配置智能指针保存全部传入模型配置std::unordered_mapstd::string,std::shared_ptrConfig_modelConfigs;LLMManager _llmManager;/// 模型管理实例负责和各个大模型provider交互SessionManager _sessionManager;/// 会话管理实例管理会话生命周期与持久化};}// namespace ai_chat_sdk2.2.2 私有成员变量说明_initialized布尔标记记录 ChatSDK 是否初始化完成执行业务接口前必须校验该标记。_modelConfigs哈希表维护模型名到配置对象的映射保存全部传入的模型配置配置包含温度、max_tokens、apikey 等参数。_llmManager模型管理器实例完成底层不同模型 Provider 调度。_sessionManager会话管理器实例管理会话创建、销毁、查询内部持有 DataManager 做持久化。2.3 common.h 公共结构体定义namespaceai_chat_sdk{/// 单条聊天消息结构体structMessage{std::string _role;/// 角色user / assistant / systemstd::string _content;/// 消息文本内容std::time_t _timestamp;/// 消息时间戳Message(conststd::stringrole,conststd::stringcontent):_role(role),_content(content){}};/// 模型基础通用配置structConfig{std::string _modelName;/// 模型名称全局唯一double_temperature0.7;/// 温度控制生成随机性越大越随机int_maxTokens2048;/// 最大输出token数量};/// API云端模型配置继承基础配置用于OpenAI、Gemini等在线模型structApiConfig:publicConfig{std::string _apiKey;/// 接口访问密钥};/// Ollama本地模型配置继承Config本地部署模型使用structOllamaConfig:publicConfig{// Ollama服务地址、端口等本地特有配置字段};}3 ~ 会话管理相关接口逻辑3.1 createSession 创建会话接收入参模型名称modelName绑定该会话使用哪个大模型。内部调用SessionManager::createSession(modelName)。会话管理器内部执行流程互斥锁保护多线程并发访问会话容器。调用工具函数生成全局唯一sessionId。实例化Session会话对象填充 sessionId、创建时间、更新时间。将会话存入内存哈希表。调用DataManager将会话元数据写入持久化存储。释放互斥锁返回生成的 sessionId 给上层 ChatSDK。3.2 getSession 查询会话根据传入sessionId从SessionManager获取会话对象智能指针。会话不存在返回空 shared_ptr调用方需要判空。3.3 getSessionList 获取全部会话 ID不返回完整会话对象仅返回所有会话 id 字符串数组业务层拿到 id 后按需调用 getSession 获取会话详情。3.4 deleteSession 删除会话传入 sessionId内存容器移除会话同时通知 DataManager 删除持久化存储中该会话以及会话下全部消息记录。4 ~ 消息发送接口逻辑4.1 sendMessage 全量返回消息参数sessionId 会话 ID用户输入 message 字符串。内部处理流程通过 sessionId 从 Session 获取该会话绑定的模型名称读取会话完整历史消息列表。从_modelConfigs读取该模型预设配置temperature、max_tokens。将用户最新消息追加进会话历史 Message 数组。将历史消息、模型参数交给对应模型 Provider。Provider 内部逻辑示例DeepSeek 参考实现校验模型 Provider 是否可用。使用模型配置中 temperature、max_tokens 构造请求参数。将 Message 数组转换为 JSON 数组格式组装 HTTP 请求 Body。JSON 序列化发起 HTTP 请求调用模型接口。获取模型完整响应返回字符串。ChatSDK 拿到模型回复将 assistant 回复写入会话历史持久化保存。返回完整回答字符串给调用方。4.2 sendMessageStream 流式增量消息参数sessionId用户消息回调 callback。callback 回调签名void(const std::string chunk, bool isEnd)chunk模型返回的增量分片文本每次回调只返回一小段内容。isEnd布尔标记true 代表流式输出全部完成。业务逻辑同样读取会话历史、模型配置组装请求。使用 http 长连接流式读取模型分片结果。每拿到一块分片执行外部传入 callback将分片抛出给上层业务。流式全部结束后把完整 assistant 回答写入会话历史并持久化。5 ~ 模型初始化与可用模型查询5.1 initModels 初始化模型入参是std::vectorstd::shared_ptrConfig支持传入多个不同模型配置ApiConfig/OllamaConfig。ChatSDK 内部将配置存入_modelConfigs哈希表。根据配置实际类型API/ Ollama分发调用apiProviderInit/ollamaProviderInit。完成各个 LLM Provider 注册到LLMManager。全部模型初始化完成后设置_initializedtrue任一关键模型初始化失败返回 false。5.2 getAvailableModels 获取可用模型列表返回std::vectorModelInfo模型元信息数组。业务场景前端 UI 渲染模型选择界面展示模型名称、描述、能力标签多轮对话、代码生成、问答等。当前项目已接入模型deepseek‑r1:70b本地部署gemini‑2.0‑flash云端 APIgpt‑4o‑mini云端 APIdeepseek‑chat云端 APIdeepseek‑r1:1.5bOllama 本地6 ~ 关键约束与易错点线程安全SessionManager 内部会话增删查改必须加互斥锁多线程并发调用 ChatSDK 接口会话容器存在竞态条件风险。配置继承区分ApiConfig、OllamaConfig继承基础Config初始化需要 RTTI 识别实际配置类型区分云端 API 模型与本地 Ollama 模型初始化逻辑。会话‑模型绑定每个 session 创建时绑定一个固定 modelName同一个会话全程使用该模型不允许中途切换模型。持久化联动会话增删、消息新增内存操作完成的同时必须同步调用 DataManager 写入持久化存储内存和磁盘数据需要保持一致。初始化状态校验所有对外业务接口执行前必须校验_initialized标记SDK 未初始化直接调用接口直接返回错误。流式回调注意点callback 回调执行于网络 IO 线程上层业务如果操作 UI需要自行做线程切换禁止在回调内部做阻塞耗时操作。参数来源temperature、max_tokens 优先取自模型初始化 Config 配置不需要上层每次发消息重复传入。结尾uu们本文的内容到这里就全部结束了艾莉丝在这里再次感谢您的阅读艾莉丝努力练剑C/C Linux 底层探索者 | 一个正在努力练剑的技术博主【关注】跟随我一起深耕技术领域见证每一次成长。❤️【点赞】让优质内容被更多人看见让知识传递更有力量。⭐【收藏】把核心知识点存好在需要时随时查、随时用。【评论】分享你的经验或疑问评论区一起交流避坑不要忘记给博主“一键四连”哦“今日练剑达成”“技术之路难免有困惑但同行的人会让前进更有方向。”结语希望对学习Linux相关内容的uu有所帮助不要忘记给博主“一键四连”哦往期回顾【AI大模型接入SDK】session管理和数据管理结合博主在这里放了一只小狗大家看完了摸摸小狗放松一下吧૮₍ ˶ ˊ ᴥ ˋ˶₎ა
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。