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

这两天一直在研究这个话题,踩了几个坑,把遇到的东西整理成文,供有需要的朋友参考。

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

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

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


🎬 艾莉丝的简介:

这篇目录

2 ~> ChatSDK 获取、编译与安装 3 ~> SDK 内部类架构与 UML 关系 4 ~> ChatSDK API 使用说明 4.2 ChatSDK 公开成员函数4.3 完整可运行示例(DeepSeek 流式对话命令行 Demo) 5 ~> SDK 设计思路总结结尾

1 ~> ChatSDK 整体介绍

1.1 项目概述

  • ChatSDK 是基于 C++ 实现的大模型接入静态库,编译产物为静态库libai_chat_sdk.a。
  • 项目源码仓库:https://gitee.com/zhibite-edu/ai-model-acess-tech

1.2 支持模型列表

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

1.3 核心能力

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

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

2.1 获取源码

git clone https://gitee.com/zhibite-edu/ai-model-acess-dev.git

2.2 源码目录结构

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 编译安装流程

#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 头文件引入

#include

4.1.2 CMake 链接配置

target_link_libraries(你的项目目标 PRIVATE ai_chat_sdk)

4.2 ChatSDK 公开成员函数

函数签名功能说明参数说明返回值bool initModels(const std::vector<std::shared_ptr<Config>>& configs)批量初始化模型configs:多个模型配置智能指针集合初始化成功 true,失败 falsestd::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删除成功 truestd::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)

```

include


include


include


include


include


include

/
@brief 封装流式消息发送交互函数
@param chatSDK ChatSDK实例引用
@param sessionId 当前会话ID
/
void sendMessageStreamDemo(ai_chat_sdk::ChatSDK& chatSDK, const std::string& sessionId)
{
std::cout


以上就是这次整理的全部内容,希望对你有所启发。如果有不同见解,欢迎在评论区交流讨论。

评论 (0)

暂无评论