艾莉丝努力练剑头像
【AI大模型接入SDK】ChatServer 整体初始化概述封面图

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


头像


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

❄专栏传送门:《C语言》《数据结构与算法》《C/C++干货分享&学习过程记录》
《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 初始化流程总览

  1. 根据外部传入ServerConfig配置,分别构造 DeepSeek、ChatGPT、Gemini、Ollama 的模型配置对象;
  2. 将全部模型配置装入std::vector<std::shared_ptr<ai_chat_sdk::Config>>容器;
  3. 调用_chatSDK->initModels()初始化 SDK,做返回值校验,初始化失败直接返回;
  4. 构建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 库系统安装机制

  1. ChatSDK 源码编译后执行sudo make install;
  2. 脚本将头文件复制到系统头文件目录,库文件复制到系统库目录;
  3. 业务代码中使用#include <ai_chat_sdk/ChatSDK.h>尖括号方式查找头文件;
  4. 编译链接阶段链接器可以找到 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 ~> 易错代码坑点整理

  1. 命名空间作用域问题:所有类、结构体必须包裹在ai_chat_server命名空间;
  2. 类型名拼写错误:ChatSDK不要写成ChatSDk,大小写会造成编译报错;
  3. OllamaConfig、APIConfig 均继承基类ai_chat_sdk::Config,存入 vector 必须用shared_ptr<Config>基类指针;
  4. std::make_unique、std::make_shared不需要手动 new,优先使用标准库工厂函数;
  5. 构造函数内初始化失败,不能阻止对象创建,上层业务调用前需要校验_server、_chatSDK是否有效。

结尾

uu们,本文的内容到这里就全部结束了,艾莉丝在这里再次感谢您的阅读!

艾莉丝努力练剑

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


👀 【关注】 跟随我一起深耕技术领域,见证每一次成长。
❤️ 【点赞】 让优质内容被更多人看见,让知识传递更有力量。
⭐ 【收藏】 把核心知识点存好,在需要时随时查、随时用。
💬 【评论】 分享你的经验或疑问,评论区一起交流避坑!

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

“今日练剑达成!”
文章配图

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

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

往期回顾:

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

🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡
૮₍ ˶ ˊ ᴥ ˋ˶₎ა

在这里插入图片描述

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/2401_89899187/article/details/167040430

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--