【C++ AI 大模型接入 SDK】 - 项目介绍与 AI 知识科普

欢迎文末添加好友交流,共同进步!

一、项目介绍
本项目从零实现一个 C++ AI 大模型接入 SDK,统一封装多家大语言模型(LLM)的 API 调用,让使用者只需一套接口就能对接 DeepSeek、ChatGPT、Gemini、Ollama 等不同模型。
核心功能
- 多模型支持:统一接口接入 DeepSeek、ChatGPT(GPT-4o-mini)、Gemini、Ollama 本地模型
- 会话管理:支持创建、删除会话,自动维护上下文历史消息
- 数据持久化:使用 SQLite 存储会话和消息,程序重启不丢失
- 全量/流式响应:既支持一次性返回完整回复,也支持 SSE 流式逐字输出
- 基于 SDK 的聊天服务器:封装完 SDK 后,基于它实现一个完整的 Web 聊天应用
二、AI 基础知识科普
在动手写代码之前,先了解几个核心概念。
2.1 什么是大语言模型(LLM)
大语言模型(Large Language Model)是一种基于深度学习的 AI 模型,通过海量文本数据训练,能够理解和生成人类语言。常见的 LLM 包括:
| 模型 | 提供方 | 特点 |
|---|---|---|
| GPT-4o-mini | OpenAI | 轻量级、高性价比,适合日常对话 |
| DeepSeek | DeepSeek | 中文优化,适合日常问答与创作 |
| Gemini | 急速响应,适合快速交互场景 | |
| Llama / Qwen | Meta/阿里 | 开源模型,可通过 Ollama 本地部署 |
2.2 API 调用方式
大多数 LLM 提供商通过 HTTP API 对外提供服务,核心流程:
客户端 模型服务器
│ │
│── POST /v1/chat/completions ──────→ │ 发送请求(含消息历史)
│ Header: Authorization: Bearer xxx │
│ Body: {"model":"deepseek-chat", │
│ "messages":[...]} │
│ │
│←── HTTP 200 + JSON响应 ──────────── │ 返回模型生成的回复
│ {"choices":[{"message": │
│ {"content":"你好!"}}]} │
简单来说,就是向服务器发一个 HTTP POST 请求(带 API Key 和消息内容),服务器返回模型生成的文本。
2.3 全量响应 vs 流式响应
| 方式 | 说明 | 适用场景 |
|---|---|---|
| 全量响应 | 等模型生成完毕,一次性返回完整内容 | 批处理、后台任务 |
| 流式响应 | 模型逐字生成,通过 SSE(Server-Sent Events)实时推送 | 聊天对话、打字效果 |
流式响应的体验更好——用户不用干等,能实时看到模型在"打字"。本项目两种方式都支持。
2.4 SSE(Server-Sent Events)
SSE 是流式响应的核心协议,格式如下:
data: {"choices":[{"delta":{"content":"你"}}]}
data: {"choices":[{"delta":{"content":"好"}}]}
data: {"choices":[{"delta":{"content":"!"}}]}
data: [DONE]
每条数据以 data: 开头,用空行 \n\n 分隔。最后一个 data: [DONE] 标记流结束。
2.5 Ollama — 本地运行大模型
Ollama 是一个本地大模型运行框架,无需联网即可在本地运行开源模型(如 Qwen、Llama 等)。
Ollama 本地服务(默认 http://localhost:11434)
│
├── POST /api/chat ← 聊天接口(本项目使用)
└── POST /api/generate ← 文本生成接口
与云端 API 的区别:Ollama 不需要 API Key,模型在本地运行,数据不出本机。
三、项目架构总览
3.1 整体模块
┌────────────────────────────────────────────────┐
│ ChatServer(智能聊天助手应用) │
│ HTTP 路由 + Web 前端 │
├────────────────────────────────────────────────┤
│ ChatSDK(门面类) │
│ initModels / sendMessage / Session │
├──────────────┬──────────────┬──────────────────┤
│ SessionMgr │ LLMManager │ │
│ 会话管理 │ 模型管理器 │ │
├──────────────┼──────────────┤ │
│ DataManager │ LLMProvider │ │
│ SQLite持久化 │(抽象基类) │ │
├──────────────┴──────────────┼──────────────────┤
│ DeepSeekProvider │ │
│ ChatGPTProvider │ OllamaProvider │
│ GeminiProvider │ │
├─────────────────────────────┼──────────────────┤
│ myLog(日志模块) │ │
└─────────────────────────────┴──────────────────┘
3.2 模块依赖关系
myLog(日志模块,最底层,无业务依赖)
↓
common.h(公共数据结构:Message、Config、Session 等)
↓
LLMProvider(抽象基类,定义模型操作接口)
↓
DeepSeekProvider / ChatGPTProvider / GeminiProvider / OllamaLLMProvider(具体模型实现)
↓
LLMManager(模型管理器,管理所有 Provider)
DataManager(SQLite 数据持久化)
↓
SessionManager(会话管理,依赖 DataManager)
↓
ChatSDK(门面类,组合 LLMManager + SessionManager)
↓
ChatServer(基于 SDK 的 Web 聊天应用)
3.3 核心设计模式
本项目运用了两个关键设计模式:
策略模式(Strategy Pattern):
LLMProvider 是抽象基类,定义统一的模型操作接口。每个具体的模型(DeepSeek、ChatGPT、Gemini、Ollama)都是一个子类,实现各自的请求构造和响应解析逻辑。上层代码只依赖抽象接口,不关心底层是哪个模型。
LLMProvider(抽象基类)
├── initModel()
├── sendMessage()
└── sendMessageStream()
↑
┌─────────┼──────────┬──────────────┐
│ │ │ │
DeepSeek ChatGPT Gemini Ollama
Provider Provider Provider Provider
门面模式(Facade Pattern):
ChatSDK 是门面类,对外暴露简洁的高层接口(初始化模型、创建会话、发送消息),内部组合了 LLMManager(管模型)和 SessionManager(管会话),使用者无需了解内部细节。
四、核心技术栈
| 技术 | 用途 |
|---|---|
| C++17 | 智能指针、auto、lambda、结构化绑定等 |
| cpp-httplib | 轻量级 HTTP 客户端/服务端库 |
| JsonCpp | JSON 序列化与反序列化 |
| SQLite3 | 嵌入式数据库,存储会话和消息 |
| spdlog | 高性能日志库 |
| gflags | 命令行参数与配置文件解析 |
| CMake | 构建工具 |
五、开发环境
| 工具 | 说明 |
|---|---|
| 操作系统 | Linux(Ubuntu 22.04) |
| 编辑器 | VSCode |
| 编译器 | g++(需支持 C++17) |
| 构建工具 | CMake |
| 调试器 | gdb |
环境搭建将在下一篇中详细讲解。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)