在构建能够处理复杂长程任务的智能体时,我们面临一个根本性挑战:如何让AI系统像人类一样,将宏大目标分解为可管理的小步骤。传统强化学习(RL)方法在网页导航、多步骤操作等场景中表现不佳,主要因为稀疏奖励信号难以指导智能体学习长达数十步的行为序列。想象一下,当你第一次学习使用GitLab时,系统只在你最终完成任务时才给予反馈,而不会在成功登录或找到待办列表时给予任何提示——这种学习效率显然低下。
MiRA框架的创新之处在于将"目标分解"这一人类本能转化为可计算的算法组件。其核心思想包含三个关键层次:
语义子目标生成层:利用大语言模型(LLM)的理解能力,将模糊的用户指令(如"处理GitLab待办事项")转化为明确的、可验证的子目标序列。这相当于为智能体提供了"任务路线图"。
势能奖励塑形层:基于子目标完成情况,动态生成密集奖励信号。每个子目标就像游戏中的检查点,智能体到达检查点就能获得阶段性奖励,而不必等到最终任务完成。
策略优化层:采用改进的强化学习算法,特别设计来处理子目标之间的时序依赖关系。这确保智能体不仅追求单个子目标,还能学习如何连贯地串联多个步骤。
关键洞见:人类专家在复杂任务中会自然建立"心理里程碑",而MiRA通过算法机制将这一认知过程形式化。实验证明,这种结构化方法比单纯扩大模型规模更能有效提升长程规划能力。
子目标的质量直接影响框架效果。我们采用两阶段验证流程:
生成阶段:
python复制def generate_subgoals(task_description):
# 使用LLM生成初始子目标列表
prompt = f"""将以下任务分解为可验证的子步骤:
任务:{task_description}
返回格式:g1: [描述], g2: [描述],..."""
raw_subgoals = llm_completion(prompt)
# 后处理确保可验证性
return [verify_groundable(goal) for goal in parse_subgoals(raw_subgoals)]
典型子目标需满足SMART原则:
运行时验证:
每个子目标对应一个验证函数,例如:
python复制def check_g3(state): # 检查是否已查看待办列表
return (state.current_url == "/dashboard/todos"
and len(state.dom_elements["todo_items"]) > 0)
传统RL的稀疏奖励问题可通过势能函数Φ(s,g)解决。给定子目标g,我们定义:
$$
\Phi(s,g) = \begin{cases}
1 & \text{如果}g\text{在状态}s\text{下已完成} \
\epsilon \cdot \text{progress}(s,g) & \text{否则}
\end{cases}
$$
其中progress(s,g) ∈ [0,1)量化部分进展(如已打开登录页面但未登录时progress=0.3)。由此得到的奖励函数为:
$$
r'(s,a,s',g) = r(s,a,s',g) + \gamma \Phi(s',g) - \Phi(s,g)
$$
这种设计具有理论保证:最优策略不变性(policy invariance),即塑形后的MDP与原问题共享相同的最优策略。
为解决价值函数估计不准导致的训练不稳定,我们结合TD误差和蒙特卡洛回报:
$$
\hat{A}(s,a) = (1-\lambda)\sum_{t'=t}^T \gamma^{t'-t}\delta_{t'} + \lambda (G_t - V(s_t))
$$
其中δ_t = r_t + γV(s_{t+1}) - V(s_t)是TD误差。超参数λ∈[0,1]平衡偏差与方差:
在包含GitLab、Reddit等真实网站的任务集上,MiRA展现出显著优势:
| 指标 | 标准RL | MiRA (Ours) | 提升幅度 |
|---|---|---|---|
| Pass@1 (Phase 2) | 28.3% | 36.2% | +7.9% |
| 中途停滞率 | 33.1% | 21.4% | -11.7% |
| 跨领域泛化成功率 | 22.7% | 31.5% | +8.8% |
特别值得注意的是,随着任务复杂度增加(子目标数>5),性能优势更加明显:

图示:横轴为子目标数量,纵轴为任务成功率。MiRA(红色)在复杂任务中保持较高成功率,而标准RL(蓝色)性能急剧下降。
势能系数γ_ϕ的选择:
子目标粒度控制:
灾难性遗忘预防:
当引入新任务类型时,建议:
症状:智能体完成动作但系统未标记子目标达成。
诊断步骤:
javascript复制// 在浏览器控制台调试
console.log(document.location.href, document.getElementById('todo-list'))
解决方案:
症状:智能体反复完成前几个子目标但无法推进。
案例:在GitLab任务中,智能体反复登录-登出但从不查看待办事项。
应对策略:
python复制# 在经验回放中强制包含后期子目标
if buffer.contains_goal(g_k):
sample_prob *= 2.0
症状:在训练网站表现良好,但迁移到新网站时成功率骤降。
根本原因:子目标验证过度依赖网站特定特征(如固定CSS类名)。
改进方案:
.btn-login[data-testid='login-button'] 或 "包含'Log in'文本的按钮"MiRA可扩展为自改进系统:
python复制while True:
# 执行任务并收集失败轨迹
trajectories = run_episodes()
# 分析失败模式
failure_clusters = analyze_failures(trajectories)
# 生成针对性训练任务
for cluster in failure_clusters:
new_subgoals = generate_remedial_subgoals(cluster)
add_to_curriculum(new_subgoals)
# 继续训练
train_on_updated_curriculum()
结合视觉语言模型(VLM)处理非结构化界面:
python复制def check_visual_goal(state, description):
screenshot = state.get_screenshot()
prompt = f"当前界面是否显示{description}?回答是/否"
return vlm_query(prompt, screenshot) == "是"
通过少量人工标注优化子目标质量:
python复制loss = contrastive_loss(
llm_embedding(optimal_goal),
llm_embedding(chosen_goal)
)
在实际部署中,我们发现将MiRA与标准操作流程(SOP)结合特别有效。例如某客户服务自动化项目中,将SOP文档自动转化为子目标图,使陌生任务的成功率在10次尝试内从12%提升到68%。这验证了结构化分解对快速技能获取的价值。
这种方法的局限性在于对初始子目标质量的依赖——当LLM生成错误分解时,整个训练过程会受到影响。我们正在探索通过蒙特卡洛树搜索(MCTS)进行子目标验证,初步实验显示可减少35%的错误分解传播。