核心内容摘要
Qwen-Image-2512-ComfyUI实战:快速生成高清图片,新手友好教程
原文标题Effective harnesses for long-running agents原文作者Justin Young原文地址https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents智能体在跨多个上下文窗口持续工作时依然面临不少挑战。
本文从人类工程师的工作方式中获得灵感探索了一种更适合长时间运行智能体的协作方式.随着 AI 智能体能力不断提升开发者开始尝试让它们承担更复杂的任务——这些任务往往需要持续数小时甚至数天才能完成。
但一个关键难题始终存在如何让智能体在多个上下文窗口之间持续、稳定地推进工作。
长时间运行智能体的核心问题在于它们只能在离散的会话中工作而每一次新会话开始时几乎“忘记”了之前发生的一切。
可以类比为一个轮班的软件项目每一位新工程师接手时都完全不了解上一班做了什么。
由于上下文窗口有限而复杂项目又不可能在单个窗口内完成智能体必须具备某种“跨会话衔接”的能力。
为了解决这个问题我们为 Claude Agent SDK 设计了一套双层方案使其能够在多个上下文窗口中高效协作初始化智能体Initializer Agent只在第一次运行负责搭建环境、明确目标和约束。
编码智能体Coding Agent在后续每个会话中持续推进工作并为下一次会话留下清晰、可接续的工作痕迹。
相关代码示例可以参考官方的 Quickstart。
长时间运行智能体的问题 (The long-running agent problem)Claude Agent SDK 是一个通用且能力很强的智能体框架既能写代码也能完成“获取上下文 → 规划 → 执行”的复杂任务。
它支持上下文压缩理论上可以让智能体长时间工作而不耗尽上下文。
但现实是光靠压缩远远不够即使是像 Opus
5 这样的前沿模型在 Claude Agent SDK 中循环运行如果只给一个高层目标例如“构建一个 claude.ai 的克隆版本”依然无法稳定产出一个真正可用的生产级 Web 应用。
在实践中我们观察到 Claude 主要会出现两类失败模式。
失败模式一一次性做太多智能体往往试图“一次性把整个应用写完”。
结果通常是在实现过程中耗尽上下文留下半成品功能没有清晰的记录或说明下一次会话启动时新的智能体只能猜测之前发生了什么从而不得不花大量时间把基础功能重新跑起来。
即便使用了上下文压缩这种情况仍然频繁发生因为压缩并不能保证信息传递得足够清晰失败模式二过早宣布完成在项目后期智能体可能看到已经实现了一部分功能就直接判断“任务完成”而实际上仍有大量工作没完成。
这促使我们把问题拆解为两个核心目标在一开始就搭好基础环境明确完整的功能范围和工作方式避免智能体随意发挥让每一次会话都只做“可交付的增量开发”并在结束时把环境整理到一个“干净状态”这里的“干净状态”指的是代码可以直接合并到主分支没有明显 Bug结构清晰、文档完整下一位“工程师”也就是下一个智能体可以立刻继续工作而不是先解决遗留的问题。
在内部实验中我们采用了如下两阶段方案初始化智能体在第一次创建会话时使用一个专门的提示词要求智能体完成以下工作编写init.sh用于启动开发环境创建claude-progress.txt用于记录每次会话的工作内容初始化 Git 仓库并提交第一笔 commit明确当前项目状态编码智能体后续每个会话中智能体只负责执行一个小的、明确的功能提交代码更新进度记录其中的关键点是新会话开始时智能体必须能明确知道当前项目状态。
这通过claude-progress.txt Git 提交历史来实现本质上模仿了人类工程师的协作方式环境管理 (Environment management)在更新版的 Claude 4 Prompting Guide 中我们已经提到多上下文窗口任务应当为第一个上下文窗口使用不同的提示词这个提示词的目的是让初始化智能体一次性建立好后续所有编码智能体所需的上下文基础。
下面是几个关键组成部分。
功能列表Feature List为防止智能体“拍脑袋完成项目”我们要求初始化智能体基于用户的需求生成一份完整、细粒度的功能清单。
以 claude.ai 克隆为例这个清单包含 200 多个功能点例如用户可以新建一个聊天输入问题按下回车并看到 AI 回复。
所有功能在初始状态下都标记为passes: false让后续智能体始终清楚“什么才算真正完成”。
{ 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 }我们明确要求编码智能体只能修改passes字段禁止删除或改写功能描述经过多次尝试我们发现JSON 比 Markdown 更安全模型更不容易“修改”结构化数据。
循序渐进 Incremental progress在这个环境下每一轮编码智能体只能处理一个功能点这一步非常关键直接遏制了智能体“一把梭”的倾向同时我们要求智能体每次修改后使用清晰的 commit message 提交到 Git在进度文件中写明本次做了什么这样一来智能体既可以利用 Git 回滚错误修改也能快速恢复到稳定状态避免重复踩坑。
测试 (Testing)另一个
常见问题是智能体在没有真正验证的情况下就把功能标记为完成如果没有明确要求Claude 往往只做单元测试或用curl打一下接口却忽略了端到端是否真的可用。
在 Web 应用场景中一旦明确要求 Claude 使用浏览器自动化工具、像真实用户一样操作端到端测试的质量就会显著提升使用 Puppeteer MCP 后Claude 能发现很多“代码看不出来”的问题当然工具也是有局限性的例如 Claude 无法识别浏览器原生 alert 弹窗因此依赖这些弹窗的功能更容易出 BugClaude 使用 Puppeteer MCP server 测试的屏幕截图快速进入状态Getting up to speed在这套完整机制下每个编码智能体在开始工作前都会执行一套固定流程运行pwd确认当前可操作目录阅读 Git 日志和进度文件查看功能列表选择尚未完成的最高优先级功能同时init.sh脚本可以一键启动开发服务器并跑一轮基础 E2E 测试确保项目处于健康状态。
如果项目运行有问题智能体会优先修复问题而不是继续堆新功能以避免问题更加严重一个典型的会话开始时会显示以下助手消息[Assistant] Ill 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 theres 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以下是智能体失败模式及解决方案问题初始化智能体编码智能体Claude 过早的认为项目已经完成了设置功能列表文件根据输入规范设置一个结构化的 JSON 文件其中包含端到端功能描述列表在会话开始时查看功能列表文件。
选择一个功能开始进行开发Claude 留下的环境存在bug或未记录的进展创建初始 git 仓库和进度记录文件会话开始时请阅读进度说明文件和 Git 提交日志并在开发服务器上运行基本测试以发现任何未记录的错误。
会话结束时提交 Git 代码并更新进度Claude 将功能过早的标记为已完成创建功能列表文件只有在仔细测试通过后才能将功能标记为“通过”Claude 不知道如何运行这个应用提供init.sh脚本阅读init.sh开启新的会话未来方向 (Future work)以上这套方案证明通过合适的框架控制智能体确实可以在多个上下文窗口中持续推进复杂任务。
但仍有值得探索的问题例如是一个通用编码智能体更合适还是多智能体分工更高效测试、QA、代码清理等角色是否应由专业智能体承担此外这套方法目前主要针对 Web 全栈应用未来也有潜力推广到科研、金融建模等更长期的智能体任务中。
-END -如果您关注前端AI 相关领域可以扫码进群交流添加小编微信进群关于奇舞团奇舞团是 360 集团最大的大前端团队非常重视人才培养有工程师、讲师、翻译官、业务接口人、团队 Leader 等多种发展方向供员工选择并辅以提供相应的技术力、专业力、通用力、领导力等培训课程。
奇舞团以开放和求贤的心态欢迎各种优秀人才关注和加入奇舞团。