2026/4/6 4:03:59
网站建设
项目流程
织梦宠物网站模板,如何组做网站,上海黄页企业名录,辽宁建设工程信息网审计报告CuES#xff1a;好奇心驱动的环境接地任务合成框架#xff0c;用于Agentic RL
大家好#xff0c;我是专注于强化学习#xff08;RL#xff09;和大语言模型#xff08;LLM#xff09;代理研究的博主。今天分享一篇来自阿里巴巴通义实验室的最新工作#xff08;arXiv 2…CuES好奇心驱动的环境接地任务合成框架用于Agentic RL大家好我是专注于强化学习RL和大语言模型LLM代理研究的博主。今天分享一篇来自阿里巴巴通义实验室的最新工作arXiv 2512.01311v2CuES: A Curiosity-driven and Environment-grounded Synthesis Framework for Agentic RL。这篇论文针对Agentic RL中一个关键瓶颈——任务稀缺task scarcity——提出了一个非常有启发性的解决方案尤其适合在没有预定义任务的环境中进行自监督式代理学习。论文的核心贡献是形式化了“Task Generation for Agentic RL”问题并提出了CuES框架一个完全从环境交互中自主合成多样、可执行、相关任务的框架无需手工种子任务或外部语料。实验在AppWorld、BFCL和WebShop三个典型工具增强环境中验证合成任务在多样性和可执行性上匹配甚至超越手工数据集下游RL训练显著提升性能。这篇文章对RL研究者特别有价值因为它提供了一个可扩展的代理自改进基础代理不仅学会“如何行动”还学会“学什么”。下面我将详细介绍问题形式化、CuES方法设计包括所有关键公式以及核心思想。1. 背景与问题任务稀缺下的Agentic RLLLM-based代理越来越被部署在复杂工具增强环境如GUI、Web平台中。RL是让代理通过交互改进策略的原理性方法但现实环境中往往没有明确的训练任务集合——这就是任务稀缺问题。传统Agentic RL假设已有任务分布例如基准数据集但在新型环境中工具语义和affordance未知手工构建多样可执行任务既昂贵又脆弱。论文将这个问题形式化为在仅给定交互沙盒无奖励函数的情况下如何让代理自主生成训练任务分布使其能有效优化策略。2. 问题形式化论文首先定义了交互沙盒Interaction SandboxE ( S , A , P ) , \mathcal{E} (S, \mathcal{A}, \mathcal{P}),E(S,A,P),其中S SS是可观察状态集A \mathcal{A}A是可执行动作集P ( s ′ ∣ s , a ) \mathcal{P}(s|s,a)P(s′∣s,a)是转移分布。与标准MDP不同这里故意省略奖励函数刻画了一个开放、无奖励的环境。目标是优化目标任务分布p target ( g ) p_{\text{target}}(g)ptarget(g)下的期望回报J target ( θ ) E g ∼ p target , s 0 ∼ p 0 [ V π θ ( s 0 , g ) ] , J_{\text{target}}(\theta) \mathbb{E}_{g \sim p_{\text{target}}, s_0 \sim p_0} \left[ V^{\pi_{\theta}}(s_0, g) \right],Jtarget(θ)Eg∼ptarget,s0∼p0[Vπθ(s0,g)],其中V π θ ( s 0 , g ) E [ ∑ t 0 ∞ γ t R g ( s t , a t ) ∣ s 0 , g , π θ ] . V^{\pi_{\theta}}(s_0, g) \mathbb{E} \left[ \sum_{t0}^{\infty} \gamma^t R_g(s_t, a_t) \mid s_0, g, \pi_{\theta} \right].Vπθ(s0,g)E[t0∑∞γtRg(st,at)∣s0,g,πθ].由于训练时p target p_{\text{target}}ptarget和R g R_gRg不可用直接优化不可行。因此引入代理目标Proxy Goals从环境中诱导一个可训练目标分布F task : E → Δ ( G ) , p train F task ( E ) , F_{\text{task}} : \mathcal{E} \to \Delta(\mathcal{G}), \quad p_{\text{train}} F_{\text{task}}(\mathcal{E}),Ftask:E→Δ(G),ptrainFtask(E),并优化代理目标J train ( θ ) E g ∼ F task ( E ) [ V π θ ( s 0 , g ) ] . J_{\text{train}}(\theta) \mathbb{E}_{g \sim F_{\text{task}}(\mathcal{E})} \left[ V^{\pi_{\theta}}(s_0, g) \right].Jtrain(θ)Eg∼Ftask(E)[Vπθ(s0,g)].这被称为Environment-Conditioned Agentic Learning的代理目标。任务映射设计要求为了让J train J_{\text{train}}Jtrain对J target J_{\text{target}}Jtarget有信息量F task F_{\text{task}}Ftask需满足三个要求Executability生成的目标必须可达并以可识别结果终止抑制噪声监督。Diversity概率质量分布在不同实体、动作、约束上避免塌缩到简单模板。Relevance合成目标在语义和难度上接近评估目标防止漂移到无关但容易的目标。这三个要求共同使F task F_{\text{task}}Ftask成为一个原则性映射器产生有效、广泛且忠实的代理目标。3. CuES方法实现F task F_{\text{task}}FtaskCuES实现了以下映射注意种子目标和用户需求是可选的这点非常关键F task : E , ( T des , T req , G seed ) → CuES G synthesis , F_{\text{task}} : \mathcal{E}, (T_{\text{des}}, T_{\text{req}}, G_{\text{seed}}) \xrightarrow{\text{CuES}} G_{\text{synthesis}},Ftask:E,(Tdes,Treq,Gseed)CuESGsynthesis,其中T des T_{\text{des}}Tdes是环境描述文本T req T_{\text{req}}Treq是可选用户需求G seed G_{\text{seed}}Gseed是可选种子目标集。CuES通过五个阶段实现Executability、Diversity和Relevance如图2所示3.1 Requirement Confirmation需求确认在探索前建立环境结构理解避免好奇心漂移。输入T des T_{\text{des}}Tdes、可选T req T_{\text{req}}Treq过滤器U、可选G seed G_{\text{seed}}Gseed。输出概念池C ~ \tilde{C}C~C ~ U ( Φ ( T des ) ∪ Φ ( G seed ) ) , \tilde{C} U(\Phi(T_{\text{des}}) \cup \Phi(G_{\text{seed}})),C~U(Φ(Tdes)∪Φ(Gseed)),其中Φ ( ⋅ ) \Phi(\cdot)Φ(⋅)提取实体和affordance名词短语、动作谓词。原则集P PP指定输出格式、优先动作族。这两个输出作为轻量top-down引导传递到后续阶段。3.2 Curious Exploration好奇探索底向上交互驱动探索发现新路径。Explorer Agent在状态s t s_tst只看到当前可执行动作A ( s t ) A(s_t)A(st)加上P PP和随机采样子集C ~ t ⊂ C ~ \tilde{C}_t \subset \tilde{C}C~t⊂C~。使用环境索引记忆树避免重复M { ( e , B e ) } , B e { Summ ( τ ) : τ ∈ T e } , M \{(e, B_e)\}, \quad B_e \{ \text{Summ}(\tau) : \tau \in T_e \},M{(e,Be)},Be{Summ(τ):τ∈Te},其中e ee是环境IDSumm ( ⋅ ) \text{Summ}(\cdot)Summ(⋅)压缩轨迹动作、成败、结果片段、计数。优先选择未尝试动作a ∉ M ( s t ) a \notin M(s_t)a∈/M(st)考虑P PP和C ~ t \tilde{C}_tC~t优先级。执行后更新记忆M ( s t ) ← M ( s t ) ∪ { a t } . M(s_t) \leftarrow M(s_t) \cup \{a_t\}.M(st)←M(st)∪{at}.每步输出triplez t ( s t , a t , o t ) . z_t (s_t, a_t, o_t).zt(st,at,ot).这些概念感知、记忆引导的轨迹保证了多样性和局部高效探索。3.3 Task Abstraction任务抽象将原始交互轨迹提升为可复用任务。输入滑动窗口mini-batch{ ( s t , a t , o t ) } t i i B − 1 . \{(s_t, a_t, o_t)\}_{ti}^{iB-1}.{(st,at,ot)}tiiB−1.枚举所有连续子段[ i : j ] [i:j][i:j]Task Agent提取可执行目标n a t u r a l − l a n g u a g e g o a l g i : j natural-language goal g_{i:j}natural−languagegoalgi:j动作序列guidelinez i : j z_{i:j}zi:j用于后续判赏估计R ^ g R ( g i : j , z i : j ) \hat{R}_g R(g_{i:j}, z_{i:j})R^gR(gi:j,zi:j)每个候选获置信度σ i : j ∈ [ 0 , 1 ] \sigma_{i:j} \in [0,1]σi:j∈[0,1]内部一致性、目标清晰度、对P PP/C ~ \tilde{C}C~对齐。只保留超过阈值的候选。使用记忆列表避免重复目标。3.4 Quality Control质量控制严格验证可执行性。输入候选集{ ⟨ g k , z k ⟩ } \{\langle g_k, z_k \rangle\}{⟨gk,zk⟩}。Execution Agent按guideline执行允许最小环境特定偏差得到执行轨迹。Judge Agent检查目标满足度路径忠实度允许环境特定插入如权限确认遵守原则P PP只接受reward1.0的通过得到G original G_{\text{original}}Goriginal。这一步确保只有明确执行成功的任务进入后续阶段彻底保证Executability。3.5 Goal Rewrite目标重写在保持底层行为可执行前提下逐步暴露guideline提示到目标文本中降低难度、增加表面多样性。最终得到多样化、可执行、相关的合成任务集G synthesis G_{\text{synthesis}}Gsynthesis。4. 实验亮点简要在AppWorld、BFCL、WebShop上CuES合成任务在多样性实体/动作覆盖和可执行性上匹配/超越手工数据集见图3、图4。下游RL训练Qwen2.5 14B在所有基准上显著提升性能图1证明了代理任务的有效性。无需种子目标也能工作展示极强泛化能力。5. 总结与思考CuES提供了一个优雅的闭环通过好奇心驱动的底向上探索 轻量top-down引导 严格执行验证实现了从零开始的任务合成。这不仅解决了任务稀缺问题还为构建真正自主自改进代理奠定了基础。对RL研究者来说值得关注的三点将任务生成形式化为F task F_{\text{task}}Ftask并明确Executability/Diversity/Relevance三要求。记忆树概念池的轻量引导机制在保持探索自由度同时大幅提升效率。严格的执行验证guideline机制确保合成数据高质量。代码已开源https://github.com/modelscope/AgentEvolver/tree/main/research/CuES强烈推荐阅读原文尤其是对好奇心驱动探索和任务抽象感兴趣的同学。这可能是未来Agentic RL自监督训练的一个重要方向。欢迎留言讨论你觉得这种环境接地的任务合成能在哪些RL场景中进一步扩展CuES论文问题形式化部分的详细解读论文的第3节Formulation是整篇工作的理论基础它将“在无预定义任务的环境中训练Agentic RL代理”这一现实问题提升为一个严谨的数学形式化框架。这部分的核心目的是桥接环境交互与代理学习给定一个只有状态、动作、转移的“沙盒”环境如何让代理自主诱导出一个可训练的任务分布从而通过RL优化策略最终接近真实但未知的目标任务分布。我将逐层拆解这个形式化结合论文原文页面4-5解释每个公式的含义、设计动机以及它对Agentic RL的意义。面向RL研究者我会强调与经典RL的差异、代理目标proxy objective的必要性以及任务映射F task F_{\text{task}}Ftask的设计原则。1. 交互沙盒Interaction Sandbox的定义论文首先定义环境为E ( S , A , P ) , \mathcal{E} (S, \mathcal{A}, \mathcal{P}),E(S,A,P),S SS可观察状态集observable states。A \mathcal{A}A可执行动作集executable actions通常是工具调用。P ( s ′ ∣ s , a ) \mathcal{P}(s | s, a)P(s′∣s,a)转移概率分布transition dynamics。关键差异与标准MDPM ( S , A , P , r , γ ) \mathcal{M} (S, \mathcal{A}, \mathcal{P}, r, \gamma)M(S,A,P,r,γ)不同这里故意省略了奖励函数r rr以及折扣因子γ \gammaγ在定义中未显式列出但后续公式中出现。这刻画了一个开放、无奖励reward-free的交互环境——代理可以随意探索、调用工具、观察结果但没有外部奖励信号告诉它“做得好”或“做得差”。动机这正是现实Agentic RL如Web/GUI代理的典型设定环境如浏览器、App有明确的观察和工具affordance但没有预定义的“任务奖励”。传统RL如PPO、SAC依赖明确奖励无法直接应用。论文将问题聚焦在“任务稀缺”task scarcity代理缺少结构化的目标g gg和对应的R g R_gRg。2. 目标客观Target Objective真实目标是优化未知的目标任务分布p target ( g ) p_{\text{target}}(g)ptarget(g)下的策略回报其中g ∈ G ⊆ S g \in \mathcal{G} \subseteq Sg∈G⊆S表示一个期望的终端状态或结局goal。形式化定义为J target ( θ ) E g ∼ p target , s 0 ∼ p 0 [ V π θ ( s 0 , g ) ] , J_{\text{target}}(\theta) \mathbb{E}_{g \sim p_{\text{target}}, s_0 \sim p_0} \left[ V^{\pi_{\theta}}(s_0, g) \right],Jtarget(θ)Eg∼ptarget,s0∼p0[Vπθ(s0,g)],其中价值函数为V π θ ( s 0 , g ) E [ ∑ t 0 ∞ γ t R g ( s t , a t ) ∣ s 0 , g , π θ ] . V^{\pi_{\theta}}(s_0, g) \mathbb{E} \left[ \sum_{t0}^{\infty} \gamma^t R_g(s_t, a_t) \mid s_0, g, \pi_{\theta} \right].Vπθ(s0,g)E[t0∑∞γtRg(st,at)∣s0,g,πθ].π θ ( a ∣ s , g ) \pi_{\theta}(a|s,g)πθ(a∣s,g)是goal-conditioned策略。R g ( s , a ) R_g(s,a)Rg(s,a)是目标特定的奖励goal-specific reward通常在终端状态给1或其他稀疏信号。p 0 p_0p0是初始状态分布。问题训练时p target ( g ) p_{\text{target}}(g)ptarget(g)和R g R_gRg完全不可用因为没有预定义任务集合。直接最大化J target J_{\text{target}}Jtarget不可行——这正是任务稀缺的核心瓶颈。3. 代理目标Proxy Goals与代理客观Proxy Objective为了绕过这个不可行性论文引入从环境直接诱导一个可训练的任务分布F task : E → Δ ( G ) , p train F task ( E ) , F_{\text{task}} : \mathcal{E} \to \Delta(\mathcal{G}), \quad p_{\text{train}} F_{\text{task}}(\mathcal{E}),Ftask:E→Δ(G),ptrainFtask(E),即任务映射函数F task F_{\text{task}}Ftask将环境E \mathcal{E}E映射到目标空间G \mathcal{G}G上的一个分布Δ ( G ) \Delta(\mathcal{G})Δ(G)概率单形。然后代理在p train p_{\text{train}}ptrain上优化代理客观J train ( θ ) E g ∼ F task ( E ) [ V π θ ( s 0 , g ) ] . J_{\text{train}}(\theta) \mathbb{E}_{g \sim F_{\text{task}}(\mathcal{E})} \left[ V^{\pi_{\theta}}(s_0, g) \right].Jtrain(θ)Eg∼Ftask(E)[Vπθ(s0,g)].论文称这个J train J_{\text{train}}Jtrain为Environment-Conditioned Agentic Learning的代理目标Proxy Objective。代理目标的核心含义代理Proxyp train p_{\text{train}}ptrain是从环境中“诱导”出来的替代任务分布用来代替未知的p target p_{\text{target}}ptarget进行训练。为什么可行代理只需与环境交互探索、执行动作无需外部任务集合或人类标注。期望效果通过在代理任务上训练策略π θ \pi_{\theta}πθ能学到通用技能工具使用、导航、规划最终在真实目标任务上转移transfer得好。这类似于自监督RL或无奖励RLreward-free RL中的探索范式但更聚焦于任务生成而非单纯的状态覆盖。与经典方法的联系类似Goal-conditioned RL如HER但HER需要失败轨迹的后验重标记这里是从零开始生成g gg。类似Curiosity-driven探索如ICM、RND但这里好奇心用于生成结构化任务而非仅内在奖励。与Unsupervised RL如APT、Proto-RL不同这里明确目标是桥接到下游有监督目标真实评估任务。4. 任务映射F task F_{\text{task}}Ftask的设计要求三个原则F task F_{\text{task}}Ftask是整个形式化的核心——它决定了p train p_{\text{train}}ptrain的质量从而决定J train J_{\text{train}}Jtrain是否对J target J_{\text{target}}Jtarget有信息量informative。论文提出三个相互补的设计要求页面5Executability可执行性生成的g gg必须是可达的admissible且以可识别的结局终止。动机避免生成“听起来合理但实际执行失败”的任务常见于纯top-down LLM生成。不可执行任务会引入噪声监督导致RL更新不稳定。Diversity多样性p train p_{\text{train}}ptrain的概率质量要分布在不同的实体、动作、约束上。动机防止策略塌缩collapse到少数简单模板如反复点击同一个按钮。需要覆盖广支持策略学到鲁棒的通用技能。Relevance相关性合成g gg在语义和难度上要接近真实评估目标。动机防止漂移drift到“容易但无关”的任务如无限刷无关页面。确保学到的技能能转移到下游基准。整体效果满足这三点的F task F_{\text{task}}Ftask是一个原则性映射器principled mapper产生的代理目标是有效valid抑制噪声广泛broad覆盖大忠实faithful可转移。这三个要求直接指导了后续CuES方法的五个阶段设计好奇探索保证多样性、质量控制保证可执行性、需求确认保证相关性。5. 总结与研究意义这个形式化巧妙地将“任务生成”提升为Agentic RL的一类问题first-class problem传统RL关注算法how to learn这里关注“学什么”what to learn。CuES正是实现这个F task F_{\text{task}}Ftask的实用框架从环境交互中自主合成满足三要求的p train p_{\text{train}}ptrain。对RL研究者的启发在任务稀缺场景如开放世界代理、长尾工具使用直接优化J target J_{\text{target}}Jtarget不可行必须设计好的代理目标。F task F_{\text{task}}Ftask的质量三要求是自监督代理成功的关键瓶颈。未来可扩展结合层次目标、难度自适应、跨环境迁移等。如果你对某个公式或与具体方法的对应关系还有疑问如F task F_{\text{task}}Ftask如何在CuES中实现可以继续问这部分形式化非常优雅是论文理论贡献的核心。CuES方法通俗讲解如何从零生成高质量训练任务CuES的核心是实现一个“任务生成器”——它把一个只有交互规则的环境没有现成任务自动变成一堆多样、可执行、相关的训练任务让RL代理能在此基础上自学提升。这个生成器用数学方式表达成一个映射函数F task : E , ( T des , T req , G seed ) → CuES G synthesis F_{\text{task}} : \mathcal{E}, (T_{\text{des}}, T_{\text{req}}, G_{\text{seed}}) \xrightarrow{\text{CuES}} G_{\text{synthesis}}Ftask:E,(Tdes,Treq,Gseed)CuESGsynthesis通俗解释每个字母F task F_{\text{task}}Ftask任务映射函数task mapping就是CuES整个系统的“总公式”负责把输入转换成输出任务。E \mathcal{E}E读作“E”交互沙盒环境interaction sandbox就是代理能玩的“游戏世界”——包括状态、动作、规则但没有奖励和任务。T des T_{\text{des}}Tdes环境描述文本text description比如“这个App有搜索框、按钮、列表”等结构化说明。T req T_{\text{req}}Treq可选的用户需求文本optional user requirement比如“我只关心支付功能”没有也行。G seed G_{\text{seed}}Gseed可选的种子目标集optional seed goals比如人类给的几个示例任务没有也行这点很强多数方法必须有种子。G synthesis G_{\text{synthesis}}Gsynthesis最终合成的任务集合synthesized goals就是代理用来训练的一堆高质量任务。CuES分成五个阶段像流水线一样一步步加工保证最终任务满足三个要求可执行真的能做成功、多样不重复、花样多、相关跟真实目标相似。阶段1Requirement Confirmation需求确认——先“读懂”环境在瞎探索前先花点时间理解环境长什么样避免代理乱点一气。输入T des T_{\text{des}}Tdes环境说明书可选的T req T_{\text{req}}Treq用户想重点关注什么当作过滤器U UU可选的G seed G_{\text{seed}}Gseed人类给的示例任务输出两个东西当作“轻量级导航仪”传给后面阶段概念池C ~ \tilde{C}C~concept pool一堆关键概念的列表比如“搜索框”“添加购物车”“支付按钮”等实体和动作。计算方式C ~ U ( Φ ( T des ) ∪ Φ ( G seed ) ) \tilde{C} U(\Phi(T_{\text{des}}) \cup \Phi(G_{\text{seed}}))C~U(Φ(Tdes)∪Φ(Gseed))Φ ( ⋅ ) \Phi(\cdot)Φ(⋅)提取函数用LLM从文本里挖出名词实体和动词动作。∪ \cup∪把从环境说明和种子任务里挖出的概念合并。U UU可选过滤器如果用户说“我只关心购物”就把无关概念如“分享到社交”过滤掉。原则集P PPprinciples几条规则比如“输出格式要这样写”“优先试试搜索和点击类动作”。这两个东西就像给代理的“备忘录”探索时别跑太偏重点关注重要概念。阶段2Curious Exploration好奇探索——像孩子一样到处试现在开始真探索代理在环境中不断试动作发现新东西。怎么做代理Explorer Agent在当前状态s t s_tststate比如当前页面看到了什么下只能看到当下能做的动作A ( s t ) A(s_t)A(st)available actions比如“点击搜索”“输入文字”。它还会参考P PP原则和随机挑几个概念C ~ t ⊂ C ~ \tilde{C}_t \subset \tilde{C}C~t⊂C~比如这次重点试“购物车”相关。用一个**记忆树M MM**避免重复干一样的事M { ( e , B e ) } , B e { Summ ( τ ) : τ ∈ T e } M \{(e, B_e)\}, \quad B_e \{ \text{Summ}(\tau) : \tau \in T_e \}M{(e,Be)},Be{Summ(τ):τ∈Te}e ee当前环境的IDenvironment ID比如“购物车页面”。τ \tauτ轨迹之前在这环境里走过的完整路径。Summ ( τ ) \text{Summ}(\tau)Summ(τ)轨迹的压缩摘要干了哪些动作、成功没、看到什么、次数多少。B e B_eBe这个环境ID下所有轨迹的摘要集合。T e T_eTe这个环境ID下收集的所有轨迹。代理优先选没试过的动作a ∉ M ( s t ) a \notin M(s_t)a∈/M(st)同时照顾P PP和当前概念C ~ t \tilde{C}_tC~t。试完动作后更新记忆M ( s t ) ← M ( s t ) ∪ { a t } M(s_t) \leftarrow M(s_t) \cup \{a_t\}M(st)←M(st)∪{at}a t a_tat是刚试的动作每一步输出一个三元组z t ( s t , a t , o t ) z_t (s_t, a_t, o_t)zt(st,at,ot)s t s_tst当时状态a t a_tat执行的动作o t o_tot执行后观察到的变化observation这些三元组连起来就是探索轨迹既有好奇心驱动的新发现又不会重复浪费时间保证了多样性和探索效率。阶段3Task Abstraction任务抽象——把零散尝试变成“任务”探索得到一堆原始轨迹动作序列现在要把它们提炼成可复用的任务。怎么做拿一个滑动窗口的mini-batch小批次轨迹{ ( s t , a t , o t ) } t i i B − 1 \{(s_t, a_t, o_t)\}_{ti}^{iB-1}{(st,at,ot)}tiiB−1B BB是批次大小比如固定长度20步在这个批次里枚举所有连续子段[ i : j ] [i:j][i:j]比如第5到12步。对每个子段用LLMTask Agent提炼出自然语言目标g i : j g_{i:j}gi:jgoal比如“把商品加入购物车”动作序列guidelinez i : j z_{i:j}zi:j精确的动作步骤当作“答案提示”这个guideline以后用来估计奖励R ^ g R ( g i : j , z i : j ) \hat{R}_g R(g_{i:j}, z_{i:j})R^gR(gi:j,zi:j)判断执行对不对每个候选任务打分σ i : j ∈ [ 0 , 1 ] \sigma_{i:j} \in [0,1]σi:j∈[0,1]置信度看动作链是否连贯、目标是否清晰、是否符合P PP和C ~ \tilde{C}C~。只保留高分的。另外用一个记忆列表记下已经生成过的任务避免重复。这一步把“乱试”的片段变成了结构化的任务雏形。阶段4Quality Control质量控制——严格验收确保真能做光提炼还不够很多任务听起来行但实际跑不通。这一步死磕可执行性。输入候选任务集合{ ⟨ g k , z k ⟩ } \{\langle g_k, z_k \rangle\}{⟨gk,zk⟩}每个任务有自然语言目标g k g_kgk guidelinez k z_kzk怎么做Execution Agent执行代理在新环境中严格按guidelinez k z_kzk走允许一点小偏差比如先点“允许权限”。得到真实执行轨迹交给Judge Agent判断代理检查三件事目标是否真的完成了路径是否基本忠实guideline允许环境需要的额外小步骤是否遵守原则P PP只给reward1.0的通过收集成G original G_{\text{original}}Goriginal原始验证通过的任务集。不通过的直接扔掉。这一步像“路测”只有亲身跑通的任务才准进入下一步彻底杜绝“纸上谈兵”。阶段5Goal Rewrite目标重写——让任务更自然多样现在有了一堆真能跑通的任务但它们的目标描述可能太直接带着明显提示。这一步美化它们。怎么做逐步把guideline里的提示“渗”到自然语言目标g gg里比如原来“点击添加购物车”→改成“选购商品并加入购物车”。这样表面上看任务更自然、难度稍低但底层动作序列还是原来那套——保证依然可执行。最终得到G synthesis G_{\text{synthesis}}Gsynthesis多样、花样多、还能跑通、跟真实需求相关的任务集合。总结为什么这五个阶段牛像一个聪明的流水线先读懂地图需求确认 → 相关性带着好奇高效探索好奇探索 → 多样性把发现整理成任务草稿任务抽象严格路测验收质量控制 → 可执行性润色美化目标重写 → 更多样、更自然全程不需要人类给种子任务代理自己就能从空白环境里“长出”一堆好任务来训练自己。这就是CuES的厉害之处真正实现了“学会学什么”。CuES框架理论与代码实现详细对齐分析报告概述本报告详细分析阿里巴巴通义实验室的CuES (Curiosity-driven Environment-grounded Synthesis) 框架的理论原理与具体代码实现的对应关系帮助读者理解每个理论概念在代码中是如何体现和实现的。1. 理论背景与核心公式1.1 问题形式化理论定义交互沙盒E ( S , A , P ) \mathcal{E} (S, \mathcal{A}, \mathcal{P})E(S,A,P)目标优化目标任务分布p target ( g ) p_{\text{target}}(g)ptarget(g)下的期望回报代理目标F task : E → Δ ( G ) , p train F task ( E ) F_{\text{task}} : \mathcal{E} \to \Delta(\mathcal{G}), \quad p_{\text{train}} F_{\text{task}}(\mathcal{E})Ftask:E→Δ(G),ptrainFtask(E)代码实现对应# src/core/pipeline.pyclassAgentFlowPipeline:def__init__(self,config:Dict[str,Any]):self.configconfig# 配置参数对应理论中的环境配置self.clientDashScopeClient(...)# 对应理论中的交互能力self.storageDataStorage(...)# 对应理论中的数据管理defrun_full_pipeline(self,...):# 实现F_task映射从环境到任务分布的转换return{triplets_count:len(triplets),# 生成样本数tasks_count:len(tasks),# 合成任务数trajectories_count:trajectory_count# 执行轨迹数}1.2 任务映射三要求理论要求Executability生成的目标必须可达并以可识别结果终止Diversity概率质量分布在不同实体、动作、约束上Relevance合成目标在语义和难度上接近评估目标代码实现对应# 执行性保证 - Stage 3质量控制iftrajectory.success:# 严格验证执行成功results[successful_trajectories].append(trajectory)# 多样性保证 - Stage 2去重机制def_filter_and_deduplicate_tasks(self,tasks):fortaskintasks:# 按置信度排序保证多样性tasks.sort(keylambdax:x.confidence,reverseTrue)# 基于相似度去重避免重复任务ifnotself._queries_are_similar(normalized_query,seen_query):unique_tasks.append(task)# 相关性保证 - Stage 2置信度过滤iftask_info.get(confidence,0)self.min_confidence:# 只保留高置信度任务确保相关性2. 五个理论阶段的代码实现2.1 阶段1需求确认 (Requirement Confirmation)理论描述输入T des T_{\text{des}}Tdes、可选T req T_{\text{req}}Treq、可选G seed G_{\text{seed}}Gseed输出概念池C ~ U ( Φ ( T des ) ∪ Φ ( G seed ) ) \tilde{C} U(\Phi(T_{\text{des}}) \cup \Phi(G_{\text{seed}}))C~U(Φ(Tdes)∪Φ(Gseed))原则集P PP指定输出格式、优先动作族代码实现概念提取功能(main.py:extract_concept)defextract_concept(self,query_count100,max_workers10,batch_size10):提取概念池 - 实现理论中的C~# 获取任务查询样本task_idsenvclient.get_env_profile(env_type,splittrain)# 多线程获取查询文本withThreadPoolExecutor(max_workersmax_workers)asexecutor:queries[future.result()forfutureinas_completed(future_to_id)]# 使用LLM批量提取名词概念 - 实现Φ(·)函数forbatchinbatches:promptPlease extract all nouns (concepts) involved from queries...conceptsast.literal_eval(response.strip())all_concepts.update(concepts)returnlist(all_concepts)# 返回概念池C~需求格式化(exploration_requirements.py)defformat_exploration_requirement(client,user_requirement):格式化用户需求 - 实现理论中的U过滤器system_prompt Convert users natural language exploration requirement into a structured exploration directive. # LLM将自然语言需求转换为结构化指令responseclient.chat_with_retry(messages)returnresponse.strip()概念引导的探索(stage1_triplet_generation.py)defset_exploration_requirement(self,requirement,concepts):设置探索需求 - 实现P和C~的引导ifconcepts:# 随机选择12个概念 - 实现C_t ⊂ C~chosen_conceptsconcepts[:12]iflen(concepts)12elseconcepts conc\nYour exploration should start from str(,.join(chosen_concepts)).\nifself.exploration_requirement:self.exploration_requirementconcelse:self.exploration_requirementconc2.2 阶段2好奇探索 (Curious Exploration)理论描述Explorer Agent在状态s t s_tst看到A ( s t ) A(s_t)A(st)、P PP、C ~ t \tilde{C}_tC~t记忆树M { ( e , B e ) } M \{(e, B_e)\}M{(e,Be)}其中B e { Summ ( τ ) : τ ∈ T e } B_e \{ \text{Summ}(\tau) : \tau \in T_e \}Be{Summ(τ):τ∈Te}优先选择a ∉ M ( s t ) a \notin M(s_t)a∈/M(st)考虑P PP和C ~ t \tilde{C}_tC~t优先级输出z t ( s t , a t , o t ) z_t (s_t, a_t, o_t)zt(st,at,ot)代码实现记忆管理器(memory_manager.py)defget_env_exploration_memory(self,env_id:str)-str:获取环境探索记忆 - 实现理论中的B_e# 获取历史三元组 - 对应理论中的T_ehistorical_tripletsself.storage.get_triplets_by_env_id(env_id)# 检查缓存更新ifcurrent_countself.processed_triplet_counts.get(env_id,0):returnself.memory_cache[env_id]# 直接返回缓存# 生成探索摘要 - 实现Summ(·)函数memoryself._generate_exploration_summary(historical_triplets)# 更新缓存 - 对应理论中的记忆树Mself.memory_cache[env_id]memory self.processed_triplet_counts[env_id]current_countreturnmemory三元组生成(stage1_triplet_generation.py:_single_rollout)def_single_rollout(self):单次探索轮次 - 实现理论的探索过程forstepinrange(self.max_steps):# 获取记忆引导的动作 - 对应理论中的优先选择机制action,responseself._get_agent_action(initial_obs,history,exploration_memory)# 执行动作并获取结果 - 实现理论中的环境交互observation,reward,done,infoenv.step(action)# 创建三元组 - 实现z_t (s_t, a_t, o_t)tripletTriplet(env_idenv_id,history\n.join(save_history[-3:]),actionstr(action),# a_tobservationobs_str,# o_trewardfloat(reward),donebool(done),exploration_memorystr(exploration_memory)# 记忆指导)triplets.append(triplet)记忆引导的动作生成def_get_agent_action(self,initial_obs,history,exploration_memory):记忆引导的动作选择 - 实现理论的优先选择system_prompt,user_promptget_agent_interaction_prompt(initial_obsinitial_obs,# s_t状态historyhistory,# 历史动作exploration_memoryexploration_memory,# B_e记忆引导exploration_requirementself.exploration_requirement,# P原则env_typeenv_type)responseself.client.chat_with_retry(messages)actionparse_action_from_response(response)returnactionifactionelselook around2.3 阶段3任务抽象 (Task Abstraction)理论描述输入滑动窗口{ ( s t , a t , o t ) } t i i B − 1 \{(s_t, a_t, o_t)\}_{ti}^{iB-1}{(st,at,ot)}tiiB−1任务提取枚举所有连续子段[ i : j ] [i:j][i:j]Task Agent提取可执行目标g i : j g_{i:j}gi:j动作序列guidelinez i : j z_{i:j}zi:j置信度评估σ i : j ∈ [ 0 , 1 ] \sigma_{i:j} \in [0,1]σi:j∈[0,1]内部一致性、目标清晰度代码实现批次任务提取(stage2_task_abstraction.py:_extract_tasks_from_batch)def_extract_tasks_from_batch(self,triplets,batch_num,env_id):从三元组批次中提取任务 - 实现理论的任务抽象# 转换三元组为字典 - 对应理论中的滑动窗口输入triplet_dicts[]fortripletintriplets:triplet_dicts.append({history:triplet.history,# s_t部分action:triplet.action,# a_t部分observation:triplet.observation,# o_t部分reward:triplet.reward})# 获取任务记忆 - 避免重复抽象ifself.memory_managerandenv_id:task_memoryself.memory_manager.get_env_task_memory(env_id)# 构建任务抽取提示system_prompt,user_promptget_task_extraction_prompt(triplet_dictstriplet_dicts,# 输入三元组批次task_memorytask_memory,# 历史任务记忆env_descriptionenv_description,# 环境描述env_typeenv_type)# LLM任务抽取 - 实现Task Agentresponseself.client.chat_with_retry(messages)task_infosparse_tasks_from_response(response)# 创建任务对象 - 实现g_{i:j}和z_{i:j}tasks[]fortask_infointask_infos:iftask_info.get(confidence,0)self.min_confidence:# 置信度过滤σ_{i:j}taskTask(env_idtriplets[0].env_id,descriptiontask_info[description],# g_{i:j}: 自然语言目标querytask_info[query],# g_{i:j}: 可执行查询confidencetask_info[confidence],# σ_{i:j}: 置信度gttask_info[gt]# z_{i,j}: 动作序列指导)tasks.append(task)任务去重和质量过滤def_filter_and_deduplicate_tasks(self,tasks):任务过滤和去重 - 实现理论的多样性保证# 按置信度排序 - 保留高置信度任务tasks.sort(keylambdax:x.confidence,reverseTrue)unique_tasks[]seen_queriesset()fortaskintasks:iftask.gt:# 过滤缺失真值的任务 - 保证可执行性continuenormalized_querytask.query.lower().strip()# 基于相似度去重 - 保证多样性is_duplicateany(self._queries_are_similar(normalized_query,seen_query)forseen_queryinseen_queries)ifnotis_duplicate:unique_tasks.append(task)seen_queries.add(normalized_query)returnunique_tasks2.4 阶段4质量控制 (Quality Control)理论描述执行验证Execution Agent按guideline执行判别评估Judge Agent检查目标满足度、路径忠实度、遵守原则P PP质量保证只接受reward1.0的通过代码实现轨迹生成和验证(stage3_trajectory_generation.py:_execute_strategy1)def_execute_strategy1(self,task_id,description,query,gt,env_id):执行策略1 - 实现理论的执行验证steps[]forstep_numinrange(self.max_steps):# LLM动作生成 - 按照任务指导执行action,responseself.llm_agent.get_next_action(env_discriptioninitial_obs,task_descriptiondescription,# g_{i:j}: 目标指导queryquery,# 可执行查询historyaction_history,ground_truthgt# z_{i,j}: 动作序列指导)# 执行动作ifactionfinish:observation,reward,done,infofinish,0.0,True,{}else:observation,reward,done,infoenv.step(action,task_descriptiondescription,queryquery)# 记录步骤stepTrajectoryStep(observationstr(observation),actionstr(action),rewardfloat(reward),donebool(done),step_numberstep_num,responsestr(response))steps.append(step)ifdone:break# LLM评估轨迹成功 - 实现Judge Agentsuccess,responseself.evaluator.evaluate_trajectory_success(stepssteps,task_descriptiondescription,queryquery,ground_truthgt,final_observationobs_text)trajectoryTrajectory(task_idtask_id,env_idenv_id,descriptiondescription,queryquery,ground_truthgt,stepssteps,successsuccess,# 只接受成功的轨迹reasonresponse,# Judge Agent的评估理由strategy_usedsimple)returntrajectoryLLM轨迹评估器(trajectory_evaluator.py)defevaluate_trajectory_success(self,steps,task_description,query,ground_truth,final_observation):评估轨迹成功 - 实现Judge Agenttrajectory_summaryself._create_trajectory_summary(steps)# 构建评估提示promptself.prompts.success_evaluation_prompt(task_descriptiontask_description,queryquery,ground_truthground_truth,trajectory_summarytrajectory_summary,final_observationfinal_observation,env_typeself.env_type,)# LLM评估responseself.client.chat_with_retry(prompt)successself._parse_evaluation_response(response)returnsuccess,response2.5 阶段5目标重写 (Goal Rewrite)理论描述目标在保持底层行为可执行前提下逐步暴露guideline提示到目标文本中方法降低难度、增加表面多样性代码实现查询重写功能(pipeline.py:run_query_rewrite)defrun_query_rewrite(self,trajectories_file,batch_size20,num_variants3):查询重写 - 实现理论中的Goal Rewriteforfpinfiles:withfp.open(r,encodingutf-8)asf:samplejson.load(f)original_querysample.get(query)# 原始查询messagessample.get(messages,[])# 执行轨迹消息# 使用LLM重写查询variantsself._rewrite_with_llm(original_queryoriginal_query,messagesmessages,# 上下文信息knum_variants# 生成变体数量)# 保存重写后的任务fori,vinenumerate(variants,start1):new_objjson.loads(json.dumps(sample))new_obj[query]v# 替换查询文本# 保存为多样性任务out_nameftrajectory_{task_id}_rw{i}.jsonout_fpout_dir/out_namewithout_fp.open(w,encodingutf-8)aswf:json.dump(new_obj,wf,ensure_asciiFalse,indent2)智能重写策略def_rewrite_with_llm(self,original_query,messages,k):使用LLM智能重写查询# 构建上下文摘要contextself._summarize_messages(messages)promptf Generate alternative phrasings that are semantically equivalent and executable. Guidelines: - Control difficulty by how much context you implicitly encode - No or minimal hints hardest - Progressively adding concrete cues easier - Maintain original intent and constraints - Keep rewrites diverse in wording/structure - Use the same language as the original Original query:{original_query}Context summary:{context}Generate at most{k}rewrites: responseself.client.chat_with_retry(messages_payload)returnself._parse_rewrite_response(response,k)3. 核心数据结构的理论对应3.1 三元组 (Triplet) -z t ( s t , a t , o t ) z_t (s_t, a_t, o_t)zt(st,at,ot)dataclassclassTriplet:triplet_id:strfield(default_factorylambda:str(uuid.uuid4()))session_id:Optional[str]Noneenv_id:str# 环境ID - 对应理论中的ehistory:str# 状态历史 - 对应理论中的s_taction:str# 执行动作 - 对应理论中的a_tobservation:str# 观察结果 - 对应理论中的o_treward:float0.0# 奖励信号done:boolFalse# 是否结束timestamp:datetimefield(default_factorydatetime.now)exploration_memory:Optional[str]None# 记忆引导 - 对应理论中的B_eoriginal_action:Optional[str]None# 原始LLM响应3.2 任务 (Task) -g i : j g_{i:j}gi:j和z i : j z_{i:j}zi:jdataclassclassTask:task_id:strfield(default_factorylambda:str(uuid.uuid4()))session_id:Optional[str]Noneenv_id:str# 环境IDdescription:str# 任务描述 - 对应理论中的自然语言目标g_{i:j}query:str# 可执行查询 - 对应理论中的g_{i:j}的具体化confidence:float0.0# 置信度 - 对应理论中的σ_{i:j}gt:str# 真值动作序列 - 对应理论中的z_{i:j}source_triplets:List[str]field(default_factorylist)# 源三元组IDtimestamp:datetimefield(default_factorydatetime.now)3.3 轨迹 (Trajectory) - 执行验证结果dataclassclassTrajectory:task_id:str# 任务IDenv_id:str# 环境IDdescription:str# 任务描述query:str# 执行查询ground_truth:str# 真值动作序列steps:List[TrajectoryStep]# 执行步骤序列final_reward:float# 最终奖励 - 对应理论中的R(g_{i:j}, z_{i:j})success:bool# 执行成功标志 - 对应质量控制结果reason:str# 失败原因 - 对应Judge Agent评估total_steps:int# 总步骤数strategy_used:str# 使用的执行策略response:str# LLM响应4. 理论到实现的关键映射4.1 记忆树结构映射理论定义M { ( e , B e ) } M \{(e, B_e)\}M{(e,Be)}其中B e { Summ ( τ ) : τ ∈ T e } B_e \{ \text{Summ}(\tau) : \tau \in T_e \}Be{Summ(τ):τ∈Te}代码实现# memory_manager.pyclassMemoryManager:def__init__(self,storage,client):self.memory_cache{}# M - 记忆树主结构self.processed_triplet_counts{}# 跟踪每个环境的处理数量defget_env_exploration_memory(self,env_id:str)-str:# T_e - 获取环境e的历史三元组historical_tripletsself.storage.get_triplets_by_env_id(env_id)# Summ(·) - LLM驱动的轨迹摘要函数memoryself._generate_exploration_summary(historical_triplets)# M(e) - 缓存环境的记忆摘要self.memory_cache[env_id]memoryreturnmemory4.2 好奇探索机制映射理论描述优先选择未尝试动作a ∉ M ( s t ) a \notin M(s_t)a∈/M(st)代码实现# explorer_random.pydefget_agent_interaction_prompt(initial_obs,history,exploration_memory,exploration_requirement):user_promptf Current Observation:{initial_obs}Previous Actions and Observations:{format_history(history)}{fExploration Memory:{exploration_memory}ifexploration_memoryelse}Guidance: Avoid repeating actions already tried in the memory. Focus on discovering new functionalities and paths. Please choose your next action to explore this environment curiously. returnsystem_prompt,user_prompt4.3 置信度评估映射理论描述σ i : j ∈ [ 0 , 1 ] \sigma_{i:j} \in [0,1]σi:j∈[0,1]内部一致性、目标清晰度代码实现# judge_task_extract.pydefparse_tasks_from_response(response):解析任务响应提取置信度tasks[]linesresponse.strip().split(\n)forlineinlines:ifline.strip():# 解析格式: [confidence: 0.8] description | query | gtif[confidence:inline:# 提取置信度分数 - 实现σ_{i:j}confidence_matchre.search(r\[confidence:\s*([\d.])\],line)confidencefloat(confidence_match.group(1))ifconfidence_matchelse0.0# 解析任务组件partsline.split(],1)[1].strip().split(|)iflen(parts)3:descriptionparts[0].strip()queryparts[1].strip()gtparts[2].strip()tasks.append({description:description,query:query,gt:gt,confidence:confidence# σ_{i:j}置信度分数})returntasks5. 性能优化与理论一致性5.1 多线程并行化理论支撑并行探索提高效率保持理论一致性代码实现# pipeline.py: _run_stage1_paralleldef_run_stage1_parallel(self,rollout_num,requirement,concepts,session_id):多线程执行Stage 1withThreadPoolExecutor(max_workersmax_workers)asexecutor:# 提交所有rollout任务future_to_idx{executor.submit(run_single_rollout,i):iforiinrange(rollout_num)}# 收集结果forfutureinas_completed(future_to_idx):tripletsfuture.result()all_triplets.extend(triplets)returnall_triplets5.2 缓存和记忆管理理论支撑避免重复计算提高探索效率代码实现# memory_manager.py: get_env_exploration_memorydefget_env_exploration_memory(self,env_id:str)-str:# 检查缓存有效性if(env_idinself.memory_cacheandcurrent_countself.processed_triplet_counts.get(env_id,0)):returnself.memory_cache[env_id]# 直接返回缓存# 增量更新处理previous_countself.processed_triplet_counts.get(env_id,0)new_tripletshistorical_triplets[previous_count:]ifenv_idnotinself.memory_cache:# 首次完整摘要memoryself._generate_exploration_summary(historical_triplets)else:# 增量更新memoryself._update_exploration_summary(previous_memory,new_triplets)6. 错误处理与理论鲁棒性6.1 API调用容错理论要求保证Executability避免因临时错误中断流程代码实现# api_client.py: chat_with_retrydefchat_with_retry(self,messages,max_retries3,retry_delay1.0):forattemptinrange(max_retries):try:resultself.chat_completion(messages)ifresult:# 有效响应returnresultexceptExceptionase:ifattemptmax_retries-1:# 指数退避重试time.sleep(retry_delay*(2**attempt))# 所有重试失败返回空字符串而不是抛出异常return6.2 环境交互容错理论要求保证探索过程的持续性和完整性代码实现# stage1_triplet_generation.py: _get_agent_actiondef_get_agent_action(self,initial_obs,history,exploration_memory):try:responseself.client.chat_with_retry(messages)actionparse_action_from_response(response)returnactionifactionelselook around,response# 默认动作exceptExceptionase:logger.error(fFailed to get agent action:{e})returnlook around,None# 降级策略7. 总结理论与实现的完美对齐7.1 核心贡献的实现验证完全自监督代码中无需手工标注数据从环境交互开始自动生成记忆驱动探索MemoryManager类完整实现了理论中的记忆树机制质量控制保证多层次的置信度过滤和执行验证确保任务质量多样性维持去重机制和概念引导确保任务分布的多样性7.2 理论公式的代码映射理论概念数学表示代码实现交互沙盒E ( S , A , P ) \mathcal{E} (S, \mathcal{A}, \mathcal{P})E(S,A,P)WebshopEnvironmentManager任务映射F task : E → Δ ( G ) F_{\text{task}} : \mathcal{E} \to \Delta(\mathcal{G})Ftask:E→Δ(G)AgentFlowPipeline.run_full_pipeline()记忆树M { ( e , B e ) } M \{(e, B_e)\}M{(e,Be)}MemoryManager.memory_cache三元组z t ( s t , a t , o t ) z_t (s_t, a_t, o_t)zt(st,at,ot)Tripletdataclass任务抽象( g i : j , z i : j , σ i : j ) (g_{i:j}, z_{i:j}, \sigma_{i:j})(gi:j,zi:j,σi:j)Taskdataclass置信度σ i : j ∈ [ 0 , 1 ] \sigma_{i:j} \in [0,1]σi:j∈[0,1]Task.confidencefield7.3 技术创新点LLM驱动的智能摘要将大量交互历史压缩为有用的探索指导增量记忆更新高效的记忆管理支持持续学习多阶段pipeline清晰的任务合成流程每个阶段职责明确质量控制机制多层次的质量保证确保最终任务的可执行性和多样性CuES框架的代码实现完美体现了理论设计每个理论概念都有对应的代码实现展现了从理论到实践的完整转化过程。这种紧密的理论-实践对齐为Agentic RL中的任务稀缺问题提供了优雅而实用的解决方案。后记2025年12月17日于上海。在grok和glm 4.6辅助下完成。