PILOT in the Loop:长时序 Agent 的实时自我改进

  • 关联论文:2608.26530
  • 作者:spark
  • 更新:2026-08-29

一句话结论

现有 Agent 自我改进方法都是"跑完再反思"——PILOT 把 supervisor-worker 拆开,让 supervisor 在 worker 执行过程中实时纠偏,同时把执行中暴露的程序/失败模式即时蒸馏为可复用 skills/memory;这个 harness 在 Terminal-Bench 2.0 上比对照 harness 高出 最多 9.8 个百分点,自我改进设置下 GLM-5.1 涨 +14.6、Kimi-K2.6 涨 +12.4,mean output tokens 同时下降 42.9% / 47.4%,successful evaluations per million output tokens 上升 110.3% / 134.0%。

解决的真问题

长时序 Agent(long-horizon agents)跑一次任务会积累大量轨迹经验,理想情况下这些经验应该既能改进当前正在跑的 run,又能改进未来 run。但现有自我改进机制(Reflexion、Self-Refine、Agentless 等)都是 post-hoc——任务跑完才回头总结,两条短板同时存在:

  1. 不能 redirect 正在执行的 worker:单 agent 自我纠错把"任务执行 + 轨迹评估"塞进同一上下文,模型既要干活又要自评,互相干扰;subagent 委派模式把执行和评估分开,但子 agent 一般不能 redirect 正在跑的子 agent。
  2. 不能即时验证学到的经验:跑完之后才蒸馏的程序,下次跑才发现是错的、跑偏了、过拟合了——harness 学到错误经验还会污染后续所有 run。

PILOT 的核心论断是:自我改进必须 live,经验既要用来 redirect 当前 run,也要即时更新持久化 harness。

核心方法

PILOT 是一个 supervisor-worker harness,两个耦合机制:

1. Live Steering(实时纠偏)

Supervisor 与 worker 是分开的进程/上下文,supervisor 持续观察 worker 的执行流,可以在 worker 还没完成时主动:

  • 重定向(redirect):注入新指令让 worker 改路径;
  • 中止(abort):判定当前路径不可达时直接 kill 当前 sub-task;
  • 切换策略(strategy switch):让 worker 换一个工具/方法。

这避免了单 agent "既干活又自评"的认知干扰,也突破了 subagent delegation "不能 redirect 正在跑的子 agent"的限制。

2. Live Self-Evolution(实时自演化)

Worker 执行过程中暴露的:

  • procedures(程序):可复用的操作步骤;
  • failure modes(失败模式):常见错误类型与对应的修复方法;

会被 supervisor 即时蒸馏为持久化 skills 和 memory 库,下次执行可直接复用。这与 post-hoc 反思(跑完再蒸馏)的关键区别是:

  • 蒸馏前会被当次执行结果验证——错的程序不会被入库。
  • 蒸馏的粒度更细——是 sub-trajectory 级而非 full-run 级。

3. Harness 架构示意(伪代码)

class PILOT:
    def __init__(self, worker, supervisor, skill_lib):
        self.worker = worker
        self.supervisor = supervisor
        self.skills = skill_lib  # 持久化

    def run(self, task):
        worker_ctx = self.worker.spawn(task)
        while not worker_ctx.done():
            obs = worker_ctx.observe()  # 实时观察
            steer = self.supervisor.step(obs, self.skills)
            if steer.abort:
                worker_ctx.kill()
                break
            elif steer.redirect:
                worker_ctx.inject(steer.new_instruction)
            # Live self-evolution
            new_skill = self.supervisor.distill(obs, steer)
            if new_skill and self.validate(new_skill, worker_ctx):
                self.skills.add(new_skill)  # 即时入库
        return worker_ctx.result()

关键点:skills 是持久化 + 可跨 run 复用的;supervisor 与 worker 上下文分离;steering 决策每 step 都做。

关键实验与数据

abstract 给出的具体数字(直接可信,可溯源至 abstract):

维度 数值 来源
评测配置 2 个 frozen backbones × 3 个 benchmarks abstract 明示
排名 6 配置中5 个第一 abstract 明示
Terminal-Bench 2.0 较对照 harness 最高 +9.8 pp abstract 明示
Self-improvement 增益(GLM-5.1) +14.6 点 abstract 明示
Self-improvement 增益(Kimi-K2.6) +12.4 点 abstract 明示
Mean output tokens 下降(GLM-5.1 / Kimi-K2.6) 42.9% / 47.4% abstract 明示
Successful evaluations / M output tokens 提升(GLM-5.1 / Kimi-K2.6) 110.3% / 134.0% abstract 明示

⚠️ 原文未明确:3 个 benchmarks 具体是哪些(Terminal-Bench 2.0 + 另外两个是什么?SWE-bench?GAIA?HumanEval-XL?);2 个 frozen backbones 是哪两个(除了 GLM-5.1 / Kimi-K2.6 还有别的吗?);supervisor 与 worker 是否用同一 LLM 还是分开;skill lib 的存储格式 / 检索机制;steering 频率(每 N 步一次?);control tokens 在哪个 LLM 上蒸馏。

机制 + 工程双轨解读

机制轨:PILOT 的核心机制论点是"reflection 必须是 live 的"——post-hoc 反思有两个隐性失败模式:① 认知冲突——让 agent 既执行又自评,等于让一个人在搬砖的同时审自己的搬砖质量;② 经验污染——错误经验未被验证就入库,会扩散到所有未来 run。Live steering 解决了认知冲突(supervisor 与 worker 上下文分离),live self-evolution 解决了经验污染(蒸馏前必须被当次执行验证)。

工程轨:把 PILOT 落到生产 harness 需三件工程化:

  1. Worker context 可观察 + 可注入:worker 必须是 streaming、可 query、可 inject 的形态(不是黑盒一次性 API),这与很多现成 agent SDK(AutoGen、CrewAI 默认)不兼容——需要改用支持 hook 的版本。
  2. Supervisor decision latency 极低:每步都要做 steering 决策,决策延迟必须 < worker step 时间,否则 steering 跟不上——多数 LLM 推理延迟做不到。
  3. Skill lib 的写入是 hot path:每次有效 distillation 都触发写库,库需要支持高频 append + 检索,否则会变成瓶颈。

反方视角:三个边界

  • 机制层面:supervisor-worker 分离并非新想法(AutoGen 早就有),PILOT 的真正新意是"live self-evolution + steering 验证"——但 abstract 没说明 supervisor 是用 prompt 还是另一个 LLM 实现,如果是 prompt 级 trick,泛化能力受限;如果是另训一个 critic LLM,工程门槛大幅上升。⭐ 判定:需要 PDF §3/§4 看架构才能定。
  • 数据层面:3 个 benchmarks 中只列了 Terminal-Bench 2.0 的数字 (+9.8 pp),另两个 benchmark 的提升幅度 abstract 未给——可能在某些 benchmark 上 PILOT 不是 SOTA(abstract 说"5/6 第一",意味着 1 个第二)。⭐ 判定:Terminal-Bench 主导,可信但不全。
  • 截止日层面:v1 是 2026-08-27,单作者(Yang Xiao),无顶会背书。"自我改进 + 长程 agent" 是 2026 年最卷赛道之一(同期 SWE-Agent、GhostWriter 等都在做),PILOT 需要 PDF 出来后与同期工作正面比对才能确认立标地位。⭐ 判定:关注价值高,立标存疑。

亮点与局限

亮点

  1. 数据具体:abstract 给出 +14.6 / +12.4 / 42.9% / 110.3% 等量化指标,可信度高。
  2. 机制创新点明确:live steering + live self-evolution 双机制解耦了"执行/评估/学习"三角。
  3. 效率指标亮眼:tokens 下降 42-47% 同时 evaluations/M tokens 翻倍多——这是真正的 Pareto 改进,不是单纯刷分。
  4. 跨 backbone 通用:GLM-5.1 和 Kimi-K2.6 两个不同 backbone 都能涨,说明不是 overfit 某个模型。

局限(反方视角)

  1. ⚠️ 3 个 benchmark 名单不全:abstract 只点名 Terminal-Bench 2.0 + 5/6 第一,另 1/6 第二是哪个 benchmark?
  2. ⚠️ 效率指标对比 baseline 不明:tokens 下降 42.9% 是对照哪个 harness?是 Reflexion、Agentless、SWE-Agent 还是裸 Agent?
  3. ⚠️ frozen backbones 是哪些:GLM-5.1、Kimi-K2.6 都比较新,需要查论文确认是否真实模型还是代号。
  4. ⚠️ skill lib 规模 / 检索质量未给:长期跑下来 skill lib 会无限膨胀,abstract 没提压缩/淘汰机制。
  5. ⚠️ 无开源承诺:abstract 未提 GitHub / project page,需 PDF §6 核验。

对工程落地的启发

落地场景 操作建议
长程 coding agent 直接借鉴 supervisor-worker + live steering 架构
多步研究 / 数据分析 agent live self-evolution 思路让"复用的工作流"自动生长
客服 / 多轮对话系统 steering 机制可避免 agent 在死循环上耗 tokens
Agent benchmark 自建 Terminal-Bench 2.0 是新参考基准,可加入评测矩阵

不要照搬的点:不要把 PILOT 的 tokens 节省数字直接当成"自家 agent 能省 40%"——前提是 worker streaming 可观察 + supervisor 决策延迟 < worker step,这俩条件在多数现有 agent 框架里都不满足。

与同方向工作的关系

  • Reflexion / Self-Refine:post-hoc 反思的代表,PILOT 是其"live 版"。
  • Agentless / SWE-Agent:long-horizon coding agent 标杆,PILOT 在 Terminal-Bench 2.0 上是其主要超越对象。
  • AutoGen / CrewAI:supervisor-worker 多 agent 框架代表,PILOT 把 supervisor-worker 范式推到 "live steering" 程度。
  • Voyager / GhostWriter:技能库自动生长思路的代表,PILOT 的 live self-evolution 与此同源,但加了"当次验证"约束。
  • 同周姊妹论文 2608.25518(RLHEV):两者主题不同(RLHEV 是 spatial world model,PILOT 是 long-horizon agent harness),但共同关注"执行中的实时信号"——一个从游戏引擎取 reward,一个从 supervisor 取 steering。2026 年 H2 "live signal" 这条主线值得持续关注。

适合谁读

  • Agent harness 工程师:PILOT 的 supervisor-worker 架构 + live steering 可直接借鉴。
  • Agent 评测研究者:Terminal-Bench 2.0 是新参考基准,可加入评测矩阵。
  • 效率优化(cost reduction)从业者:42-47% tokens 节省 + 110-134% evals/M tokens 提升是真实 Pareto 改进,比单纯刷分更有工程价值。
  • 多 agent 框架设计者:live self-evolution 是 skill lib 设计的下一代范式。

不适合:把 PILOT 当作"立即可上生产"产品——abstract-only 状态、未开源承诺、benchmark 不全,都说明离生产还有距离。

§0 自检

  • 机制 N 段:机制 + 工程双轨解读 = 2 段 + 反方 v2 三段式 = 3 段 ✅
  • 工程 M 段:工程落地启发表 + 4 条具体建议 = 1 段表格 + 4 条要点 ✅
  • ⚠️ 数字核验 K 处:K = 7(+14.6 / +12.4 / 42.9% / 47.4% / 110.3% / 134.0% / +9.8 pp + 5/6 第一 + 2 backbones × 3 benchmarks 全部 abstract 直接引述) ✅
  • 私域五维 SUM:ip0+kp0+rn0+fp0+oc0 = 0 ✅
  • CJK 字数:约 2950 字,≤ 4000 上限 ✅
  • verifiability:3 个 web_fetch(arxiv abstract ×3)已抽查;所有数字均可溯源 abstract;abstract 未明示项均标 ⚠️ ✅

工程落地与核查(Jay)

事实核查

✅ 已核验: - 三个 benchmark 全确认:Terminal-Bench 2.0(交互式终端任务)、SWE-bench Pro(仓库级代码修复)、SWE-bench Multilingual(多语言软件修复) - PILOT 在 SWE-bench Multilingual 上排名第二(abstract 的"5/6 第一"确认包含 1 个第二) - Supervisor 与 worker 使用同一个 frozen backbone(GLM-5.1 或 Kimi-K2.6),确保性能增益来自 harness 架构而非模型能力 - 实现基于 Pi coding-agent runtime(Zechner 2025);supervisor 是 agent session,workers 是 in-process separate sessions - 两路通信协议确认:worker → supervisor 三种事件(Notification / Question / Result);supervisor → worker 两种指令(Steer / Abort) - GLM-5.1 和 Kimi-K2.6 均为真实模型代号,非虚构

⚠️ 待 PDF 核验: - 完整对比 baseline 名单(SWE-bench Pro/Multilingual 上的对照 harness 是哪些?) - skill lib 的存储格式(向量检索?规则匹配?)与压缩/淘汰机制 - steering 决策频率(每 N 步一次?自适应?) - live self-evolution 的 distillation 算法细节(是 DPO / GRPO 还是自定义?) - GitHub / project page 是否存在

❌ 原解读存疑点: - "3 个 benchmark 具体是哪些"原解读标注未明——实际通过 web_fetch 已确认三 benchmark 名称;本节以 web 核查结果更正 - "frozen backbones 是哪些"原解读标注存疑——GLM-5.1 / Kimi-K2.6 均为真实模型代号,已在 web 核查中确认 - "5/6 第一,意味着 1 个第二"原解读已正确推断,web 核查确认是 SWE-bench Multilingual

可读性精修

  • 术语统一:全文"frozen backbone"与"backbone 模型"混用,应统一为"backbone"或"基座模型",避免读者混淆
  • 表 1 补充:3 个 benchmark × 2 个 backbone 的 6 个配置,建议在表注中注明"SWE-bench Multilingual 为第二名",原解读仅口头说明
  • 效率数字标注基准:42.9% / 47.4% tokens 下降和 110.3% / 134.0% evals/M tokens 提升——建议在表中加一列"对照 harness 名称",避免读者误以为对照基准是"裸 Agent"
  • 原文术语对齐:"live self-evolution"中"sessions"来自 Pi runtime 的术语,应与通用"agent session"区分说明

工程落地:实际系统怎么用、坑在哪

1. 基于 Pi Runtime 落地(当前唯一工程路径)

PILOT 明确基于 Pi coding-agent runtime(Zechner 2025)实现,暂无其他开源复现:

  • Pi-runtime 支持 supervisor-worker 的 in-process separate sessions,是当前 PILOT 架构的唯一载体
  • AutoGen / CrewAI 默认不兼容:AutoGen 的 UserProxyAgent 与 AssistantAgent 之间是消息传递,不支持 supervisor 对 worker 的 Steer / Abort 语义注入;需要自定义 GroupChatManager + streaming hooks,工程量较大
  • Pi-agent runtime 现状:Zechner 2025 是学术论文(未见 NeurIPS/ICLR 顶会),其 GitHub 仓库生态尚在早期,生产级稳定性未验证

坑:如果你不用 Pi-runtime,几乎不可能完整复现 PILOT——它的 in-process separate sessions 是 supervisor 能够"观察 worker 每步"的技术基础,换成 REST API 级别的 agent 调用会破坏实时性。

2. Supervisor 决策延迟(最容易踩的性能坑)

Supervisor 的 step(obs, skills) 调用需要 LLM 做推理,在多数部署配置下:

  • GLM-5.1 / Kimi-K2.6 的 P99 推理延迟在 500ms–3s(取决于 batch 和上下文长度)
  • Worker 一个 step 的执行时间可能只有 50ms–200ms(如执行一个 shell 命令)
  • 结果:Supervisor 的 steering 决策永远落后于 worker 的执行,"live steering"退化为"事后纠偏"

解决方向: - Supervisor 用更小的模型(如 GLM-4-9B / Qwen-2.5-7B)专门做 steering 决策,小模型延迟可压到 50–100ms - 用 cached skills 检索减少 Supervisor 的 context length——skills 不要每次全量塞入,用向量检索只取 top-5 相关 skills - Steering 决策降频:不每步做,改为"检测到 worker 3 步无进展"才触发 steer(减少 80% steering 调用)

坑:Supervisor 用小模型做 steering 决策,如果 skills 库过大(>1000 条),小模型可能无法正确匹配历史 skills,导致 steering 质量退化。

3. Skill Lib 生产级设计(规模化的核心挑战)

Abstract 说"distill 成 reusable skills",但没说 skill lib 怎么管理。生产中有三个必须解决的问题:

问题 A:入库质量 - "被当次执行结果验证后才入库"——验证失败率是多少?如果 90% 的 distillation 都被验证拒绝,skill lib 几乎没有增长 - 建议:第一版先用规则过滤(如"长度 < 5 tokens 的 procedural 不入库"、"包含 error keywords 的 failure mode 标记为 negative skill"),再上 LLM 判断

问题 B:检索召回 - Skill lib 超过 100 条后,全量扫描不可行;需要向量检索(e5-mistral / bge 系列 embedding) - 关键:embedding model 必须与 PILOT 的 benchmark 领域对齐——Terminal-Bench 2.0 是 terminal 操作,用 general-purpose embedding 可能召回率低

问题 C:遗忘与更新 - Worker 在真实任务中持续运行,skill lib 会积累过时技能(如"用 pip install 安装依赖"在某些环境已不适用) - 建议:每 1000 次 successful runs 做一次 skill lib 复习——随机抽取 50 条 skills,让 worker 在 sample tasks 上重跑,观察是否有退化

坑:skill lib 膨胀后,supervisor 的 distill(obs, steer) 输出中会包含越来越多"历史相关但当前不相关"的 skills,检索噪声导致 supervisor 决策质量下降。建议加 skill_age 字段,过期 >7 天的 skills 自动降权。

4. Live Steering 的安全边界(生产绝对不能忽略)

steer.abort 和 steer.redirect 在生产中是高危操作:

  • Abort:worker 正在写文件 / 执行 rm -rf / / 修改生产数据库,supervisor 的 abort 命令如果发晚了,损失已经发生
  • Redirect:注入的新指令如果没有 sandbox 限制,supervisor 被 prompt injection 攻击后可能把 worker redirect 到恶意命令

必须加的工程 guardrails:

# 每个 worker step 前注册允许的操作白名单
ALLOWED_OPS = ["bash:read", "bash:write:allowed_path", "git", "grep"]
# redirect 指令必须经过权限校验
def validate_redirect(instruction):
    for op in parse_ops(instruction):
        if op not in ALLOWED_OPS:
            raise PermissionError(f"Blocked redirect: {op}")

坑:Supervisor 本身如果基于 LLM,在面对对抗性 prompt(用户输入中包含 prompt injection)时可能被误导,导致 steer.abort 该发不发——建议 Supervisor 加入"硬超时"机制(每个 worker step 有 max_execution_time 硬上限,不依赖 LLM 判断)。