大模型技术栈全景解析:从分词、分布式训练到 PEFT 与 RAG/Agent 的落地路径(以 Langchain-Chatchat 为例)
本篇技术指南围绕“大模型技术栈-算法与原理”这一知识框架展开,系统梳理从 Tokenizer、位置编码、注意力机制、分布式训练、PEFT 参数高效微调、模型压缩(剪枝/量化/蒸馏)、推理优化、Embedding 模型分类学、上下文扩展,到 Prompt Engineering 与 RAG/Agent 应用共九大主题。读完后,你将获得一张完整的 LLM 技术栈地图,并能结合 Langchain-Chatchat 仓库中的 Embedding 配置、混合检索器、Agent 注册表等真实源码,理解这些算法在 RAG 应用工程中如何被具体使用。
一、Tokenizer:文本进入模型的入口
大模型处理的第一步是把文本切分为 Token。按粒度划分,Tokenization 方法可分为三类:
- Word-level(词级):以完整单词为单元,词表大、对未登录词(OOV)不友好;
- Char-level(字符级):以字符为单元,无 OOV 问题但序列过长;
- Subword-level(子词级):兼顾两者,是当前主流,主要包括:
- BPE(Byte Pair Encoding):统计语料中相邻 token 对的共现频率,迭代合并最高频对,逐步扩大词表;
- WordPiece:与 BPE 思路相近,但每次选择能最大似然增益语言的子词;
- UnigramLM:从大词表出发,迭代删除对似然贡献最小的词元;
- SentencePiece:在字符序列上运行 BPE/Unigram,支持多语言且不需要预分词;
- ByteBPE:对字节序列做 BPE,从根源上消除 OOV,被 LLaMA、ChatGLM 等模型广泛采用。
Tokenization 方案直接影响词表大小、序列长度与显存占用,是选择开源模型时首先要确认的底层细节之一。
二、位置编码:让自注意力“知道顺序”
自注意力本身是置换不变的,位置编码用于把词序信息注入模型。按建模方式可分为:
绝对位置编码
- RoPE(旋转位置编码):对 Q/K 向量按位置做旋转变换,使注意力得分天然包含相对位置信息,是 LLaMA、Qwen 等主流 LLM 的默认方案;
- ALiBi:不给输入加编码,而是在注意力打分矩阵上叠加与距离成正比的线性偏置,让模型“天然”偏好近处 token,同时对训练长度外的外推更稳健。
相对位置编码
- Transformer-XL:用可学习偏置显式建模相对距离;
- T5/TUPE:在 T5 中同时引入绝对与相对位置信息;
- DeBERTa:通过 disentangled attention 显式区分 token 之间的内容关系与位置关系。
其他
还包括 sinusoidal 绝对编码等经典方案,属于“其他位置编码”的范畴。位置编码的选择与后文“上下文扩展”一节强相关——扩展上下文长度本质上就是在修改位置编码的外推行为。
三、注意力机制及其效率改进
标准 Scaled Dot-Product Attention 的时间/显存复杂度随序列长度平方增长,改进方向主要有:
- 稀疏注意力:通过滑窗、块稀疏等模式限制每个 token 可见的范围,把 O(n²) 降到近似 O(n);
- FlashAttention:不改变注意力数学形式,而是通过 IO 感知分块(tiling)与 kernel 融合,把 KV 中间结果留在 SRAM 中完成计算,显著降低 HBM 访问,从而同时加速前向/反向并节省显存。它是本文“推理优化”章节中 PagedAttention 等技术的常客搭档。
四、分布式训练:数据并行与模型并行
4.1 数据并行:DDP / FSDP / ZeRO
DDP(Distributed Data Parallel) 中每张 GPU 持有完整模型副本,反向后对梯度做 AllReduce;FSDP(Fully Sharded Data Parallel) 则把参数、梯度、优化器状态全部分片。两者背后的通用思想由 ZeRO(Zero Redundancy Optimizer) 系统化表达,按“分片什么”分为三个级别(此部分完整继承原文档的通信流程描述):
Model State(模型状态分片)
- ZeRO-1(Optimizer State):将 optimizer state 切成若干份,每块 GPU 各自维护一份。每块 GPU 上仍存一份完整参数 W,做完一轮 forward 和 backward 后各得一份梯度;对梯度做一次 AllReduce(reduce-scatter + all-gather) 得到完整梯度 G;由于每块 GPU 只保管部分 optimizer states,只能更新对应的 W,随后对 W 做一次 All-Gather。
- ZeRO-2(Gradient + Optimizer):每个 GPU 维护一块梯度。每块 GPU 存完整参数 W,forward/backward 后算得一份完整梯度,对梯度做一次 Reduce-Scatter,保证每个 GPU 上所持的那块梯度即为聚合梯度;每块 GPU 用自己的 O 和 G 更新相应的 W;更新完毕后每块 GPU 各持有一块更新完的 W,再对 W 做一次 All-Gather 将别的 GPU 算好的 W 同步过来。
- ZeRO-3(Parameter + Gradient + Optimizer):每个 GPU 只维护一块模型状态。forward 时对 W 做 All-Gather 取回分布在别处的 W 拼成完整 W,forward 完立刻抛弃非自己维护的部分;backward 时同样先 All-Gather 完整 W,backward 完立刻释放;得到完整梯度 G 后做 Reduce-Scatter 只聚合自己维护的那部分,聚合完立即丢弃其余 G;最后用自己维护的 O 和 G 更新 W——因为只维护部分 W,无需再对 W 做 AllReduce。
一句话记忆:级别越高,分片越彻底,显存越省,但通信时机与次数越复杂;ZeRO-1/2/3 分别对应“切优化器/切梯度/切参数”的递进。
Residual State(激活与临时缓冲的分片)
- Partitioned Activation Checkpointing(activation):每块 GPU 只维护部分 activation,需要时再从别处聚合。注意 activation 对显存的占用一般远高于模型本身,通信量也巨大。
- Constant Size Buffer(temporary buffer):一方面提升带宽利用率——GPU 数量上升时通信次数增多、单次通信量下降,数据切片太小会吃不满带宽,buffer 起到积攒数据到一定大小再通信的作用;另一方面使存储大小可控——每次通信前积攒的量是常量,便于预估训练的存储消耗与通信时间。
- Memory Defragmentation(unusable fragment):对碎片化存储重新整合出连续空间,防止“总量够但连续空间不够”导致的分配失败。
4.2 Offload:把模型状态搬下 GPU
- ZeRO-Offload:利用 forward/backward 计算密集、update 计算稀疏的特性,把与 W(fp16)、activation 相关的部分全部留在 GPU,把 update 相关的 W(fp32)、optimizer states(fp32)、gradients(fp16) 放进 CPU。其内部又分为 Offload Strategy(如何划分 GPU/CPU 承载哪些模型状态)与 Offload Schedule(如何调度计算与通信)两部分。
- ZeRO-Infinity:进一步把 offload 与 ZeRO 的结合从 ZeRO-2 延伸到 ZeRO-3,解决模型参数受限于单张 GPU 内存的问题;同时解决 ZeRO-Offload 在小 batch size 下效率低的问题;并在 CPU 内存之外进一步利用 NVMe 存储空间。
4.3 模型并行
- Tensor-wise parallelism:把一个层内的权重矩阵切到多卡,代表系统是 Megatron-LM;
- 流水线并行(Pipeline Parallelism):按层把模型切成多个 stage,微批次流水执行,代表工作有 GPipe(微批流水 + 激活全存)与 PipeDream(用 1F1B/CF 调度解决气泡与显存矛盾);
- Layer-wise parallelism:按层粒度做更细的放置;
- Sequence parallelism:在序列维度上切分,常与张量并行组合使用。
五、PEFT:参数高效微调
PEFT 的目标是在冻结主干的前提下用极少可训练参数适配下游任务。按“参数放在哪里”可分为 LoRA 类、Prompt 类、Adapter 类及其他。
5.1 LoRA 类
- LoRA:核心假设是权重更新矩阵 ΔW 是低秩的,用两个低秩矩阵 A、B 的乘积替代 ΔW,即 W' = W + BA,可训练参数量从 d×d 降到 d×(r+r)。
- QLoRA:在 4-bit NormalFloat(NF4)量化与双量化的主干上做 LoRA 训练,并引入分页优化器(paged optimizer)防止梯度检查点导致的内存峰值,使单卡微调大模型成为可能。
- AdaLoRA:用奇异值分解 P·Γ·Q 代替 AB,根据 loss 梯度评估 Γ 对角线值做重要性评分,动态把参数预算分配给权重矩阵——重要增量矩阵给高秩以捕捉任务细节,不重要矩阵降秩以防过拟合、省算力;并通过在训练损失中加惩罚项规范 P 与 Q 的正交性,避免显式 SVD 的高计算成本、稳定训练。
- IA3:不改变矩阵结构,而是学习向量对 attention 与 feedforward 模块的激活做缩放,注入位置与 LoRA 相同但参数更少。
- ReLoRA:针对“多轮 LoRA 叠加训练”场景,在合并与重启期间对优化器做部分重置,重启后的预热阶段将学习率设为 0,并采用锯齿状学习率调度。出发点在于:重启一个已完成的 LoRA 过程需要对优化器精细调整,否则模型重启后会立即与之前的优化方向分歧。
5.2 Prompt 类
- Prompt Tuning:在输入层末尾加一段可学习的 virtual token embedding;
- P-Tuning:在输入层加 embedding 之后接一个 LSTM 或 MLP 做平滑,缓解小模型上 prompt 训练不稳定;
- Prefix Tuning:在每一层 Transformer 的 attention 键值前加入可学习 prefix(经 MLP 映射),表达能力更强、训练更稳;
- P-Tuning v2:在每一层都加 embedding 段,证明对小模型同样有效,适用范围最广。
5.3 Adapter 类
- Adapter Tuning:在每个 Transformer 层插入两个 Adapter 模块(多头注意力投影之后、第二个 feed-forward 之后),冻结主干只训练 Adapter;
- Adapter Fusion:两阶段方法——先在多任务上各自训练 Adapter(知识提取),再冻结主干与各任务 Adapter,引入 Fusion 参数学习如何组合多个 Adapter 的知识,以参数门控方式提升目标任务表现;
- Adapter Drop:训练期随机丢弃 Adapter(类似 dropout),使模型学会“无 Adapter 也能工作”,从而在不影响任务性能的前提下动态移除 Adapter,减少参数量、提升训练与推理效率。
5.4 其他与混合式
- BitFit:最稀疏的微调——只更新 bias(或部分 bias)参数;
- MAM Adapter:FFN 层中并行 Adapter 与软提示(soft prompt)的组合,兼顾两者;
- UniPELT:用统一门控融合三种 PEFT:线性层实现门控,由 GP 控制 Prefix-tuning 开关、GL 控制 LoRA 开关、GA 控制 Adapter 开关,一套参数适配多种方法。
六、模型压缩:剪枝、量化与蒸馏
6.1 剪枝
- OBD(Optimal Brain Damage):利用二阶导数信息度量参数显著性,剪掉影响小的参数以降低复杂度、提高泛化;
- OBS(Optimal Brain Surgeon):OBD 只看 Hessian 对角线元素,OBS 利用 Hessian 的全局信息,从而捕获参数之间的相互影响;
- OBC(Optimal Brain Compression):不一次性对整个网络剪枝,而是分层做剪枝或量化,逐层最小化整体输出变化;
- ExactOBS:参数更新与代价评估不需要完整 Hessian,仅用与待剪参数所在行相关的 d_col×d_col 子矩阵,显著降低开销。
6.2 量化
- GPTQ:对 OBC 的改进:取消逐参数贪心,采用固定位置优化(一次前向中同时评估整行权重更新);配合分组量化实现并行加速;
- SpQR:核心思想是参数重要度极度不均衡——约 1% 的参数可能主导量化损失,保护它们即可保住大部分性能。做法:用一小批输入 X 计算每个参数 w_ij 量化前后的误差 s_ij,取 top 1% 作为重要参数,用稀疏矩阵单独保存并保持 fp16;同时观察到重要参数往往按行或列聚集,因此采用更小的 group size(8 或 16)而非 GPTQ 常用的 128;
- AWQ:在 SmoothQuant 基础上提出:针对 channel 维度找重要通道,依据是输入 X 与参数 W 的绝对值大小;寻找缩放比例 s,量化前 W 乘以 s、计算时 X 除以 s 以减小误差;s 分解为 S_x 与 S_w 两个值相乘,约束是 W 越大 s 越小、X 越大 s 越大,即把动态范围从激活“搬”到权重侧;
- OBC:同前,OBC 也是逐层压缩量化的理论源头(GPTQ 即建立在其“逐层最小化输出误差”的框架上);
- SmoothQuant:大模型下单个激活值变化范围大、难量化,而权重变化范围小、易量化。引入超参 α 把激活的动态范围按列缩放转移给权重,均衡二者难度;变换后再按 per-token 或 per-tensor 方式量化;
- LLM.int8():混合精度分解——把包含 Emergent Features(离群值)的少数维度分离出来做高精度(fp16)矩阵乘,其余部分 int8 量化,兼顾速度与精度;
- ZeroQuant:权重分组量化、激活按 token 量化;开发了高度优化的推理后端,消除量化/反量化算子的开销,在现代 GPU 上实现 INT8 Tensor 内核的延迟加速;并提出面向 INT4/INT8 混合精度的逐层知识蒸馏方法(LKD),逐层蒸馏、迭代次数极少甚至不访问原始训练数据。
量化的分类学(工程选型时的常用坐标轴):
| 维度 | 类别 | 含义 |
|---|---|---|
| 零点 | 对称量化 vs 非对称量化 | 量化区间是否均衡、零点是否为 0 |
| 缩放因子 | 静态量化 vs 动态量化 | 静态量化使用前有“calibrate”过程,缩放因子随校准数据分布确定;动态量化则按实际输入计算 |
| 对象 | Weights 量化 vs Activation 量化 | feature map 即每层网络的输入 tensor,对其量化就是常说的激活量化 |
| 粒度 | per-token / per-tensor / per-channel / per-group | per-token:激活中每个 token 对应的 tensor 共享量化系数;per-tensor:整个 tensor 一套 scale/zero-point;per-channel:权重每个输出通道一套(实践中 feature 仍整体共用 scale/zero-point,但每个 kernel 单独统计一组,注意是“每个 kernel”而非 kernel 的每个 channel);group-wise:多个 channel 合并为一组共用一组量化系数 |
6.3 蒸馏(layer reduction)
以层数压缩为代表的知识蒸馏,让小模型模仿大模型(或深层)的中间表征与输出,常用于推理成本约束下的模型瘦身。
七、推理优化:吞吐、延迟与调度
围绕线上服务指标,推理侧优化可以归纳为六个方向(完整继承原文档的清单):
- 吞吐量与显存优化:PagedAttention(把 KV cache 分页管理,消除碎片,是 vLLM 的核心机制)、Quantized KV Cache(KV 用低比特存储省显存)、MQA/GQA(多查询/分组查询注意力,压缩 KV 头数)、FlashAttention;
- 算子融合:把多个小算子合并成单 kernel,减少访存与启动开销;
- 延迟优化:No Padding——变长 batch 内不做 padding,避免为无效 token 付费;
- 调度优化:Dynamic Batching(动态攒批)、Async Serving(异步服务解耦)、Inflight Batching(把不同进度、不同长度、甚至不同请求的序列动态拼进同一 batch 一起解码);
- 量化:复用第六节的推理量化技术(W8A8、W4 等);
- 模型并行:Tensor Parallelism 将单层权重横向切分到多卡;
- 请求优化:传输层协议选型,如 RPC / gRPC / HTTP,gRPC 的长连接与流式能力更贴合 LLM 流式输出场景。
八、Embedding 模型:检索向量的分类学
RAG 的召回质量很大程度取决于 embedding 模型。原文档给出的分类学与代表模型如下。
8.1 三条分类轴
- 对称 vs 非对称 vs 混合:对称即 query:question、text:text 两侧同质(代表 Sentence-T5);非对称即 query:text 检索(代表 GTR);混合模型用指令区分任务类型(代表 Instructor);
- 训练范式:“对比学习+对比学习”(两阶段都是对比,代表 Sentence-T5、GTR、E5)与“自编码+对比学习”(预训练阶段做 masked 重建类自编码,代表 bge、RetroMAE);
- 基座结构:BERT-based(双向 encoder)与 LLM-based(decoder-only,如 PromptEOL+CSE+LLM 路线)。
8.2 BERT 句向量:CLS 与 mean pooling
BERT-CLS(取 [CLS] 位向量)与 Bert-mean(token 向量平均池化)是基于双向 encoder-decoder/encoder Transformer 的最基础句向量取法,后续大量方法可视为对“怎么取向量、怎么训练”的改进。
8.3 T5 系
- Sentence-T5:T5-encoder + mean pooling;采用无标注对比学习 + 有标注对比学习两阶段训练;
- Jina:以 T5 为基本架构,数据侧做去重、语言过滤、一致性过滤;采用并行化方法在多个数据集上训练,但设有一个关键约束——每个训练 batch 仅包含来自单一数据集的样本;训练使用三元组(anchor, entailment, contrastive);
- GTR:与 Sentence-T5 结构相同,但把 finetune 数据集从 NLI 换成检索相关数据,并利用 RocketQA 获取 hard negative;把对比学习改为双向对比学习——一个 batch 内有两个对比损失:一个以 query 为中心构建正负样本,另一个以 positive document 为中心构建正负样本。
8.4 SimCSE 及其衍生
- 无监督 SimCSE:对同一句话在训练时使用两次不同的 dropout mask,把两次编码结果视为互为正例的相似句对;“不相似句对”由 batch 内其余句子采样得到;
- 有监督 SimCSE:用 NLI(自然语言推理,判断 entailment/contradiction/neutral)数据集做对比学习,entailment 句对作正例,contradiction 句对作 hard negative;
- 衍生算法:
- ESimCSE:随机重复句中的某些单词构造正样本,缓解模型偏好“相同或相似长度的句子更相近”的偏差;并维护一个动量编码器队列,重用前一个 mini-batch 的嵌入扩充负例;
- CoSENT:在正负样本基础上,基于 circle loss 进一步引入排序监督;
- SNCSE:针对模型“无法区分文本相似度与语义相似度、偏向表面相似而忽略语义差异”的问题,显式添加否定词生成软负样本,配合双向边际损失;
- EASE:强调实体在句向量中的重要性,数据层面用正、负实体替代正负样本;
- CLAIF:针对训练中缺乏细粒度监督(未考虑正样本对之间的相似度差异)的问题,引入来自 LLM 的 AI 反馈,构造相似度不同的样本对并给出细粒度相似度分数作为监督信号。
8.5 指令化与前缀化:Instructor / E5 / BGE
- Instructor:以 GTR 为基底,经进一步 instruction tuning 得到;模型输入改为
Task Instruction + [X]形式([X] 为具体文本),用自然语言指令控制 embedding 行为,实现单模型覆盖对称/非对称多种任务; - E5:提出预训练数据过滤方案 consistency-based filter;以 BERT 为基座;在输入侧加 Prefix(
query:/paragraph:)让模型感知文本类型,思想与 Instructor 的 instruction 类似; - BGE:基于 RetroMAE 方案;finetune 阶段针对检索任务在 query 侧加入特定 Prefix(“Represent this sentence for searching relevant passages:”)。
Langchain-Chatchat 中的落地:项目默认 Embedding 模型即为 BGE 系列,见 settings.py 中的 DEFAULT_EMBEDDING_MODEL: str = "bge-m3";各模型平台的可用嵌入模型则通过 embed_models 字段声明,例如 settings.py 中列出的千问 text-embedding-v1、千帆 Embedding-V1 与 OpenAI 的 text-embedding-3-small/large。此外仓库还提供了 LocalAIEmbeddings,通过 OpenAI 兼容接口对接本地部署的 embedding 服务(默认 max_retries=3、批量 chunk_size=1000),支持私有化场景下的向量生成。
8.6 RetroMAE 与 Prompt 路线
- RetroMAE:由 BERT 基底 Encoder 加一个单层 Decoder 组成。Encoder 端以 30% 比例 mask 原文,取最后一层 [CLS] 位置向量作为句向量;Decoder 端以 50% 比例 mask 原文,结合 Encoder 句向量做重建——自编码预训练让句向量同时承载内容与语义信息;
- PromptBERT:以 BERT 为基底,选择合适 prompt(“This sentence: [X] means [MASK]”),取最后一层 [MASK] 位置向量作为句向量,不经额外 finetune 即可取得很好的效果;
- PromptEOL + CSE + LLM:语言模型使用 OPT 与 LLaMA;构造新 prompt “This sentence: [X] means in one word:”,以下一个生成 token 的隐层状态作为 text embedding;并引入 in-context learning,为每个语言模型找到最佳 demonstration 引导其生成符合要求的 embedding;还可进一步用对比学习 finetune 提升性能。
8.7 非对称检索的工程形态:混合检索
非对称 query:text 场景下,纯向量检索常受“词汇不匹配”困扰,工程上常用“向量 + 关键词”的混合检索。Langchain-Chatchat 的 EnsembleRetrieverService 即是一个具体实现:用 jieba 分词构建 BM25Retriever,同时从向量库构造 similarity_score_threshold 模式的检索器,以 weights=[0.5, 0.5] 的 EnsembleRetriever 融合两路召回——这正是上述非对称检索理论在 RAG 系统中的典型落法。
九、上下文扩展
长上下文是 LLM 能力扩展的重要方向,主要技术路线:
- ALiBi:线性距离偏置本身对长度外推较友好;
- log(n) 注意力缩放:对注意力 logits 按 log(n) 缩放,缓解长序列下注意力分布退化;
- Window attention:局部窗口注意力降低计算量、配合全局注意力使用;
- RoPE 改进,按训练后扩展的方式分三类:
- Interpolation(插值):Position Interpolation,即在位置 ID 上做线性插值,把长序列“压缩”回训练长度范围内;
- Extrapolation(外推):NTK 感知缩放 RoPE(修改 RoPE 的 base 频率)、Dynamic 缩放 RoPE(随序列长度动态调整缩放)、以及 consistent 的 Dynamically Scaled RoPE;
- 混合:Rectified RoPE(CRoPE),结合插值与外推的优点。
- NBCE(Naive Bayes-based Context Extension):只需修改解码函数中的 logits 构建方式,具备即插即用、模型无关、无须微调、线性效率、实现简单的优点;其主要缺点是无序性——无法识别 context 的输入顺序,在续写故事等对顺序敏感的场景中表现可能欠佳。
十、Prompt Engineering:把推理过程写进提示
原文档梳理了从单链推理到图搜索的提示技术谱系:
- Chain of Thought(思维链):标志性触发语 “Let's think step by step”,引导模型显式输出推导步骤;
- Self-Consistency:Few-shot(若干带推导步骤的相似例子)+ {question},多次采样不同推理路径后投票,提高数值/逻辑题正确率;
- Auto-CoT:自动为问题生成多条思维链样例,再执行:Few-shot + {question} + Chain-of-Thought 推导步骤样例 + {问题} + “给出具体思考过程”;
- Generation Knowledge:以“事实 + 知识”的方式组织样例,最后提问并要求同时给出解释与答案;
- Automatic Prompt Engineer(APE):使用优化后的指令,如 “Let's work this out in a step by step way to be sure we have the right answer”;
- OPRO(Optimization by PROmpting):优化提示本身。总体架构:先输入 meta-prompt(对优化任务的自然语言描述 + few-shot 例子),LLM 生成一个 solution(候选指令,如 “Take a deep breath and think step by step.”),solution 由 objective function 评估打分,(solution, score) 组合追加回 meta-prompt,循环多轮后取分数最高的 solution。meta-prompt 分两部分:问题描述(“generate a new instruction that achieves a higher accuracy”)与优化轨迹——即 (solution, score) 对组成的优化“日志”。注意轨迹不是按时间顺序排列,而是按打分升序排列:越靠后的样例对输出影响越大,把高分 solution 排在后面有利于 LLM 向其学习;
- Tree of Thought(ToT):把推理状态建模为树,两类核心提示模板——“给定当前的推理状态:{state_text},生成 k 条连贯的思想来实现推理过程”(扩展)与“鉴于当前的推理状态:{state_text},根据其实现 {initial_prompt} 的潜力,悲观地将其值评估为 0 到 1 之间的浮点数”(评估);再利用树的遍历算法(BFS、DFS、Monte-Carlo、Beam、A*)搜索最佳答案;
- Graph of Thought(GoT):将 LLM 生成的信息建模为图——节点是“LLM 的思想”,边是思想间的依赖关系,从而可以组合、归并、提炼任意 LLM 思想。其出发点:人类解决问题时并非只走链式思维(CoT)或尝试多条链(ToT),而是在脑中构建复杂的思维网络——沿一条链推理、回溯、再尝试新方向,并把之前链的优点保留、缺点剔除,与当前探索方向结合生成新的解决方案。
在 Langchain-Chatchat 中的对应实践:平台 Agent 的系统提示词中即内置了“step-by-step”式的任务分解引导,例如 settings.py 中 platform-knowledge-mode 的 SYSTEM_PROMPT 要求模型“use tools step-by-step to accomplish a given task, with each tool use informed by the result of the previous tool use”,与 Self-Consistency / 分步执行的思想一脉相承。
十一、应用层:RAG 与 Agent
技术栈文档把 RAG 与 Agent 列为大模型应用的两大落地方向,而 Langchain-Chatchat 正是这两个方向的工程化实现,可以逐一对应前文各节:
- RAG 链路:知识库摘要(kb_summary 的 chunk 级摘要生成)、向量/混合检索(第八节的 EnsembleRetrieverService)、中文友好的文本切分(text_splitter 目录下的多种中文 splitter),共同把“embedding 模型 + 检索器”组装为可运行的检索增强问答;
- Agent 链路:agents_registry.py 中的
agents_registry工厂按agent_type分发构建 glm3 / qwen / platform-agent / structured-chat-agent / tool-calling 等多种 Agent 执行器,配合 search_local_knowledgebase 等工具,让模型以工具调用方式查询知识库——其默认参数top_k=3、score_threshold=2.0及“有结果/无结果”两套结论提示词见 settings.py 的ToolSettings.search_local_knowledgebase,正是 Prompt Engineering 思想在工具提示词上的直接应用。
十二、小结
这份“大模型技术栈-算法与原理”知识框架沿“基础算法(Tokenizer/位置编码/注意力)→ 训练(分布式并行/PEFT)→ 压缩(剪枝/量化/蒸馏)→ 推理(调度/分页/并行)→ 表征(Embedding 分类学)→ 扩展(长上下文/提示工程)→ 应用(RAG/Agent)”的纵轴,构成了理解 LLM 系统的一整张地图。结合 Langchain-Chatchat 仓库可以看到,地图上的每个节点都不是孤立的算法名词:bge-m3 的默认嵌入配置、BM25+向量 0.5/0.5 的混合检索、step-by-step 的系统提示词,都是相应理论在开源 RAG/Agent 工程中的具体实例。沿着 知识库样例 与仓库源码对照阅读,是快速建立“算法—实现”映射的高效路径。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0623
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00