Skip to content

Step-level MDP

面向智能体训练的原则化基础

许多已有框架把 LLM 智能体看作 token-level 过程:所谓状态是所有历史 token 的拼接,动作是下一个 token。这种视角会强制上下文单调增长,也很难在有意义的粒度上应用标准 RL 算法。

Agent-R1 采用 step-level MDP,把 LLM 建模为在环境中行动的智能体:

MDP 元素 定义
状态 \(s_t\) \(t\) 步呈现给 LLM 的 prompt,完全由环境决定
动作 \(a_t\) LLM 在第 \(t\) 步生成的完整回复
转移 \(T(s_{t+1} \mid s_t, a_t)\) 环境根据当前状态和 LLM 回复产生下一步观察
奖励 \(r_t\) 来自环境的逐步奖励信号
策略 \(\pi(a_t \mid s_t)\) LLM 本身
graph LR
    state_t["State s_t"] -->|"Policy π (LLM)"| action_t["Action a_t"]
    action_t -->|"Environment"| state_t1["State s_{t+1}"]
    action_t -->|"Environment"| reward_t["Reward r_t"]
    state_t1 -->|"Policy π (LLM)"| action_t1["Action a_{t+1}"]
    action_t1 -->|"..."| more_steps["..."]

这一建模带来三个关键点:

灵活上下文

状态 \(s_t\) 由环境提供,而不是由所有历史 token 拼接得到。因此环境可以在步骤之间 总结截断重组,甚至 完全替换 上下文。只要转移函数定义清楚,MDP 仍然成立。

有效的 RL 训练

每一步都有自己的观察、动作和奖励。每一步的 log-probability 都在对应的 \(s_t\) 条件下计算,因此 PPO、GRPO 等标准 policy gradient 方法可以直接应用在 step 粒度上。

拼接只是特例

传统的“把所有内容追加到历史中”的做法只是某一种转移函数:\(s_{t+1} = \text{concat}(s_t,\; a_t,\; \text{env}_{output_t})\)。它是有效选择,但不是唯一选择。Agent-R1 把它作为特例支持,而不是写死成框架约束。

为什么它对智能体任务重要

这正是 Agent-R1 围绕 多步智能体行为 构建,而不是围绕单步 prompting 构建的原因。当环境拥有下一步观察的控制权时,框架可以自然支持:

  • 工具调用和结构化环境反馈
  • 多轮状态更新
  • 逐步奖励,而不只是最终结果奖励
  • 面向真实智能体任务的轨迹级训练

实践中,Agent-R1 的核心单位不是单纯的 token 流,而是一串由环境调解的交互步骤。