
个人主页艾莉丝努力练剑❄专栏传送门《C语言》《数据结构与算法》《C/C干货分享学习过程记录》《Linux操作系统编程详解》《笔试/面试常见算法从基础到进阶》《Python干货分享》⭐️为天地立心为生民立命为往圣继绝学为万世开太平 艾莉丝的简介文章目录1 ~ ChatServer 整体初始化概述1.1 ChatServer 头文件 ChatServer.h1.1.1 头文件依赖与命名空间1.1.2 ServerConfig 配置结构体1.2 ChatServer.cpp 实现文件1.2.1 初始化流程总览1.2.2 完整实现代码2 ~ 关键技术要点2.1 智能指针选型依据2.1.1 std::unique_ptr[httplib::Server](httplib::Server) _server2.1.2 std::shared_ptrai_chat_sdk::ChatSDK _chatSDK2.2 ChatSDK 库系统安装机制2.3 配置来源区分2.4 初始化错误处理策略3 ~ 架构分层关系4 ~ 当前阶段待实现扩展点5 ~ 易错代码坑点整理结尾1 ~ ChatServer 整体初始化概述ChatServer 是基于httplib实现的 HTTP 服务层作为客户端浏览器与底层 ChatSDK 大模型能力之间的中转层。项目目录约束ChatServer 目录与sdk、test目录平级包含ChatServer.h头文件、ChatServer.cpp实现文件。前置依赖ChatSDK 库执行sudo make install将头文件、动态 / 静态库安装至系统目录可使用尖括号引入 SDK 头文件。核心职责接收 HTTP 客户端请求读取服务器配置与模型参数完成 ChatSDK 实例初始化组装各厂商大模型配置创建 httplib::Server HTTP 服务实例将 HTTP 收到用户消息转发给 ChatSDK再把模型响应返回客户端。1.1 ChatServer 头文件 ChatServer.h1.1.1 头文件依赖与命名空间依赖库httplib.hHTTP 库、智能指针memory、系统安装后的 SDK 头文件、日志工具头文件。命名空间ai_chat_server1.1.2 ServerConfig 配置结构体结构体承载两类配置HTTP 服务器自身配置、各个大模型接入配置。#pragmaonce#includehttplib.h#includememory#includestring// 系统安装后SDK头文件#includeai_chat_sdk/ChatSDK.h#includeai_chat_sdk/util/myLog.hnamespaceai_chat_server{/** * brief ChatServer整体配置结构体 * 包含HTTP服务配置 各大模型接入参数 */structServerConfig{// HTTP服务器配置std::string host0.0.0.0;// 监听地址0.0.0.0允许任意客户端访问intport8080;// 服务监听端口std::string logLevelINFO;// 日志输出级别// 大模型通用推理参数doubletemperature0.7;// 温度控制生成随机性intmaxTokens1024;// 单次生成最大token数量// 云端API Key配置std::string deepseekAPIKey;std::string geminiAPIKey;std::string chatGPTAPIKey;// Ollama本地大模型接入配置std::string ollamaModelName;// ollama模型名称std::string ollamaModelDesc;// 模型描述信息std::string ollamaEndpoint;// ollama服务API端点地址};/** * brief HTTP聊天服务主类 */classChatServer{public:/** * brief 构造函数接收完整服务配置完成SDK、HTTP服务初始化 * param config 外部传入服务与模型配置 */explicitChatServer(constServerConfigconfig);~ChatServer();private:// HTTP服务实例独占所有权使用unique_ptrstd::unique_ptrhttplib::Server_servernullptr;// ChatSDK实例多场景共享使用shared_ptrstd::shared_ptrai_chat_sdk::ChatSDK_chatSDKnullptr;};}// namespace ai_chat_server1.2 ChatServer.cpp 实现文件1.2.1 初始化流程总览根据外部传入ServerConfig配置分别构造 DeepSeek、ChatGPT、Gemini、Ollama 的模型配置对象将全部模型配置装入std::vectorstd::shared_ptrai_chat_sdk::Config容器调用_chatSDK-initModels()初始化 SDK做返回值校验初始化失败直接返回构建httplib::ServerHTTP 服务智能指针实例校验实例是否创建成功。1.2.2 完整实现代码#includeChatServer.hnamespaceai_chat_server{ChatServer::ChatServer(constServerConfigconfig){// 1. 实例化ChatSDK对象_chatSDKstd::make_sharedai_chat_sdk::ChatSDK();// 2. 构造DeepSeek云端模型配置autodeepseekConfigstd::make_sharedai_chat_sdk::APIConfig();deepseekConfig-_modelNamedeepseek‑chat;deepseekConfig-_apiKeyconfig.deepseekAPIKey;deepseekConfig-_temperatureconfig.temperature;deepseekConfig-_maxTokensconfig.maxTokens;// 3. 构造ChatGPT云端模型配置autochatGPTConfigstd::make_sharedai_chat_sdk::APIConfig();chatGPTConfig-_modelNamegpt‑4o‑mini;chatGPTConfig-_apiKeyconfig.chatGPTAPIKey;chatGPTConfig-_temperatureconfig.temperature;chatGPTConfig-_maxTokensconfig.maxTokens;// 4. 构造Gemini云端模型配置autogeminiConfigstd::make_sharedai_chat_sdk::APIConfig();geminiConfig-_modelNamegemini‑2.0‑flash;geminiConfig-_apiKeyconfig.geminiAPIKey;geminiConfig-_temperatureconfig.temperature;geminiConfig-_maxTokensconfig.maxTokens;// 5. 构造Ollama本地模型配置autoollamaConfigstd::make_sharedai_chat_sdk::OllamaConfig();ollamaConfig-_modelNameconfig.ollamaModelName;ollamaConfig-_modelDescconfig.ollamaModelDesc;ollamaConfig-_endpointconfig.ollamaEndpoint;ollamaConfig-_temperatureconfig.temperature;ollamaConfig-_maxTokensconfig.maxTokens;// 6. 将全部模型配置存入vector交给ChatSDK初始化接口std::vectorstd::shared_ptrai_chat_sdk::ConfigmodelConfigs{deepseekConfig,chatGPTConfig,geminiConfig,ollamaConfig};// SDK初始化返回bool值失败打印错误日志直接返回if(!_chatSDK-initModels(modelConfigs)){ERR(ChatSDK init Failed!!!);return;}// 7. 创建httplib HTTP服务独占智能指针对象_serverstd::make_uniquehttplib::Server();if(!_server){ERR(ChatServer httplib Server init Failed!!!);return;}}ChatServer::~ChatServer(){// unique_ptr、shared_ptr 自动释放资源无需手动delete}}// namespace ai_chat_server2 ~ 关键技术要点2.1 智能指针选型依据2.1.1 std::unique_ptrhttplib::Server _serverhttplib::Server服务实例属于独占资源整个业务生命周期只存在唯一实例使用unique_ptr独占所有权禁止拷贝出作用域自动析构释放服务资源。2.1.2 std::shared_ptrai_chat_sdk::ChatSDK _chatSDKChatSDK 对象后续会被 HTTP 回调、多个请求上下文共享访问使用shared_ptr共享所有权引用计数管理生命周期多地方安全使用。2.2 ChatSDK 库系统安装机制ChatSDK 源码编译后执行sudo make install脚本将头文件复制到系统头文件目录库文件复制到系统库目录业务代码中使用#include ai_chat_sdk/ChatSDK.h尖括号方式查找头文件编译链接阶段链接器可以找到 SDK 库。2.3 配置来源区分原始测试代码模型参数、apiKey 从环境变量std::getenv()读取内部写死模型名称ChatServer 正式实现全部参数从外部传入的ServerConfig结构体读取解除硬编码外部可灵活配置不同模型、密钥、推理参数。2.4 初始化错误处理策略initModels()返回布尔值标识 SDK 初始化结果初始化失败使用日志宏ERR()打印错误信息构造函数直接 return 停止后续初始化不抛出异常通过日志记录故障上层调用方后续可检测智能指针是否为nullptr判断可用性。3 ~ 架构分层关系浏览器/HTTP客户端 ↓ HTTP请求 ChatServer(httplib::Server)【HTTP接入层】 ↓ 内部调用 ChatSDK 【大模型SDK抽象层】 ↓ 各模型ProviderDeepSeek / ChatGPT / Gemini / Ollama ↓ 云端API / Ollama本地服务ChatServer 只负责网络 IO 与配置组装大模型对话逻辑全部下沉到 ChatSDK 内部实现ChatServer 不耦合具体模型厂商所有模型信息由外部ServerConfig传入便于扩展新增模型。4 ~ 当前阶段待实现扩展点当前只完成构造阶段初始化后续还需要实现注册 HTTP 路由回调接收前端 POST 聊天请求在 http 回调函数内部调用_chatSDK的发送消息接口将 SDK 返回的模型应答封装为 HTTP 响应返回给浏览器客户端启动 httplib 服务_server-listen(host, port)进入事件循环。5 ~ 易错代码坑点整理命名空间作用域问题所有类、结构体必须包裹在ai_chat_server命名空间类型名拼写错误ChatSDK不要写成ChatSDk大小写会造成编译报错OllamaConfig、APIConfig 均继承基类ai_chat_sdk::Config存入 vector 必须用shared_ptrConfig基类指针std::make_unique、std::make_shared不需要手动 new优先使用标准库工厂函数构造函数内初始化失败不能阻止对象创建上层业务调用前需要校验_server、_chatSDK是否有效。结尾uu们本文的内容到这里就全部结束了艾莉丝在这里再次感谢您的阅读艾莉丝努力练剑C/C Linux 底层探索者 | 一个正在努力练剑的技术博主【关注】跟随我一起深耕技术领域见证每一次成长。❤️【点赞】让优质内容被更多人看见让知识传递更有力量。⭐【收藏】把核心知识点存好在需要时随时查、随时用。【评论】分享你的经验或疑问评论区一起交流避坑不要忘记给博主“一键四连”哦“今日练剑达成”“技术之路难免有困惑但同行的人会让前进更有方向。”结语希望对学习Linux相关内容的uu有所帮助不要忘记给博主“一键四连”哦往期回顾【AI大模型接入SDK】ChatServer项目整体概述与系统架构博主在这里放了一只小狗大家看完了摸摸小狗放松一下吧૮₍ ˶ ˊ ᴥ ˋ˶₎ა