AI Agent多 Agent 协作Task-AdaptiveHarnessRoutaAI Coding

任务自适应 Harness:从 Trace 到多 Coding Agent 的协作记忆

Phodal··原文链接
收录于 2026/5/16 23:26:08

任务自适应 Harness:从 Trace 到多 Coding Agent 的协作记忆

作者: Phodal | 发布时间: 2026-04-22 来源: phodal


前言

在 Thoughtworks(现 Inspire)的最后一个月,作者为一个项目准备了一套基于 Claude Code、Web UI、Proxy、Agent Trace 和 Skills 的 AI Coding 端到端方案,但最终未能在客户项目中落地。

其中一个核心设计是基于 ACP 协议的 Agent Trace——记录每个 Agent 执行过程中的关键行为(工具调用、文件读取、上下文访问等),让协作历史第一次成为可分析和复用的数据。

虽然这套方案当时没有真正进入客户项目,后来却在 Routa 项目中找到了更合适的落点:提升多 Agent 系统的协作质量

代码详见:https://github.com/phodal/routa


从 Agent Trace 到协作历史

Cursor 的参照

Cursor 提出的 Agent Trace 提供了一个很好的参考:把 AI 生成代码背后的贡献、对话和文件范围记录成标准化数据,强调开放、可互操作、供应商中立的格式。

Agent Trace 真正有意思的地方在于:Agent 的执行过程可以被结构化记录下来,成为一种新的工程数据资产

Routa 的实现

在 Routa 中,基于 ACP,把 Agent 的执行过程转换成类似 Agent Trace 的 session JSONL 格式。它记录的不只是最终改了哪些代码,而是 Agent 如何完成任务:

  • 工具调用
  • 文件读取
  • 上下文访问
  • 提示词片段
  • 任务切换
  • 失败信号
  • 用户接管

Agent Trace 的价值,不只是记录 AI 做了什么,而是让协作历史第一次成为可以被分析和复用的数据。


第一个试验:Trace Learning 到 Feature Explorer

单条 Trace 的局限

单条 Trace 的价值有限,真正有价值的是多条 session 之间反复出现的关系

  • 某个功能经常访问哪些文件
  • 某类任务总是调用哪些工具
  • 哪些文件是 Agent 反复读取的热点
  • 哪些路径经常出现在失败之前

Feature Explorer

将 Trace 和功能结合起来,构建需求和 Session 的关联

session trace
→ file / tool / context signals
→ feature attribution
→ repeated patterns
→ reusable context

核心洞察: 只有当 Trace 被归因到 Feature,它才从时间顺序上的历史记录,变成有工程含义的信号。

这正是 Trace Learning 的雏形——不是把历史 session 直接塞给模型,而是在模型外部提炼可观察、可审查、可回滚的经验。


Kanban Harness 的质量问题

真实痛点

在 Routa(看板驱动的多 Agent 协作系统)中,一个比「能不能继续记录 Trace」更现实的问题是:

同一张卡片每换一个 specialist,都在重复补课。

  • Dev 要重新找入口文件
  • Review 要重新理解改动边界
  • plan 角色要重新猜功能范围

即使系统已经留下了会话、trace、文件变更和若干制品,下一位 Agent 依然很可能从相当原始的状态开始。

这种冷启动浪费,远比「少一次事后复盘」更伤系统效率。

核心问题

如何将执行后的验证质量,前置到任务启动前的上下文质量?


任务自适应 Harness

定义

Task-Adaptive Harness 是一种围绕当前任务临时组装执行边界的机制。它不预设固定环境,而是在任务开始前,根据目标、证据、历史和约束,收缩出这一次真正需要的上下文、工具和规则。

三条核心原则

① 上下文应由任务决定,不应由历史堆积决定

系统不应默认继承全部历史,再让模型自己筛选重点。而是:

  1. 先从任务出发,明确需要哪些功能、文件和会话
  2. 再反向收缩上下文范围

关键不在于「记住多少」,而在于**「带上的是不是这次任务真正需要的」**。

② 判断应建立在证据上,不应建立在摘要上

与其先生成一段看起来合理的总结,不如优先恢复可验证的证据

  • 命中的文件
  • 相关会话
  • 失败记录
  • 匹配理由

总结只是证据的整理结果,而不是入口。证据不足时,系统应明确降级,而不是假装理解。

③ 约束应在执行前生效,不应在执行后解释

历史和规则的价值,不是在事后用于复盘,而是在任务启动时就介入执行环境,直接影响工具选择、权限范围和行为边界。

约束越早生效,系统越可控,后续偏差也越少。


三种历史形态对比

历史形态什么时候进入上下文好处问题
原始 trace / 对话记录运行结束后细节最完整,可以回放下一轮阅读成本高,接手的人要自己筛
功能复盘做功能分析时能把历史挂到功能和文件上更像事后理解,缺少当前任务角色的约束
任务自适应 Harness会话启动前能提前整理相关会话、文件、模块和任务类型依赖提示和历史命中质量,错命中时要能降置信度

第二个试验:多 Agent 的协作记忆

把 Routa 的实现展开来看,是一种分层的协作记忆

第一层:启动入口

在会话开始之前,系统把任务目标、当前角色和相关历史收成一个可以启动的入口。

Agent 进入任务时,不再只是模糊地「继续做下去」,而是从一个已经带着方向感的起点开始。

第二层:执行边界装配

等到真正启动时,历史被进一步装配成执行边界:

  • 哪些功能线索更相关
  • 哪些文件值得先看
  • 哪些失败应该绕开
  • 哪些工具路径更合适

此时 Harness 不再只是静态配置,而更像任务启动前的一次现场布置

第三层:状态交接

一次委派结束后,系统留下来的不只可供回放的 trace,而是一份可以交接的状态

  • 前面试过什么
  • 哪些路已经走不通
  • 哪些地方还不确定

下一位 Agent 接手时,面对的就不再是一整段漫长 transcript,而是一份真正能接着往下做的上下文

第四层:经验沉淀

随着运行次数变多,状态会继续沉淀:

  • 反复出现的成功路径
  • 常见失败
  • 稳定的工具顺序
  • 验证方式

到这一步,历史影响的已不只是如何回顾过去,也包括下一次如何更好地开始


不同角色的不同需求

同样是历史上下文,不同角色需要看的东西其实不一样

角色关注重点
plan功能意图、拆解方向、相关功能
Dev入口文件、相关模块、接口、之前有没有人踩过坑
review改动边界、风险点、验证路径

小结:从本地 Harness 到全流程 Harness

核心问题

一次任务结束之后,系统到底有没有真的留下什么?

有时候看上去是留下了很多东西。trace 也在,session 也在,文件改动也在,连失败记录都可以回放。可下一位 Agent 接手时,还是要重新找入口,重新判断边界,重新摸一遍现场。

这样看,它们更像是被保存下来的过去,而不是能够继续往前走的历史

回答协作里的老问题

从 Trace,到 Feature Explorer,再到 Task-Adaptive Harness,这条线表面上是在补系统能力,实际上更像是在回答一个协作里的老问题:

前面的人做过的事,怎么才能真的被后面的人接住?

如果这件事能成立,那么 Harness 讨论的也就不只是本地那套提示词、脚本和规则了。它会慢慢变成一种更长的东西,穿过一次次任务启动、交接和继续执行,把方向、边界和经验留下来。

最终结论

所谓多 Agent 协作,也许并不只是把更多 Agent 放进同一个流程里。更重要的是,系统开始学会不让每一次开始,都真的从头开始。