RAG 与 Agent 系统的形式化推导

分类: 推理与评估 · 难度: 中级 · 关联讲座: L10

RAG(检索增强生成)和 Language Agent 是当前 LLM 应用的两大核心架构。本文对 RAG 的边缘化检索生成、ReAct 的交替推理行动、Tree-of-Thought 的树搜索推理、LLM Agent 的四种记忆类型、Function Calling 的工具调用协议以及 Adapter 的数学结构进行系统化的形式推导。

📐 RAG 的形式化推导

RAG(Lewis et al., 2021) 将生成过程边缘化到检索文档上:

PRAG(yx)=ztop-kP(yz,x)P(zx)P_{RAG}(y|x) = \sum_{z \in \text{top-k}} P(y | z, x) \cdot P(z | x)

其中:

  • xx:查询(问题)
  • zz:检索到的文档段落
  • P(zx)P(z|x):检索相关性分数,由 DPR(Dense Passage Retrieval) 提供:

P(zx)exp ⁣(EQ(x)TEP(z))P(z|x) \propto \exp\!\left(E_Q(x)^T E_P(z)\right)

EQ,EPE_Q, E_P 是独立的 BERT 编码器(双编码器架构),内积衡量相关性。

FAISS(MIPS):在数十亿向量中做近似最近邻搜索(Maximum Inner Product Search),时间复杂度从 O(N)O(N) 降至 O(N)O(\sqrt{N})(倒排索引)。

生成器(如 BART/GPT)的条件概率: P(yz,x)=tP(yty<t,z,x)P(y|z,x) = \prod_{t} P(y_t | y_{<t}, z, x)

RAG-Token 变体:每个生成 token 可以从不同文档中检索,比 RAG-Sequence(整个答案基于同一文档)更灵活。

📐 ReAct 框架的形式化

Agent 的决策轨迹 τ=(o0,a0,o1,a1,,oT,aT)\tau = (o_0, a_0, o_1, a_1, \ldots, o_T, a_T),其中 oto_t 是观察(observation),ata_t 是动作(action)。

ReAct(Yao et al., 2023) 的动作空间扩展为三类:

  • Thinkatthink=rta_t^{think} = r_t(内部推理步骤,不改变环境,仅更新上下文)
  • Actatact=tool_call(name,args)a_t^{act} = \text{tool\_call}(name, args)(调用外部工具)
  • Observeot=env(atact)o_t = \text{env}(a_t^{act})(处理工具返回结果)

策略由 LLM 参数 θ\theta 决定:

at=πθ(ot,ht),ht=(o0,a0,,ot1,at1)a_t = \pi_\theta(o_t, h_t), \quad h_t = (o_0, a_0, \ldots, o_{t-1}, a_{t-1})

与纯 CoT(仅有 Think,无 Act)的区别:ReAct 的 Think 步骤可以更新内部状态,而不是仅仅生成最终答案。

📐 Tree-of-Thought(ToT)的形式化

标准 CoT(线性推理链): y=Gθ(x,z1,z2,,zn),zi 按顺序生成,不可回溯y = G_\theta(x, z_1, z_2, \ldots, z_n), \quad z_i \text{ 按顺序生成,不可回溯}

ToT(Yao et al., 2023):维护推理树 T\mathcal{T},节点为推理状态 s=(x,z1,,zi)s = (x, z_1, \ldots, z_i)

  1. 生成zt+1Gθ(st)z_{t+1} \sim G_\theta(s_t)(采样多个候选下一步,宽度 kk
  2. 评估Vθ(st)[0,1]V_\theta(s_t) \in [0,1](用 LLM 自评当前状态的价值)
  3. 搜索:BFS(按层展开)或 DFS(深度优先)或 MCTS(蒙特卡洛树搜索)

关键区别:CoT 在错误分支上一路走到黑;ToT 可以**回溯(backtrack)**并探索其他分支。

MCTS 的 UCB 选择公式(用于引导搜索): a=argmaxa[Q(s,a)+clnN(s)N(s,a)]a^* = \arg\max_a \left[Q(s,a) + c\sqrt{\frac{\ln N(s)}{N(s,a)}}\right]

其中 Q(s,a)Q(s,a) 是价值估计,N(s,a)N(s,a) 是访问次数,cc 控制探索-利用权衡。

📐 LLM Agent 的四种记忆类型

记忆类型存储位置访问方式容量可更新
In-context(工作记忆)Context window直接(注意力)LL tokens(有限)否(会话结束后丢失)
External(外部记忆)向量数据库检索(MIPS)理论无限是(可随时写入)
In-weights(参数记忆)模型权重 θ\theta隐式(推理)无限但模糊需要 fine-tuning
In-cache(KV 缓存)GPU/CPU 内存前缀重用受内存限制

外部记忆的检索公式

retrieve(q,D,k)=top-k{diD:cos ⁣(E(q),ei)}\text{retrieve}(q, D, k) = \text{top-}k\left\{d_i \in D : \cos\!\left(E(q), e_i\right)\right\}

其中 ei=E(di)e_i = E(d_i) 是用嵌入模型预计算的文档向量,FAISS/Chroma/Pinecone 等向量数据库负责高效近似搜索。

KV 缓存加速:若前 nn 个 token 相同(系统提示),预计算并缓存其 Key/Value 矩阵,推理时直接复用,避免重复计算。

📐 Function Calling 的形式化

给定工具定义集合 T={(namei,schemai,fni)}\mathcal{T} = \{(name_i, \text{schema}_i, fn_i)\},工具调用轨迹:

at={tool:namei,args:{k1:v1,,km:vm}}a_t = \{tool: name_i, args: \{k_1: v_1, \ldots, k_m: v_m\}\}

工具执行 ot=fni(args)o_t = fn_i(args),结果注入下一步 context:

P(yt+1x,o1,a1,,ot)=πθ ⁣(yt+1concat(x,fmt(a1,o1),,fmt(at,ot)))P(y_{t+1} | x, o_1, a_1, \ldots, o_t) = \pi_\theta\!\left(y_{t+1} \mid \text{concat}(x,\, \text{fmt}(a_1, o_1),\, \ldots,\, \text{fmt}(a_t, o_t))\right)

Toolformer(Schick et al., 2023) 的自监督训练方式:

  1. LM 采样可能的工具调用位置和参数
  2. 执行工具,获得结果
  3. 若插入工具结果后 loss 降低,则保留该样本(自我监督过滤
  4. 在过滤后的数据上 fine-tune LM

关键指标:工具调用是否降低了后续 token 的 perplexity——这是 Toolformer 的自动标注准则,不需要人工标注”该在何处调用工具”。

📐 Adapter 的数学结构

Adapter 在每个 Transformer 子层后插入一个瓶颈模块:

hh+f(hWdown)Wuph \leftarrow h + f(h W_{down}) W_{up}

其中:

  • WdownRd×rW_{down} \in \mathbb{R}^{d \times r}(下投影,rdr \ll d
  • WupRr×dW_{up} \in \mathbb{R}^{r \times d}(上投影)
  • ff:非线性激活(通常 ReLU 或 GELU)
  • 残差连接保证初始化时 hhh \leftarrow hWdown,WupW_{down}, W_{up} 初始化为近零)

与 LoRA 的对比(LoRA 直接修改权重矩阵):

W=W+ΔW=W+AB,ARd×r,BRr×dW' = W + \Delta W = W + AB, \quad A \in \mathbb{R}^{d \times r}, B \in \mathbb{R}^{r \times d}

两者都用秩 rr 分解控制参数量,但 Adapter 在推理时有额外延迟,LoRA 可以合并权重消除额外延迟。