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——任务跑完才回头总结,两条短板同时存在:
- 不能 redirect 正在执行的 worker:单 agent 自我纠错把"任务执行 + 轨迹评估"塞进同一上下文,模型既要干活又要自评,互相干扰;subagent 委派模式把执行和评估分开,但子 agent 一般不能 redirect 正在跑的子 agent。
- 不能即时验证学到的经验:跑完之后才蒸馏的程序,下次跑才发现是错的、跑偏了、过拟合了——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 需三件工程化:
- Worker context 可观察 + 可注入:worker 必须是 streaming、可 query、可 inject 的形态(不是黑盒一次性 API),这与很多现成 agent SDK(AutoGen、CrewAI 默认)不兼容——需要改用支持 hook 的版本。
- Supervisor decision latency 极低:每步都要做 steering 决策,决策延迟必须 < worker step 时间,否则 steering 跟不上——多数 LLM 推理延迟做不到。
- 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 出来后与同期工作正面比对才能确认立标地位。⭐ 判定:关注价值高,立标存疑。
亮点与局限
亮点
- 数据具体:abstract 给出 +14.6 / +12.4 / 42.9% / 110.3% 等量化指标,可信度高。
- 机制创新点明确:live steering + live self-evolution 双机制解耦了"执行/评估/学习"三角。
- 效率指标亮眼:tokens 下降 42-47% 同时 evaluations/M tokens 翻倍多——这是真正的 Pareto 改进,不是单纯刷分。
- 跨 backbone 通用:GLM-5.1 和 Kimi-K2.6 两个不同 backbone 都能涨,说明不是 overfit 某个模型。
局限(反方视角)
- ⚠️ 3 个 benchmark 名单不全:abstract 只点名 Terminal-Bench 2.0 + 5/6 第一,另 1/6 第二是哪个 benchmark?
- ⚠️ 效率指标对比 baseline 不明:tokens 下降 42.9% 是对照哪个 harness?是 Reflexion、Agentless、SWE-Agent 还是裸 Agent?
- ⚠️ frozen backbones 是哪些:GLM-5.1、Kimi-K2.6 都比较新,需要查论文确认是否真实模型还是代号。
- ⚠️ skill lib 规模 / 检索质量未给:长期跑下来 skill lib 会无限膨胀,abstract 没提压缩/淘汰机制。
- ⚠️ 无开源承诺: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 判断)。