【AI大模型接入SDK】C++ ChatSDK使用手册

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

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


🎬 艾莉丝的简介:


文章目录

  • [1 ~> ChatSDK 整体介绍](#1 ~> ChatSDK 整体介绍)
    • [1.1 项目概述](#1.1 项目概述)
    • [1.2 支持模型列表](#1.2 支持模型列表)
    • [1.3 核心能力](#1.3 核心能力)
  • [2 ~> ChatSDK 获取、编译与安装](#2 ~> ChatSDK 获取、编译与安装)
    • [2.1 获取源码](#2.1 获取源码)
    • [2.2 源码目录结构](#2.2 源码目录结构)
    • [2.3 编译安装流程](#2.3 编译安装流程)
    • [2.4 安装后系统路径](#2.4 安装后系统路径)
  • [3 ~> SDK 内部类架构与 UML 关系](#3 ~> SDK 内部类架构与 UML 关系)
    • [3.1 对外入口类 ChatSDK](#3.1 对外入口类 ChatSDK)
    • [3.2 核心组件说明](#3.2 核心组件说明)
      • [3.2.1 LLMManager](#3.2.1 LLMManager)
      • [3.2.2 SessionManager 会话管理器](#3.2.2 SessionManager 会话管理器)
      • [3.2.3 DataManager](#3.2.3 DataManager)
      • [3.2.4 Session + Message](#3.2.4 Session + Message)
      • [3.2.5 LLMProvider(抽象基类 / 接口)](#3.2.5 LLMProvider(抽象基类 / 接口))
      • [3.2.6 Config 配置体系](#3.2.6 Config 配置体系)
  • [4 ~> ChatSDK API 使用说明](#4 ~> ChatSDK API 使用说明)
    • [4.1 工程接入](#4.1 工程接入)
      • [4.1.1 头文件引入](#4.1.1 头文件引入)
      • [4.1.2 CMake 链接配置](#4.1.2 CMake 链接配置)
    • [4.2 ChatSDK 公开成员函数](#4.2 ChatSDK 公开成员函数)
    • [4.3 完整可运行示例(DeepSeek 流式对话命令行 Demo)](#4.3 完整可运行示例(DeepSeek 流式对话命令行 Demo))
  • [5 ~> SDK 设计思路总结](#5 ~> SDK 设计思路总结)
  • 结尾


1 ~> ChatSDK 整体介绍

1.1 项目概述

1.2 支持模型列表

  • 云端模型
    • deepseek‑chat
    • gpt‑4o‑mini
    • gemini‑2.0‑flash
  • 本地 Ollama 模型
    • deepseek‑r1:1.5b

1.3 核心能力

  • 支持多轮对话,同时提供全量消息、流式消息两种消息返回模式
  • 会话管理:新建会话、获取会话列表、获取会话历史消息、删除会话
  • 基于 SQLite 完成会话数据持久化存储

2 ~> ChatSDK 获取、编译与安装

2.1 获取源码

bash 复制代码
git clone https://gitee.com/zhibite-edu/ai-model-acess-dev.git

2.2 源码目录结构

bash 复制代码
sdk
├── CMakeLists.txt
├── include          #头文件目录
│   ├── ChatGPTProvider.h
│   ├── chat_sdk.h
│   ├── common.h
│   ├── dataManager.h
│   ├── DeepSeekProvider.h
│   ├── GeminiProvider.h
│   ├── ILLMProvider.h
│   ├── LLManager.h
│   ├── session_manager.h
│   └── util
│       └── my_logger.h
├── src              #实现源码
│   ├── ChatGPTProvider.cpp
│   ├── chat_sdk.cpp
│   ├── DataManager.cpp
│   ├── DeepSeekProvider.cpp
│   ├── GeminiProvider.cpp
│   ├── LLMManager.cpp
│   ├── OllamaDeepSeekProvider.cpp
│   ├── session_manager.cpp
│   └── util
│       └── my_logger.cpp
└── build            #编译输出目录(手动创建)

2.3 编译安装流程

bash 复制代码
#1. 创建并进入编译目录
mkdir build && cd build
#2. cmake构建,生成静态库libai_chat_sdk.a
cmake ..
#3. 系统级安装
sudo make install

2.4 安装后系统路径

  • 静态库:/usr/local/lib/libai_chat_sdk.a
  • 头文件:/usr/local/include/ai_chat_sdk/

3 ~> SDK 内部类架构与 UML 关系

UML 图例约定

  • 实心菱形箭头:组合关系,箭头指向类为被包含成员,箭羽端类持有对方作为成员变量
  • 空心三角箭头:继承关系,子类指向父类
  • 虚线箭头:依赖关系,一个类在方法 / 参数中使用另一个类

3.1 对外入口类 ChatSDK

  • 使用者仅需操作ChatSDK,该类通过组合关系聚合所有内部功能组件,屏蔽底层复杂实现。
  • 组合成员:SessionManager、LLMManager、Config配置对象。

3.2 核心组件说明

3.2.1 LLMManager

负责大模型整体调度管理

  • 大模型实例初始化
  • 向大模型发送消息
  • 获取模型名称、模型描述
  • 检测模型可用性

内部持有LLMProvider抽象接口对象,不直接实现网络请求逻辑。

3.2.2 SessionManager 会话管理器

  • 内部维护多组Session会话对象;每个Session包含多条Message消息。
  • 成员变量包含DataManager对象,完成会话持久化。
  • 核心接口
    • 更新会话时间戳
    • 获取全部会话 ID 列表
    • 删除指定会话
    • 清空全部会话
    • 获取会话总数量
    • 内部自动生成 sessionId、messageId

3.2.3 DataManager

  • 负责会话、消息数据的 SQLite 持久化存储,完成内存会话对象与磁盘数据库读写。

3.2.4 Session + Message

  • Session:一次聊天会话,唯一标识为 sessionId。
  • Message:单条消息结构体,存储用户 / 助手对话内容;LLMProvider依赖 Message,将历史消息传递给大模型接口实现多轮上下文。

3.2.5 LLMProvider(抽象基类 / 接口)

  • 抽象接口类,定义统一大模型调用接口,不实现具体业务逻辑。
  • 子类实现(继承 LLMProvider)
    • DeepSeekProvider:deepseek‑chat 云端模型实现
    • ChatGPTProvider:gpt‑4o‑mini 云端模型实现
    • GeminiProvider:gemini‑2.0‑flash 云端模型实现
    • OllamaDeepSeekProvider:Ollama 本地模型实现

3.2.6 Config 配置体系

  • 基类Config,两种子类继承自 Config
    • ApiConfig:云端 API 模型配置,存储 api_key、temperature、max_tokens、model_name 等参数
    • OllamaConfig:Ollama 本地模型配置,存储本地服务地址、模型名称等参数
  • ChatSDK以组合关系持有 Config 对象。

4 ~> ChatSDK API 使用说明

4.1 工程接入

4.1.1 头文件引入

cpp 复制代码
#include <ai_chat_sdk/chat_sdk.h>

4.1.2 CMake 链接配置

bash 复制代码
target_link_libraries(你的项目目标 PRIVATE ai_chat_sdk)

4.2 ChatSDK 公开成员函数

函数签名 功能说明 参数说明 返回值
bool initModels(const std::vector<std::shared_ptr<Config>>& configs) 批量初始化模型 configs:多个模型配置智能指针集合 初始化成功 true,失败 false
std::string createSession(const std::string& modelName) 为指定模型创建全新会话 modelName:已初始化的模型名称 返回会话 sessionId 字符串
std::shared_ptr<Session> getSession(const std::string& sessionId) 获取指定会话对象 sessionId:会话唯一 ID 会话智能指针
std::vector<std::string> getSessionlist() 获取全部会话 ID 列表 无 所有 sessionId 集合
std::vector<ModelInfo> getAvailableModels() 获取所有可用模型信息 无 模型信息结构体数组
bool deleteSession(const std::string& sessionId) 删除指定会话 sessionId:待删除会话 ID 删除成功 true
std::string sendMessage(const std::string sessionId, const std::string& message) 非流式发送消息,等待模型全部生成完成返回完整结果 sessionId 会话 ID;message 用户输入文本 完整助手回复字符串
std::string sendMessageStream(const std::string sessionId, const std::string& message, std::function<void(const std::string&,bool)> callback) 流式消息发送,模型分片输出,回调逐段接收内容 sessionId 会话 ID;message 输入;callback 回调:第一个参数分片文本,第二个 bool 标记是否流式结束 完整助手回复字符串

补充:相关结构体定义参考头文件 sdk/include/common.h

4.3 完整可运行示例(DeepSeek 流式对话命令行 Demo)

cpp 复制代码
#include <iostream>
#include <string>
#include <cstdio>
#include <memory>
#include <ai_chat_sdk/chat_sdk.h>
#include <ai_chat_sdk/util/my_logger.h>

/**
 * @brief 封装流式消息发送交互函数
 * @param chatSDK ChatSDK实例引用
 * @param sessionId 当前会话ID
 */
void sendMessageStreamDemo(ai_chat_sdk::ChatSDK& chatSDK, const std::string& sessionId)
{
    std::cout << "\n------发送消息------" << std::endl;
    std::cout << "user消息>";
    std::string message;
    //读取整行用户输入
    std::getline(std::cin, message);
    std::cout << "------发送消息完成------" << std::endl;

    //调用流式消息接口,传入回调处理分片输出
    chatSDK.sendMessageStream(sessionId, message,
        [](const std::string& response, bool done)
        {
            std::cout << "assistant消息:" << response;
            if(done)
            {
                std::cout << "\n------接收完成------\n";
            }
        });
}

int main(int argc,char* argv[])
{
    //初始化日志系统,输出到stdout,日志等级info
    bite::Logger::init_logger("aiChatServer","stdout",spdlog::level::info);

    //实例化SDK对象
    ai_chat_sdk::ChatSDK chatSDK;

    //构建DeepSeek云端模型配置
    ai_chat_sdk::ApiConfig deepseekConfig;
    //从环境变量读取api_key,运行前需export deepseek_apikey="你的密钥"
    deepseekConfig.api_key = std::getenv("deepseek_apikey");
    deepseekConfig.temperature = 0.7;
    deepseekConfig.max_tokens = 2048;
    deepseekConfig.model_name = "deepseek-chat";

    //组装配置集合
    std::vector<std::shared_ptr<ai_chat_sdk::Config>> configs;
    configs.push_back(std::make_shared<ai_chat_sdk::ApiConfig>(deepseekConfig));

    //初始化模型
    chatSDK.initModels(configs);

    //创建会话
    std::cout << "\n------创建会话--------"<<std::endl;
    std::string sessionId = chatSDK.createSession("deepseek-chat");
    std::cout << "创建会话成功,会话ID:" << sessionId << std::endl;

    int userOp = 1;
    while(true)
    {
        std::cout << "\n-------1.send message | 0.exit---------"<<std::endl;
        std::cin >> userOp;
        if(userOp == 0)
        {
            break;
        }
        //吸收cin遗留换行符,避免getline读取空字符串
        getchar();
        sendMessageStreamDemo(chatSDK, sessionId);
    }
    return 0;
}

5 ~> SDK 设计思路总结

  1. 将编译完成的静态库配合头文件、CMake 脚本、使用文档托管至代码仓库,降低第三方使用者接入成本。
  2. 外观模式:ChatSDK作为外观入口,隔离内部复杂的会话管理、模型适配、持久化逻辑。
  3. 面向接口编程:LLMProvider抽象接口隔离不同大模型的差异,新增模型只需要新增子类实现,上层调用无需修改。
  4. 会话与持久化分离:业务会话内存对象与 SQLite 磁盘存储解耦。
  5. 同时支持云端 API 模型、本地 Ollama 模型;兼容一次性全量应答、流式分片应答两种交互模式。

结尾

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

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ### 艾莉丝努力练剑 C/C++ & Linux 底层探索者 | 一个正在努力练剑的技术博主 *** ** * ** *** 👀 【关注】 跟随我一起深耕技术领域,见证每一次成长。 ❤️ 【点赞】 让优质内容被更多人看见,让知识传递更有力量。 ⭐ 【收藏】 把核心知识点存好,在需要时随时查、随时用。 💬 【评论】 分享你的经验或疑问,评论区一起交流避坑! 不要忘记给博主"一键四连"哦! "今日练剑达成!" "技术之路难免有困惑,但同行的人会让前进更有方向。" |

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

往期回顾:

【AI大模型接入SDK】ChatSDK:CMake构建静态库完整实现

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

相关推荐
2501_933670793 小时前
2027校招销售运营面试:大数据管理与应用专业如何拆解漏斗分析
大数据·人工智能·面试
198******126349 小时前
2026深度解读:Work Agent长程任务的技术机制与落地能力
人工智能
爱倒腾的老唐9 小时前
0、元器件——电阻
学习
寻道码路9 小时前
大模型工程化实战(十六):政企国产化避坑——合规/信创名录/私有化运维/国产硬件适配/原厂支持这五道关怎么过
大模型·agent·信创·rag·ai工程化·国产化替代·政企ai落地
老金带你玩AI9 小时前
别只让AI解释,让它做个你能看懂的东西
人工智能
iffy110 小时前
Deepseek hardness 桌面版 + ollama
人工智能
Xiaofeng369310 小时前
知漫剧入门科普:一站式工作台一句话生成漫剧
人工智能
“AI国潮设计-小江”10 小时前
《Python+SDXL实战:用ControlNet精准控制“英歌舞翻糖吐司”构图,附批量生成脚本》
开发语言·人工智能·python·prompt·aigc
程序喵大人10 小时前
【C++入门】编译链接模型 - 01 一个 C++ 程序是怎样变成可执行文件的
开发语言·c++·编译链接模型