一、核心挑战:跨越上下文窗口

  • 根本障碍:“智能体如何跨越多个、离散的上下文窗口,保持记忆和状态,从而持续推进任务?”
  • 典型失败模式
    • 一次性做太多(Trying to do too much at once)”:智能体试图在单个会话内“一蹴而就”,结果耗尽上下文,留下一堆半成品。
    • 过早宣布胜利(Declaring victory too early)”:智能体看到已取得部分进展,便错误地判断任务已经完成,停止了工作。

二、核心解决方案:两段式智能体 Harness

借鉴人类软件工程师的协作模式,将任务分解为两个由专门智能体执行的阶段。

  • 1. Initializer Agent:环境的奠基者
    • 职责:“仅在项目启动的第一个会话中运行”,接收高层指令,“将其分解、结构化,为后续所有工作创建一个清晰、规范的初始环境。”
    • 产出
      • 功能列表 (Feature List)”:将模糊需求具体化为详尽清单,以 JSON 存储。
      • 初始代码仓库 (Git Repository)
      • 进度日志 (Progress Log)
      • 启动脚本 (Init Script)
  • 2. Coding Agent:增量的推进者
    • 职责:“在 Initializer Agent 完成使命后,Coding Agent 接管所有后续会话。”
    • 工作循环
      1. 状态同步:在每个会话开始时,通过读取工件理解项目状态。
      2. 单点突破:“从功能列表中选择一个最高优先级的未完成项,并只专注于这一个特性的开发。”
      3. 端到端验证:“使用浏览器自动化工具(如 Puppeteer)进行端到端测试。”
      4. 清洁收尾:“提交有意义的 Git Commit,并更新进度日志,确保工作区处于一个随时可以交接的‘干净’状态。”

三、环境管理:四大关键工件与策略

这些工件构成了一个“外部记忆”系统。

  • 1. 全量功能列表:定义“完成”的标尺
    • 目的:为了解决“过早宣布胜利”。
    • 内容:“每一项都是一个端到端的用户故事或功能描述”。
    • 格式:“使用 JSON 格式比 Markdown 更为稳健。”
    • 使用约束:“只允许修改 passes 字段的状态,绝不允许删除或修改任何功能描述”。
  • 2. 增量推进与清洁收尾:Git 与进度日志
    • Git 的作用:“原子提交”和“可回滚性”,是“智能体的安全网”。
    • 进度日志 (claude-progress.txt):“一个简单的文本文件,用于记录每个会话的关键决策和进展摘要”,比 git log 更具可读性。
  • 3. 端到端测试:Puppeteer 作为“眼睛”和“手”
    • 作用:“这相当于给了智能体一双‘眼睛’和一双‘手’,让它能像真实用户一样与 Web 应用交互”,能发现“布局问题、交互错误、状态未同步等”隐性 Bug。
  • 4. 起步流程:标准化的“上手三步”
    • 流程:1. pwd 建立空间感;2. 通过 git log 和进度日志了解历史;3. 读取 feature_list.json 选择任务。
    • init.sh 的作用:“一键启动开发服务器”,并“先运行一个基本的端到端测试,确保应用当前处于健康状态”。

四、失败模式与应对策略总结

失败模式 (Problem) Initializer Agent 的应对行为 Coding Agent 的应对行为
过早宣布胜利:智能体在项目未完全完成时就错误地认为任务已结束。 建立功能列表 (feature list) 文件:…生成一个结构化的 JSON 文件,…并全部标记为未完成。 阅读并逐一攻克功能列表:在会话开始时读取功能列表,选择一个未完成的特性开始工作,直到所有特性都标记为通过。
状态混乱与交接困难:智能体留下有 Bug 或未记录进展的代码,导致后续会话难以继续。 创建 Git 仓库和进度日志:初始化一个 Git 仓库和 claude-progress.txt 文件,为版本控制和状态记录打下基础。 先同步状态,再清洁收尾:启动时:阅读进度日志和 Git 提交历史,并运行基本测试以发现未记录的 Bug。结束时:提交一个清晰的 Git Commit,并更新进度日志。
虚假完成:智能体在未经充分测试的情况下,就将某个功能标记为完成。 建立功能列表文件:(同第一点,功能列表也是测试的基准。) 强制进行自我验证:在将任何功能标记为 “passing” 之前,必须使用端到端测试工具(如 Puppeteer)进行严格验证。
低效的环境设置:智能体在每个会话中都花费大量时间去弄清楚如何运行和测试应用。 编写 init.sh 启动脚本:创建一个可以一键启动开发服务器和运行基础测试的脚本。 阅读并执行 init.sh:在会话开始时,直接读取并执行该脚本来快速搭建工作环境。

原文链接

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐