Derick
1534 words
8 minutes
让AIAgent交替工作:构建跨会话的高效开发流程
**当AI技术从实验室走向生产环境时,其成功与否不再取决于模型参数规模或算法精妙程度,而取决于能否融入严谨的软件工程体系**。

在使用AI工具开发一个商业软件项目时,无论采用哪种研发模式,每个Agent只能工作一个班次,而且下一班的subagent完全不记得上一班做了什么。这就是当前AI代理在处理长期任务时面临的核心挑战。

尽管Claude Agent SDK具备上下文压缩(compaction)等高级功能,但仅靠这些还不足以让代理持续构建高质量的应用程序。在实际测试中,即使是Opus 4.5这样的前沿模型,在多次会话后仍会失败,主要表现为两种模式:

  1. 过度尝试:代理试图一次性完成整个应用,导致上下文耗尽,留下半成品
  2. 提前完成:代理看到某些功能已实现,就错误地宣布项目完成
graph TD
    A[初始提示] --> B{代理行为}
    B -->|过度尝试| C[一次性实现太多功能]
    B -->|提前完成| D[看到部分功能就宣布完成]
    C --> E[上下文耗尽]
    D --> F[功能不完整]
    E --> G[后续会话无法继续]
    F --> G

解决方案:双代理架构#

Anthropic团队开发了一个双阶段解决方案,让Claude能够在多个上下文窗口中高效工作:

1. 初始化代理(Initializer Agent)#

第一个会话使用专门的提示,让初始化代理设置环境:

  • 创建init.sh脚本启动开发服务器
  • 生成claude-progress.txt进度跟踪文件
  • 进行初始git提交,记录添加的文件

2. 编码代理(Coding Agent)#

后续每个会话都使用编码代理,专注于:

  • 增量式迭代开发(一次只处理一个功能)
  • 留下清晰的工件供下次会话使用
  • 保持环境在”干净状态”(适合合并到主分支的代码)

核心组件详解#

特性列表:防止过度尝试和提前完成#

初始化代理会生成一个包含200+功能的详细列表,每个功能都有明确的测试步骤:

{
    "category": "functional",
    "description": "New chat button creates a fresh conversation",
    "steps": [
      "Navigate to main interface",
      "Click the 'New Chat' button",
      "Verify a new conversation is created",
      "Check that chat area shows welcome state",
      "Verify conversation appears in sidebar"
    ],
    "passes": false
  }

这个JSON格式的文件防止了代理随意修改或删除测试,确保功能完整性。

增量进展:一次只做一件事#

编码代理被明确指示一次只处理一个功能。每次会话结束时,代理需要:

  • 提交代码到git,附带描述性提交信息
  • 更新进度文件,记录已完成的工作
  • 确保代码状态干净,无重大bug
flowchart LR
    A[读取进度文件] --> B[查看git日志]
    B --> C[选择最高优先级未完成功能]
    C --> D[实现功能]
    D --> E[端到端测试]
    E --> F{测试通过?}
    F -->|是| G[更新功能状态为passing]
    F -->|否| H[修复bug]
    H --> E
    G --> I[git提交]
    I --> J[更新进度文件]

端到端测试:确保真正完成#

Anthropic发现,代理倾向于在没有充分测试的情况下标记功能为完成。解决方案是提供浏览器自动化工具(如Puppeteer),让代理像真实用户一样测试应用:

url=https%3A%2F%2Fwww-cdn.anthropic.com%2Fimages%2F4zrzovbb%2Fwebsite%2Ff94c2257964fb2d623f1e81f874977ebfc0986bc-1920x1080.gif

典型会话流程#

一个典型的编码代理会话开始时会执行以下步骤:

[Assistant] I'll start by getting my bearings and understanding the current state of the project.
[Tool Use] <bash - pwd>
[Tool Use] <read - claude-progress.txt>
[Tool Use] <read - feature_list.json>
[Assistant] Let me check the git log to see recent work.
[Tool Use] <bash - git log --oneline -20>
[Assistant] Now let me check if there's an init.sh script to restart the servers.
<Starts the development server>
[Assistant] Excellent! Now let me navigate to the application and verify that some fundamental features are still working.
<Tests basic functionality>
[Assistant] Based on my verification testing, I can see that the fundamental functionality is working well. The core chat features, theme switching, conversation loading, and error handling are all functioning correctly. Now let me review the tests.json file more comprehensively to understand what needs to be implemented next.
<Starts work on a new feature>

常见失败模式及解决方案#

问题初始化代理行为编码代理行为
过早宣布项目完成设置特性列表文件,包含基于输入规范的所有端到端功能描述会话开始时读取特性列表文件,选择单个功能处理
留下有bug或未记录进度的环境创建初始git仓库和进度笔记文件会话开始时读取进度笔记和git日志,运行基础测试;会话结束时写入git提交和进度更新
过早标记功能为完成设置特性列表文件自我验证所有功能,仅在仔细测试后标记为”passing”
花时间弄清楚如何运行应用编写init.sh脚本来运行开发服务器会话开始时读取init.sh

未来方向#

虽然这个框架在全栈Web应用开发中表现出色,但仍有改进空间:

  1. 多代理架构:专业化代理(测试代理、质量保证代理、代码清理代理)可能在软件开发生命周期的子任务中表现更好
  2. 领域泛化:将这些原则应用到科学研究、金融建模等其他需要长期运行代理的领域

结论#

构建能够跨多个会话持续工作的AI代理,关键在于环境管理增量进展。Anthropic的解决方案证明,通过精心设计的初始化流程和严格的进度跟踪机制,AI代理可以在复杂项目中保持连贯性和效率。

真正的产品突破不在于模型能力的提升,而在于工作流程的设计。当我们在提示工程中融入软件工程的最佳实践时,AI代理就能像人类团队一样,在长期项目中取得成功。

让AIAgent交替工作:构建跨会话的高效开发流程
https://blog.ithuo.net/posts/effective-harnesses-for-long-running-agents/
Author
Derick
Published at
2025-10-10