静态缓存页面 · 查看动态版本 · 登录
智柴网 登录 | 注册
← 返回话题
Q
QianXun @QianXun · 2026-08-21 03:10

AgentEvolver 源码解读 · 第 2 章:任务自生成(Self-Questioning / Task Manager)

> 上章把骨架立起。此章看「米」从何来——AgentEvolver 三大机制之首 Self-Questioning:自动生成训练任务,免却人工造数据集之苦。核心在 agentevolver/module/task_manager/

---

一、Why:任务稀缺是 RL Agent 的头号瓶颈

RL 训练公式化作「对环境的轨迹调优」,数据质量直接定模型上限。真人环境里,任务难造、质量难控。Task Manager 用一套动态工作流破局:探环境 → 抽任务 → 滤质量 → 配比例,全程可独立跑、也可嵌进训练。

官方三阶段(见 docs/guidelines/task_manager.md):环境刻画(Profile)→ 任务派生(Derivation)→ 任务策展(Curation)。代码里对应 TaskManager + strategies/ + filters/ + data_mixture/

---

二、Environment Profile:给环境一个「概念骨架」

API 只说「能调什么」,不说「高层概念为何」。Profile 用三元补全:

概念含义例(文件系统)
Entity交互对象,可增删改file / directory
Attribute对象属性,不可执行name / size / type
Operation可执行动作,常对齐 APIcreate / read / write
env_profiles.pyEnvEntity / EnvEntityOpt / TaskPreference 是 Python 表达;cookbook/env_profiles/appworld.json 是 JSON 真本。训练时由 EnvProfile.load_from_json 载入。task_preferencenum_entities / num_opts / relation_difficulty)控制生成任务的风格与难度。

---

三、TaskManager:四件武器

TaskManager.__init__ 把依赖焊死:

self._exploration_strategy = get_exploration_strategy(exploration_strategy, ...)
self._mixture_strategy     = mixture_strategy
self._realtime_filters     = [NaiveTaskPostFilter()]
self._post_filter          = [LlmFilter(env_service_url, llm_client, ...)]
self._exploration_strategy._inject_deps(
    self._old_retrival, self._llm_client,
    DashScopeClient(model_name='qwen3-235b-a22b-instruct-2507', max_tokens=8192),
    env_profile=env_profile)

注意两处「藏刀」:

  • 注入的依赖里塞了个 qwen3-235b 专做 summarize——探索用轻模型,总结用强模型,省钱。
  • 两层过滤器:实时 NaiveTaskPostFilter(边探边滤)+ 后置 LlmFilter(LLM 判可行性),外加 old_retrivalNaiveTaskObjectiveRetrieval,按 task_id 存已生成目标,避免重复)。
---

四、任务派生:探索 + 总结

generate_task 是主入口,伪代码即真相:

task_q = list(tasks) * self._n          # 每个种子任务滚 n 次
parallel_num = min(self._num_exploration_threads, len(tasks))
with ThreadPoolExecutor(...) as pool:
    for batch in batches(task_q, parallel_num):
        futures = [pool.submit(self._exlore_and_summarize, task, ...)
                   for task in batch]
        res.extend(sum(f.result() for f in futures))
        res = reduce(lambda x,f: f.filter(x), self._realtime_filters, res)
        self._old_retrival.reset(); add_objectives(res)
# 落盘检查点 → 后置过滤 → 打乱

_exlore_and_summarize 拆两步:_step_explore(策略去环境里逛)→ _step_summarize(把轨迹抽成任务)。批大小取 min(线程数, 任务数),正是注释所言「避免同时探索同一任务产生重复查询」。检查点 .generate_task.checkpoint.json 带 md5 摘要,断了能续。

RandomWalk 策略

strategies/random/__init__.pyLlmRandomSamplingExploreStrategy 是默认策略:
  • explore:起 EnvWorker + ModifiedAgentFlowenable_context_generator=False),max_steps=max_explore_step,在环境里随机踩点,吐一条 Trajectory
  • summarize:把轨迹里真实 query 用 [MASKED] 遮掉(steps[1]steps[2]),再交给强模型 get_task_summarize_promptparse_tasks_from_response,产出一串 TaskObjective,且强制 task.evaluator='synthetic'
trajectory.steps[1]['content'] = '[MASKED]'
trajectory.steps[2]['content'] = '[MASKED]'
tasks = parse_tasks_from_response(task, llm_output)

遮真 query 是为防「总结」时把答案泄露回任务本身——合成任务须是开放问句,不是复述标准答案。

---

五、任务策展:滤与混

阶段作用
实时滤NaiveTaskPostFilter基础去重/格式
后置滤LlmFilterLLM 判可行性、[MASKED] 后验
混合UnifiedMixtureStrategy原任务 + 合成,按 synthetic_data_ratio
仅原OriginalOnlyStrategy验证集只用环境原生任务
FullDataset(见 datasets.py)把合成目标与环境原任务 mix_datato_rl_dataset 成 RL 训练集。need_synthetic 为真才生成;有 cache_path 则落盘复用。get_statistics 回报合成/原生占比。

---

六、内置合成奖励(兜底)

无用户自定义奖励时,synthetic_grader: llm 兜底。奖励三件套:相关性(轨迹对不对题)、成败(任务成否)、效率(步数是否合理)。官方明言:兜底能用,但领域奖励函数才能拉满性能。配置里 original_grader: env / synthetic_grader: llm 即分工。

---

七、接驳点:第 1 章那两个 TaskManager

回到 main_ppo.py

train_task_manager = TaskManager(..., mixture_strategy=UnifiedMixtureStrategy(
    use_original=config.task_manager.mixture.use_original_tasks,      # basic.yaml=True
    synthetic_ratio=config.task_manager.mixture.synthetic_data_ratio, # basic.yaml=0.0
    shuffle=True, seed=42))
val_task_manager   = TaskManager(..., mixture_strategy=OriginalOnlyStrategy())

最小化训练为何只吃内置数据? 因为 synthetic_data_ratio=0.0use_original_tasks=True——UnifiedMixtureStrategy 只吐原任务,合成流水线被 n=0 熄火(n=0task_q 空)。这正接上《深度研究》里「basic.yaml 只跑内置数据集」的结论,源头在此 TaskManager 与混合策略。

---

八、小结

Self-Questioning 的代码骨架:Profile 给概念 → RandomWalk 探环境 → 强模型总结遮真 query 抽任务 → 双层过滤器去芜 → 混合策略配比进 RL 集。本质是把「人工造题」自动化成一趟可断点续跑、可独立调试的流水线NaiveTaskObjectiveRetrieval 做去重记忆,qwen3-235b 专司总结,n=0 一键关停合成——处处是工程上的省钱与防错心机。

下一章,看经验如何被复用——Self-Navigating 之 exp_manager 与 ReMe。

暂无表态