【C++ AI 大模型接入 SDK】 - 项目介绍与 AI 知识科普
大家好我是Halcyon.平安欢迎文末添加好友交流共同进步一、项目介绍核心功能二、AI 基础知识科普2.1 什么是大语言模型LLM2.2 API 调用方式2.3 全量响应 vs 流式响应2.4 SSEServer-Sent Events2.5 Ollama — 本地运行大模型三、项目架构总览3.1 整体模块3.2 模块依赖关系3.3 核心设计模式四、核心技术栈五、开发环境一、项目介绍本项目从零实现一个C AI 大模型接入 SDK统一封装多家大语言模型LLM的 API 调用让使用者只需一套接口就能对接 DeepSeek、ChatGPT、Gemini、Ollama 等不同模型。核心功能多模型支持统一接口接入 DeepSeek、ChatGPTGPT-4o-mini、Gemini、Ollama 本地模型会话管理支持创建、删除会话自动维护上下文历史消息数据持久化使用 SQLite 存储会话和消息程序重启不丢失全量/流式响应既支持一次性返回完整回复也支持 SSE 流式逐字输出基于 SDK 的聊天服务器封装完 SDK 后基于它实现一个完整的 Web 聊天应用二、AI 基础知识科普在动手写代码之前先了解几个核心概念。2.1 什么是大语言模型LLM大语言模型Large Language Model是一种基于深度学习的 AI 模型通过海量文本数据训练能够理解和生成人类语言。常见的 LLM 包括模型提供方特点GPT-4o-miniOpenAI轻量级、高性价比适合日常对话DeepSeekDeepSeek中文优化适合日常问答与创作GeminiGoogle急速响应适合快速交互场景Llama / QwenMeta/阿里开源模型可通过 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 流式响应方式说明适用场景全量响应等模型生成完毕一次性返回完整内容批处理、后台任务流式响应模型逐字生成通过 SSEServer-Sent Events实时推送聊天对话、打字效果流式响应的体验更好——用户不用干等能实时看到模型在打字。本项目两种方式都支持。2.4 SSEServer-Sent EventsSSE 是流式响应的核心协议格式如下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 DataManagerSQLite 数据持久化 ↓ SessionManager会话管理依赖 DataManager ↓ ChatSDK门面类组合 LLMManager SessionManager ↓ ChatServer基于 SDK 的 Web 聊天应用3.3 核心设计模式本项目运用了两个关键设计模式策略模式Strategy PatternLLMProvider是抽象基类定义统一的模型操作接口。每个具体的模型DeepSeek、ChatGPT、Gemini、Ollama都是一个子类实现各自的请求构造和响应解析逻辑。上层代码只依赖抽象接口不关心底层是哪个模型。LLMProvider抽象基类 ├── initModel() ├── sendMessage() └── sendMessageStream() ↑ ┌─────────┼──────────┬──────────────┐ │ │ │ │ DeepSeek ChatGPT Gemini Ollama Provider Provider Provider Provider门面模式Facade PatternChatSDK是门面类对外暴露简洁的高层接口初始化模型、创建会话、发送消息内部组合了LLMManager管模型和SessionManager管会话使用者无需了解内部细节。四、核心技术栈技术用途C17智能指针、auto、lambda、结构化绑定等cpp-httplib轻量级 HTTP 客户端/服务端库JsonCppJSON 序列化与反序列化SQLite3嵌入式数据库存储会话和消息spdlog高性能日志库gflags命令行参数与配置文件解析CMake构建工具五、开发环境工具说明操作系统LinuxUbuntu 22.04编辑器VSCode编译器g需支持 C17构建工具CMake调试器gdb环境搭建将在下一篇中详细讲解。