长运行Agent的有效框架:跨上下文窗口的一致性进度
来源: Anthropic Engineering Blog
作者: Justin Young
发布日期: 2025-11-26
分类: ai-agents
概述
AI Agent在跨多个上下文窗口工作时面临根本性挑战:每个新会话开始时都没有之前的记忆。Anthropic通过让Claude Opus 4.5仅用高层提示构建claude.ai克隆的实验,发现了两种典型失败模式——过度野心执行和过早完成声明。文章提出了初始化Agent+编码Agent的两部分架构,以及从人类软件工程实践中汲取灵感的一系列关键实践。
核心内容
问题的本质
上下文窗口有限且复杂项目无法在单个窗口中完成。关键矛盾在于”每个新会话开始时都没有之前的记忆”——Agent工作在离散会话中,而项目需要连续进度。
两种典型失败模式
通过让Claude Opus 4.5尝试仅用高层提示构建claude.ai克隆,团队发现:
- 过度野心执行:Agent试图一次性实现整个应用,在实现过程中耗尽上下文,导致功能残缺且未文档化
- 过早完成声明:后续Agent会话观察到已有进度后,错误地判断项目已完成
两部分解决架构
初始化Agent
首个会话使用专门提示建立:
init.sh脚本用于启动开发环境claude-progress.txt文件记录Agent活动- 初始git提交展示已创建的文件
编码Agent
后续会话遵循结构化指令:
- 对单个功能进行增量开发
- 保持代码在可合并的干净状态
- 维护全面的文档记录
功能列表设计
创建包含200+粒度化功能的结构化JSON文件,例如”用户可以打开新聊天、输入查询、按回车并看到AI响应”。关键设计决策:
- 功能带
passes字段,防止Agent删除或编辑测试规范 - JSON格式比Markdown更能抵抗模型诱导的格式破坏——这是一个重要的实践发现
增量进度策略
Agent每次会话只处理一个功能,而非尝试完整实现:
- 使用描述性消息提交git
- 编写进度摘要
- 使用git回退有问题的更改
测试与验证
提供浏览器自动化工具(Puppeteer MCP),要求Agent像人类用户一样测试。但仍存在局限——Agent无法通过现有工具看到浏览器原生alert弹窗。
会话初始化协议
每个编码Agent会话按标准五步流程开始:
- 环境检查:运行
pwd确认工作目录 - 上下文收集:审查git日志和进度文件
- 功能选择:读取功能列表,选择最高优先级的未完成功能
- 服务器启动:执行
init.sh启动开发服务器 - 基础测试:验证基本功能仍然正常运行
失败模式对策矩阵
| 问题 | 初始化Agent方案 | 编码Agent方案 |
|---|---|---|
| 过早完成 | 创建包含所有需求的全面功能列表 | 会话开始时读取功能列表;只处理单个功能 |
| 代码混乱 | 初始化git仓库和进度笔记 | 先读进度文件和git日志;通过测试验证;结束时提交git |
| 未测试就标记完成 | 建立功能列表结构 | 标记前进行彻底自验证 |
| 环境熟悉耗时 | 编写可执行init.sh | 会话开始时读取init.sh文档 |
来自人类工程实践的启发
研究表明,了解”优秀软件工程师每天做什么”对Agent框架设计极有价值。核心实践包括:
- 清晰的会话交接
- 全面的进度文档
- 增量任务分解
- 系统化的验证流程
未来方向
- 单一通用Agent vs 专业多Agent架构的取舍
- 专门的测试、QA和代码清理Agent的潜在价值
- 从Web开发扩展到科学研究和金融建模等领域
个人评价
这篇文章直面了当前Agent开发中最实际的瓶颈之一:如何让Agent在多次会话间保持一致的进度。解决方案并不依赖技术突破,而是借鉴了人类软件工程中最基本的实践——版本控制、进度文档、增量开发、系统化测试。这种”工程方法论而非技术方案”的思路非常务实。JSON比Markdown更抗格式破坏的发现也是一个很有价值的实践经验。文章展示了Agent框架设计如何从”给AI一个任务”转变为”为AI构建一个可持续的工作环境”。
评分: 4.90/5.0
分类置信度: high
相关链接: