在这里插入图片描述

大家好,我是Halcyon.平安

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

在这里插入图片描述

一、项目介绍

本项目从零实现一个 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 Google 急速响应,适合快速交互场景
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

环境搭建将在下一篇中详细讲解。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐