首页
/ 大模型技术栈全景解析:从分词、分布式训练到 PEFT 与 RAG/Agent 的落地路径(以 Langchain-Chatchat 为例)

大模型技术栈全景解析:从分词、分布式训练到 PEFT 与 RAG/Agent 的落地路径(以 Langchain-Chatchat 为例)

2026-09-05 12:34:29作者:钟日瑜

本篇技术指南围绕“大模型技术栈-算法与原理”这一知识框架展开,系统梳理从 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)

以层数压缩为代表的知识蒸馏,让小模型模仿大模型(或深层)的中间表征与输出,常用于推理成本约束下的模型瘦身。

七、推理优化:吞吐、延迟与调度

围绕线上服务指标,推理侧优化可以归纳为六个方向(完整继承原文档的清单):

  1. 吞吐量与显存优化PagedAttention(把 KV cache 分页管理,消除碎片,是 vLLM 的核心机制)、Quantized KV Cache(KV 用低比特存储省显存)、MQA/GQA(多查询/分组查询注意力,压缩 KV 头数)、FlashAttention
  2. 算子融合:把多个小算子合并成单 kernel,减少访存与启动开销;
  3. 延迟优化No Padding——变长 batch 内不做 padding,避免为无效 token 付费;
  4. 调度优化Dynamic Batching(动态攒批)、Async Serving(异步服务解耦)、Inflight Batching(把不同进度、不同长度、甚至不同请求的序列动态拼进同一 batch 一起解码);
  5. 量化:复用第六节的推理量化技术(W8A8、W4 等);
  6. 模型并行Tensor Parallelism 将单层权重横向切分到多卡;
  7. 请求优化:传输层协议选型,如 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 重建类自编码,代表 bgeRetroMAE);
  • 基座结构: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-ChatchatEnsembleRetrieverService 即是一个具体实现:用 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

技术栈文档把 RAGAgent 列为大模型应用的两大落地方向,而 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=3score_threshold=2.0 及“有结果/无结果”两套结论提示词见 settings.pyToolSettings.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 工程中的具体实例。沿着 知识库样例 与仓库源码对照阅读,是快速建立“算法—实现”映射的高效路径。

登录后查看全文
热门项目推荐
相关项目推荐