
🔥小叶-duck:个人主页
❄️个人专栏:《Data-Structure-Learning》《C++入门到进阶&自我学习过程记录》
《Linux系统从入门到实践》《Linux网络从入门到实践》
✨未择之路,不须回头
已择之路,纵是荆棘遍野,亦作花海遨游
目录
[1.1 项目目标](#1.1 项目目标)
[2.1 模型(Model)](#2.1 模型(Model))
[2.2 大模型(Large Model)](#2.2 大模型(Large Model))
[2.3 大语言模型(Large Language Model, LLM)](#2.3 大语言模型(Large Language Model, LLM))
[2.3.1 本质原理](#2.3.1 本质原理)
[2.3.2 三大核心局限性](#2.3.2 三大核心局限性)
[2.3.3 能力边界](#2.3.3 能力边界)
[2.4 提示词(Prompt)工程](#2.4 提示词(Prompt)工程)
[2.4.1 提示词设计三要素](#2.4.1 提示词设计三要素)
[2.5 上下文(Content)机制](#2.5 上下文(Content)机制)
[2.5.1 上下文的作用](#2.5.1 上下文的作用)
[2.5.2 上下文窗口](#2.5.2 上下文窗口)
[2.6 Token 机制与计费](#2.6 Token 机制与计费)
[2.6.1 Token 的基本概念](#2.6.1 Token 的基本概念)
[2.6.2 Token 与字符的换算关系](#2.6.2 Token 与字符的换算关系)
[2.6.3 输入 Token 与输出 Token](#2.6.3 输入 Token 与输出 Token)
[2.6.4 计费方式](#2.6.4 计费方式)
[三、为什么学习通过 API 使用大模型](#三、为什么学习通过 API 使用大模型)
[4.1 项目目标](#4.1 项目目标)
[4.2 项目架构](#4.2 项目架构)
[4.2.1 架构分层说明](#4.2.1 架构分层说明)
[4.2.2 项目所使用第三方库与工具](#4.2.2 项目所使用第三方库与工具)
前言
大模型应用如今遍地开花,多数开发者习惯使用现成 Python SDK 调用 LLM 接口,但在高性能后端、嵌入式等场景,C++ 生态缺少轻量可控的接入方案。很多同学只会直接调用 HTTP 接口,对流式输出、上下文管理、Token 计费等底层逻辑一知半解。
本项目《C++ 项目:手写大模型接入 SDK》,从实战角度从零搭建一套 C++ 大模型 SDK。在本篇文章,我们先梳理大模型相关基础概念,理解 LLM、Prompt、上下文窗口、Token 机制等核心名词,再讲解 API 接入的意义,最后拆解项目整体架构、分层模块与依赖选型。
一、项目背景
从 1994 年我国接入互联网开始,国内互联网先后走过 PC 互联网、移动互联网两个阶段。移动互联网时代积累了海量数据,硬件算力也得到大幅提升,人工智能领域在技术储备充足的基础上,随着 ChatGPT 的发布迎来爆发式发展。
在下面这条时间线,我们可以直观看到 AI 技术演进的完整历程:
- 1950s:人工智能概念诞生,开启 AI 领域的探索;
- 2012 年:AlexNet 问世,拉开深度学习革命的序幕;
- 2017 年:Transformer 模型架构诞生,成为后续大模型的技术根基;
- 2020 年:GPT-3 面世,展现出大模型的 "涌现能力";
- 2022 年底:ChatGPT 正式发布,在全球掀起大模型体验热潮;
- 2023 年:AI 应用进入现象级爆发阶段,资本与产业大规模入场。
时至今日,各类大模型、智能体应用层出不穷,AI 逐步走进普通人的日常生活。大量厂商都在落地 AI 相关业务。作为 C++ 开发程序员,不能仅仅停留在直接使用 ChatGPT、DeepSeek 这类现成大模型产品,更需要掌握大模型应用底层技术,学会把大模型能力接入自研程序,让 AI 服务于业务,提升项目开发效率。
本项目:C++ AI 大模型接入 SDK。就是带领大家从底层学习大模型接入技术,也是我们进行大模型二次开发的第一步。
1.1 项目目标
- 掌握大模型相关基础理论知识
- 学会研读官方文档,掌握大模型 API 接口的调用方式
- 理解并落地 C++ 远程接入大模型的思路与代码实现
- 理解并落地 C++ 本地接入大模型的思路与代码实现
- 独立开发一套语言聊天类大模型应用
二、名词解释
正式进入项目编码之前,我们先统一梳理本项目涉及的 AI 相关基础名词。这些概念是看懂大模型 API 文档、设计 C++ 接入 SDK 的基础。
2.1 模型(Model)
AI 领域所说的模型,本质是一套从海量数据中归纳规律、用于预测输出的复杂数学函数,拥有数量庞大的参数与复杂的内部计算逻辑,是承载人工智能能力的核心载体。
可以通俗类比为学说话的婴幼儿:
- **信息输入:**通过听觉、视觉等多种渠道接收海量现实信息,包含日常对话、物品认知、行为示范;
- **学习阶段:**持续接收信息,总结事物、语言之间的关联规则,建立起一套属于自身的认知逻辑;
- **结果输出:**收到外部指令后,依靠学习总结的规律给出对应的反馈。
注意:"模型" 是跨学科通用词汇。本文档后续所有提到的模型,都特指机器学习 / 深度学习 AI 模型,和物理模型、数据模型、实体实物模型不是同一概念。
2.2 大模型(Large Model)
大模型 是参数量、训练数据体量达到极高规模的复合型 AI 模型 ,具备跨领域、多任务处理能力,能够同时处理文本、语音、图像等多种类型信息,相当于AI 领域的全能型系统。
**"大"**主要体现在三点:
- **参数规模庞大:**参数达到百亿至千亿级别,远远超过早期传统 AI 模型。典型例子 GPT-3 拥有 1750 亿参数,而早期传统 AI 模型参数往往不足百万。
- **训练数据体量巨大:**训练素材覆盖全网文本、专业书籍、论文、开源代码、音视频等全维度资料,数据量级可达 PB 级别。
- **算力与能耗极高:**训练阶段需要大规模算力集群支撑,能源消耗巨大。行业估算 GPT-3 单次训练耗电量约 190 万度,这相对于够 5000 个家庭1年的电量使用了,但仅作为量级参考,并非精确数值。
这类多模态大模型,既能识别图片内容、听懂语音指令,也能完成文本生成、逻辑推理,不像传统 AI 模型,只能解决单一任务。
2.3 大语言模型(Large Language Model, LLM)
大语言模型 是专门以人类自然语言作为核心处理对象 的一类大模型。它通过学习海量文本,掌握词汇之间的统计关联,从而完成对话、文案写作、翻译、代码生成等各类语言任务。
2.3.1 本质原理
大语言模型底层依靠概率预测下一个词 的机制工作:基于 Transformer 神经网络,学习海量文本里词汇的上下文关系;输入一段文本序列后,模型会挑选统计概率最高的词语作为接续输出。
模型本身并不会真正理解语义,所有输出结果,都只是基于文本学到的统计规律。
2.3.2 三大核心局限性
- 幻觉(Hallucination):能够生成语法通顺、看起来逻辑合理,但完全不符合客观事实的虚假内容,也就是无依据的错误输出。
- 无真正理解能力:模型只学到文本词语之间的统计关系,不理解现实世界的客观规律,没有感官体验与主观意识。
- 偏见与安全风险:训练数据中自带的人类社会偏见,会被模型继承甚至放大;同时存在生成违规、有害内容的安全隐患。
2.3.3 能力边界
- 模型只能处理被符号化编码后的信息,无法直接感知现实世界里光、电、力这类物理量,只能阅读描述这些现象的文字;它仅仅学会 "疼痛""颜色" 这类词汇的文本用法,不存在真实的感官体验;没有见过的、无规律乱码或者不在训练集内的加密内容,无法识别处理。
- 处理代码、数学公式、图像等非语言任务时,本质是把这些内容转换成模型能读懂的语义符号,并不是真的理解这个领域:
- **代码:**将编程语言当作特殊格式文本,学习语法和文本关联;
- **数学公式:**把数学符号看作压缩后的自然语言,依托海量论文文本学习推导逻辑;
- **多模态内容:**依靠编码器,把图片、音频转为特征向量,作为隐式文本送入 LLM,模型处理的依旧是语义信息,不是原始感官信号。
- **存在知识盲区:**无法凭空生成没有被文本记录的物理常识,只能复现文本中记载的知识,不能像人类依靠物理直觉,推导出全新结论。
主流代表模型:
GPT 系列、Gemini 系列、Claude 系列、DeepSeek、阿里通义千问 Qwen 系列、豆包系列等。
2.4 提示词(Prompt)工程
提示词就是用户传递给大模型的任务指令文本,是人与大模型交互的核心载体。提示词描述的清晰度、完整度,会直接决定模型输出结果的质量。
2.4.1 提示词设计三要素
- 角色设定(Role) 给模型指定明确身份、专业背景与立场,用来约束输出的风格、视角与专业深度。 示例:
bash
你是一个拥有十年以上C++后端开发经验的架构师,请帮我设计类似微信的聊天软件
- 任务描述(Task) 清晰、具体地说明需要模型完成的核心任务,避免模糊笼统的表述。 示例:
bash
用200字总结导致拖延症的核心原因
- 格式约束(Format) 规定输出的结构、篇幅、展示形式,统一返回结果的标准,方便程序解析。 示例:
bash
请按要点分条列出,每条不超过15字
2.5 上下文(Content)机制
2.5.1 上下文的作用
大模型之所以能进行多轮对话,关键在于它会在一次会话中维护历史消息。用户后续输入时,模型会结合前文理解当前意图,而不是把每句话都当成独立请求处理。
可以把上下文理解为模型的 "短期记忆":对话越长、信息越丰富,模型越有可能给出连贯、准确的回复,但同时也会消耗更多 Token。
2.5.2 上下文窗口
模型能够处理的上下文长度并不是无限的,而是存在一个上限,这个上限通常称为上下文窗口。一旦对话内容超过窗口限制,较早的历史记录就可能被截断或丢弃。
不同模型的上下文窗口差异很大,从几千 Token 到上百万 Token 不等。具体开发时,应以官方文档为准。
2.6 Token 机制与计费
2.6.1 Token 的基本概念
Token 是大模型处理文本的基本单位,可以直观理解为字、词或词的一部分。模型并不会直接按汉字个数计算,而是先把文本转换为 Token,再进行推理。
无论是输入问题,还是模型输出结果,都会消耗 Token。因此,Token 不仅关系到模型能处理多长的上下文,也直接影响接口调用费用。
2.6.2 Token 与字符的换算关系
不同模型使用的分词器不同,中文、英文、数字和符号转成 Token 的比例也会不同。下面以 DeepSeek 官方说明为例。
一般参考比例为:
- 1 个英文字符 ≈ 0.3 Token
- 1 个中文字符 ≈ 0.6 Token
需要注意,这个比例只是估算。实际项目中,真正消耗了多少 Token,应以接口返回结果中的 usage 字段为准。
2.6.3 输入 Token 与输出 Token
大模型接口通常会把 Token 消耗分为两类:
- 输入 Token:用户发送给模型的消息、历史上下文、系统提示词等;
- 输出 Token:模型生成返回内容所消耗的 Token。
计费时,输入和输出一般会分别统计。部分厂商还会对输入 Token 做更细粒度区分,例如缓存命中与未命中,单价不同。
2.6.4 计费方式
大模型 API 通常按 Token 用量计费,基本公式为:
扣费金额 = Token 消耗量 × 对应单价
也就是说,对话越复杂、上下文越长、模型输出越多,费用通常越高。
以 DeepSeek 官方页面展示的计费信息为例:
| 计费项 | 单价(每百万 tokens) |
|---|---|
| 输入(缓存命中) | 0.5 元 |
| 输入(缓存未命中) | 4 元 |
| 输出 | 12 元 |

三、为什么学习通过 API 使用大模型
市面上已经有 DeepSeek、ChatGPT、Gemini 这类开箱即用的大模型网页服务,直接打开网页对话就能使用,那我们为什么还要学习通过 API 的方式手动接入大模型?这里有几个核心原因:
- 深入掌握大模型知识,提升个人竞争力直接使用网页版大模型,就好比开车,只需要掌握操作方式就能到达目的地;而调用 API 接入大模型,相当于学习汽车原理、保养与改装。学会 API 接入之后,你不再只是大模型产品的使用者,而是可以创造属于自己的大模型应用,能根据业务需求定制专属服务。
- 自主构建专属应用API 能够把大模型的 "大脑" 和我们自己写的程序、网站、数据库打通,实现普通网页对话机器人做不到的定制功能。比如开发智能编程助手、自动化处理报表与邮件的工作流,或是面向法律、医疗、教育等垂直行业,开发专属问答工具。
- 助力职业发展
现在越来越多企业正在将大模型能力集成到自身产品中,AI 原生应用开发相关岗位持续增多。掌握 API 集成大模型的开发能力,会在求职时拥有更强竞争力,跟上行业发展趋势。 - 支撑学术科研对于做 AI 相关课题的研究者、考研学生,可以借助 API 接入能力,快速搭建定制化的大模型实验应用,完成数据采集、分析,验证自己的研究猜想。
总而言之,对于我们后端开发从业者来说,学习 API 方式接入大模型有很高的实践价值。不仅可以加深你对大模型原理的理解,也能为后续项目开发、求职就业打下扎实基础。
四、项目目标及架构
4.1 项目目标
本项目目标:
从零手写大模型接入 SDK,并基于 SDK 实现网页版 AI 聊天助手。项目最终实现的核心功能清单:
- 获取会话列表
- 新建会话
- 获取支持模型
- 发送消息
- 获取指定会话的历史聊天记录
- 删除会话
4.2 项目架构

4.2.1 架构分层说明
- **应用层(ChatServer):**面向前端网页,提供 HTTP 接口,接收浏览器发来的聊天请求,调用底层 ChatSDK 完成业务逻辑,是用户直接交互的服务。
- 核心业务层(ChatSDK): 也就是我们核心手写的大模型接入 SDK,包含三大模块:
- **大模型管理(LLMManager + 各类模型 Provider):**统一封装不同厂商模型接口,包含 DeepSeek、ChatGPT、Gemini、Ollama 本地模型,对外提供统一调用接口,新增模型只需要新增 Provider 即可。
- **会话管理(SessionManager):**维护对话会话,管理多轮对话上下文,支持会话的增删查改。
- **数据存储层(SQLite):**使用轻量嵌入式数据库持久存储会话信息、历史聊天记录,程序重启后对话记录不会丢失。
- **三方服务:**分为云端大模型服务(DeepSeek、ChatGPT、Gemini)和本地 Ollama 模型服务。ChatSDK 通过 HTTP 网络请求,把用户消息转发给对应的模型服务,拿到模型返回结果后,逐层向上返回给应用层,最终给到网页前端。
4.2.2 项目所使用第三方库与工具
| 序号 | 第三方库 / 工具 | 描述 |
|---|---|---|
| 1 | cpp-httplib | 轻量级 C++ HTTP 客户端与服务端库,用于搭建 web 服务、发起 http 请求 |
| 2 | spdlog | 高性能 C++ 日志库,用于项目日志输出 |
| 3 | jsoncpp | C++ 的 json 序列化、反序列化库,用来处理 API 交互的 json 报文 |
| 4 | sqlite | 轻量级嵌入式数据库,持久化存储会话、聊天记录 |
| 5 | gflags | 命令行参数解析库,方便程序启动时配置参数 |
| 6 | gtest | C++ 单元测试框架,对 SDK 各个模块做单元测试 |
| 7 | curl | HTTP 网络请求工具,辅助调试网络接口 |
| 8 | apifox | API 接口调试工具,用于前期接口测试 |
| 9 | CMake | 跨平台项目构建工具,统一项目编译流程 |
| 10 | ollama | 本地部署大模型工具,可在本机运行各类开源大模型 |
结束语
到这里,本项目的理论铺垫与架构设计部分就全部完成了。我们从大模型基础概念入手,厘清了 LLM、Prompt、上下文、Token 计费等核心知识,也分析了通过 API 调用大模型的价值,最终完成整套 C++ 大模型接入 SDK 的架构分层与第三方库选型。
理论只是基础,真正的考验落在代码实现环节。接下来我们就会进入编码实战,一步步封装 HTTP 请求、对接大模型接口、处理流式输出、实现会话上下文管理。