《Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享》
🎬 艾莉丝的简介:


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.h
1.1.1 头文件依赖与命名空间
- 依赖库:
httplib.hHTTP 库、智能指针<memory>、系统安装后的 SDK 头文件、日志工具头文件。 - 命名空间:
ai_chat_server
1.1.2 ServerConfig 配置结构体
结构体承载两类配置:HTTP 服务器自身配置、各个大模型接入配置。
#pragma once
#include <httplib.h>
#include <memory>
#include <string>
// 系统安装后SDK头文件
#include <ai_chat_sdk/ChatSDK.h>
#include <ai_chat_sdk/util/myLog.h>
namespace ai_chat_server {
/**
* @brief ChatServer整体配置结构体
* 包含HTTP服务配置 + 各大模型接入参数
*/
struct ServerConfig
{
// HTTP服务器配置
std::string host = "0.0.0.0"; // 监听地址,0.0.0.0允许任意客户端访问
int port = 8080; // 服务监听端口
std::string logLevel = "INFO"; // 日志输出级别
// 大模型通用推理参数
double temperature = 0.7; // 温度,控制生成随机性
int maxTokens = 1024; // 单次生成最大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聊天服务主类
*/
class ChatServer
{
public:
/**
* @brief 构造函数,接收完整服务配置,完成SDK、HTTP服务初始化
* @param config 外部传入服务与模型配置
*/
explicit ChatServer(const ServerConfig& config);
~ChatServer();
private:
// HTTP服务实例,独占所有权使用unique_ptr
std::unique_ptr<httplib::Server> _server = nullptr;
// ChatSDK实例,多场景共享使用shared_ptr
std::shared_ptr<ai_chat_sdk::ChatSDK> _chatSDK = nullptr;
};
} // namespace ai_chat_server
1.2 ChatServer.cpp 实现文件
1.2.1 初始化流程总览
- 根据外部传入
ServerConfig配置,分别构造 DeepSeek、ChatGPT、Gemini、Ollama 的模型配置对象; - 将全部模型配置装入
std::vector<std::shared_ptr<ai_chat_sdk::Config>>容器; - 调用
_chatSDK->initModels()初始化 SDK,做返回值校验,初始化失败直接返回; - 构建
httplib::ServerHTTP 服务智能指针实例,校验实例是否创建成功。
1.2.2 完整实现代码
#include "ChatServer.h"
namespace ai_chat_server {
ChatServer::ChatServer(const ServerConfig& config)
{
// 1. 实例化ChatSDK对象
_chatSDK = std::make_shared<ai_chat_sdk::ChatSDK>();
// 2. 构造DeepSeek云端模型配置
auto deepseekConfig = std::make_shared<ai_chat_sdk::APIConfig>();
deepseekConfig->_modelName = "deepseek‑chat";
deepseekConfig->_apiKey = config.deepseekAPIKey;
deepseekConfig->_temperature = config.temperature;
deepseekConfig->_maxTokens = config.maxTokens;
// 3. 构造ChatGPT云端模型配置
auto chatGPTConfig = std::make_shared<ai_chat_sdk::APIConfig>();
chatGPTConfig->_modelName = "gpt‑4o‑mini";
chatGPTConfig->_apiKey = config.chatGPTAPIKey;
chatGPTConfig->_temperature = config.temperature;
chatGPTConfig->_maxTokens = config.maxTokens;
// 4. 构造Gemini云端模型配置
auto geminiConfig = std::make_shared<ai_chat_sdk::APIConfig>();
geminiConfig->_modelName = "gemini‑2.0‑flash";
geminiConfig->_apiKey = config.geminiAPIKey;
geminiConfig->_temperature = config.temperature;
geminiConfig->_maxTokens = config.maxTokens;
// 5. 构造Ollama本地模型配置
auto ollamaConfig = std::make_shared<ai_chat_sdk::OllamaConfig>();
ollamaConfig->_modelName = config.ollamaModelName;
ollamaConfig->_modelDesc = config.ollamaModelDesc;
ollamaConfig->_endpoint = config.ollamaEndpoint;
ollamaConfig->_temperature = config.temperature;
ollamaConfig->_maxTokens = config.maxTokens;
// 6. 将全部模型配置存入vector,交给ChatSDK初始化接口
std::vector<std::shared_ptr<ai_chat_sdk::Config>> modelConfigs = {
deepseekConfig,
chatGPTConfig,
geminiConfig,
ollamaConfig
};
// SDK初始化,返回bool值,失败打印错误日志直接返回
if (!_chatSDK->initModels(modelConfigs))
{
ERR("ChatSDK init Failed!!!");
return;
}
// 7. 创建httplib HTTP服务独占智能指针对象
_server = std::make_unique<httplib::Server>();
if (!_server)
{
ERR("ChatServer httplib Server init Failed!!!");
return;
}
}
ChatServer::~ChatServer()
{
// unique_ptr、shared_ptr 自动释放资源,无需手动delete
}
} // namespace ai_chat_server
2 ~> 关键技术要点
2.1 智能指针选型依据
2.1.1 std::unique_ptrhttplib::Server _server
httplib::Server服务实例属于独占资源,整个业务生命周期只存在唯一实例;- 使用
unique_ptr独占所有权,禁止拷贝,出作用域自动析构释放服务资源。
2.1.2 std::shared_ptr<ai_chat_sdk::ChatSDK> _chatSDK
- ChatSDK 对象后续会被 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抽象层】
↓
各模型Provider(DeepSeek / 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_ptr<Config>基类指针; std::make_unique、std::make_shared不需要手动 new,优先使用标准库工厂函数;- 构造函数内初始化失败,不能阻止对象创建,上层业务调用前需要校验
_server、_chatSDK是否有效。
结尾
uu们,本文的内容到这里就全部结束了,艾莉丝在这里再次感谢您的阅读!
|
结语:希望对学习Linux相关内容的uu有所帮助,不要忘记给博主“一键四连”哦!
往期回顾:
【AI大模型接入SDK】ChatServer项目整体概述与系统架构
🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡 ૮₍ ˶ ˊ ᴥ ˋ˶₎ა
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/2401_89899187/article/details/167040430





