RAG 与 Agent 系统的形式化推导
分类: 推理与评估 · 难度: 中级 · 关联讲座: L10
RAG(检索增强生成)和 Language Agent 是当前 LLM 应用的两大核心架构。本文对 RAG 的边缘化检索生成、ReAct 的交替推理行动、Tree-of-Thought 的树搜索推理、LLM Agent 的四种记忆类型、Function Calling 的工具调用协议以及 Adapter 的数学结构进行系统化的形式推导。
📐 RAG 的形式化推导
RAG(Lewis et al., 2021) 将生成过程边缘化到检索文档上:
PRAG(y∣x)=∑z∈top-kP(y∣z,x)⋅P(z∣x)
其中:
- x:查询(问题)
- z:检索到的文档段落
- P(z∣x):检索相关性分数,由 DPR(Dense Passage Retrieval) 提供:
P(z∣x)∝exp(EQ(x)TEP(z))
EQ,EP 是独立的 BERT 编码器(双编码器架构),内积衡量相关性。
FAISS(MIPS):在数十亿向量中做近似最近邻搜索(Maximum Inner Product Search),时间复杂度从 O(N) 降至 O(N)(倒排索引)。
生成器(如 BART/GPT)的条件概率:
P(y∣z,x)=∏tP(yt∣y<t,z,x)
RAG-Token 变体:每个生成 token 可以从不同文档中检索,比 RAG-Sequence(整个答案基于同一文档)更灵活。
📐 ReAct 框架的形式化
Agent 的决策轨迹 τ=(o0,a0,o1,a1,…,oT,aT),其中 ot 是观察(observation),at 是动作(action)。
ReAct(Yao et al., 2023) 的动作空间扩展为三类:
- Think:atthink=rt(内部推理步骤,不改变环境,仅更新上下文)
- Act:atact=tool_call(name,args)(调用外部工具)
- Observe:ot=env(atact)(处理工具返回结果)
策略由 LLM 参数 θ 决定:
at=πθ(ot,ht),ht=(o0,a0,…,ot−1,at−1)
与纯 CoT(仅有 Think,无 Act)的区别:ReAct 的 Think 步骤可以更新内部状态,而不是仅仅生成最终答案。
📐 Tree-of-Thought(ToT)的形式化
标准 CoT(线性推理链):
y=Gθ(x,z1,z2,…,zn),zi 按顺序生成,不可回溯
ToT(Yao et al., 2023):维护推理树 T,节点为推理状态 s=(x,z1,…,zi):
- 生成:zt+1∼Gθ(st)(采样多个候选下一步,宽度 k)
- 评估:Vθ(st)∈[0,1](用 LLM 自评当前状态的价值)
- 搜索:BFS(按层展开)或 DFS(深度优先)或 MCTS(蒙特卡洛树搜索)
关键区别:CoT 在错误分支上一路走到黑;ToT 可以**回溯(backtrack)**并探索其他分支。
MCTS 的 UCB 选择公式(用于引导搜索):
a∗=argmaxa[Q(s,a)+cN(s,a)lnN(s)]
其中 Q(s,a) 是价值估计,N(s,a) 是访问次数,c 控制探索-利用权衡。
📐 LLM Agent 的四种记忆类型
| 记忆类型 | 存储位置 | 访问方式 | 容量 | 可更新 |
|---|
| In-context(工作记忆) | Context window | 直接(注意力) | L tokens(有限) | 否(会话结束后丢失) |
| External(外部记忆) | 向量数据库 | 检索(MIPS) | 理论无限 | 是(可随时写入) |
| In-weights(参数记忆) | 模型权重 θ | 隐式(推理) | 无限但模糊 | 需要 fine-tuning |
| In-cache(KV 缓存) | GPU/CPU 内存 | 前缀重用 | 受内存限制 | 否 |
外部记忆的检索公式:
retrieve(q,D,k)=top-k{di∈D:cos(E(q),ei)}
其中 ei=E(di) 是用嵌入模型预计算的文档向量,FAISS/Chroma/Pinecone 等向量数据库负责高效近似搜索。
KV 缓存加速:若前 n 个 token 相同(系统提示),预计算并缓存其 Key/Value 矩阵,推理时直接复用,避免重复计算。
📐 Function Calling 的形式化
给定工具定义集合 T={(namei,schemai,fni)},工具调用轨迹:
at={tool:namei,args:{k1:v1,…,km:vm}}
工具执行 ot=fni(args),结果注入下一步 context:
P(yt+1∣x,o1,a1,…,ot)=πθ(yt+1∣concat(x,fmt(a1,o1),…,fmt(at,ot)))
Toolformer(Schick et al., 2023) 的自监督训练方式:
- LM 采样可能的工具调用位置和参数
- 执行工具,获得结果
- 若插入工具结果后 loss 降低,则保留该样本(自我监督过滤)
- 在过滤后的数据上 fine-tune LM
关键指标:工具调用是否降低了后续 token 的 perplexity——这是 Toolformer 的自动标注准则,不需要人工标注”该在何处调用工具”。
📐 Adapter 的数学结构
Adapter 在每个 Transformer 子层后插入一个瓶颈模块:
h←h+f(hWdown)Wup
其中:
- Wdown∈Rd×r(下投影,r≪d)
- Wup∈Rr×d(上投影)
- f:非线性激活(通常 ReLU 或 GELU)
- 残差连接保证初始化时 h←h(Wdown,Wup 初始化为近零)
与 LoRA 的对比(LoRA 直接修改权重矩阵):
W′=W+ΔW=W+AB,A∈Rd×r,B∈Rr×d
两者都用秩 r 分解控制参数量,但 Adapter 在推理时有额外延迟,LoRA 可以合并权重消除额外延迟。