欢迎光临
我们一直在努力

【AI大模型接入SDK】ChatServer 整体初始化概述

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}

头像

🎬 个人主页:艾莉丝努力练剑

❄专栏传送门:《C语言》《数据结构与算法》《C/C++干货分享&学习过程记录》 《Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享》

⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平


🎬 艾莉丝的简介:

在这里插入图片描述


文章目录

  • 1 ~> ChatServer 整体初始化概述
    • 1.1 ChatServer 头文件 ChatServer.h
      • 1.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) _server
      • 2.1.2 std::shared_ptr<ai_chat_sdk::ChatSDK> _chatSDK
    • 2.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.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们,本文的内容到这里就全部结束了,艾莉丝在这里再次感谢您的阅读!

    艾莉丝努力练剑

    C/C++ & Linux 底层探索者 | 一个正在努力练剑的技术博主


    👀
    【关注】 跟随我一起深耕技术领域,见证每一次成长。

    ❤️
    【点赞】 让优质内容被更多人看见,让知识传递更有力量。

    ⭐
    【收藏】 把核心知识点存好,在需要时随时查、随时用。

    💬
    【评论】 分享你的经验或疑问,评论区一起交流避坑!

    不要忘记给博主“一键四连”哦!

    “今日练剑达成!”

    “技术之路难免有困惑,但同行的人会让前进更有方向。”

    结语:希望对学习Linux相关内容的uu有所帮助,不要忘记给博主“一键四连”哦!

    往期回顾:

    【AI大模型接入SDK】ChatServer项目整体概述与系统架构

    🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡

    ૮₍ ˶ ˊ ᴥ ˋ˶₎ა

    在这里插入图片描述

    赞(0)
    未经允许不得转载:171主机测评 » 【AI大模型接入SDK】ChatServer 整体初始化概述
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址