查看: 9|回复: 0

看到很多朋友问过一个问题,为什么给我的 Claude Code 安排任务,它都不会一口气执行完,而是跑最多几十分钟就停下来,然后问我要不要继续。例如让它把项目中的单测全部补全(大概 1k 个),它跑了大概 200 个就停下来了。

[复制链接]

7

主题

0

回帖

21

积分

新手上路

积分
21
发表于 昨天 21:47 | 显示全部楼层 |阅读模式
看到很多朋友问过一个问题,为什么给我的 Claude Code 安排任务,它都不会一口气执行完,而是跑最多几十分钟就停下来,然后问我要不要继续。例如让它把项目中的单测全部补全(大概 1k 个),它跑了大概 200 个就停下来了。


cc 并不是对一句话任务抗拒,如果不理解它的执行机制,很难设计出能跑长程任务的 harness 流程。

在执行一个超大任务的时候,单 agent 的执行流程大概是这样的:1)刚开始是高效模式,指令遵循效果特别棒;2)跑了大概 80k tokens 的时候,context 开始逼近 compact 阈值;3)紧接着,对话历史被压缩为摘要,模型开始忘记刚才修复单测的细节;4)再经过一两轮 auto-compact,它甚至会开始重复检查已修复的测试,当触发 maxTurns 并且 response 没有 ToolUse 指令时,模型会退出任务,然后开始询问用户:"我已经修复了约 200 个测试,要继续吗?"

如果你在当前 session,回复继续,接下来的工作,它会做的更加不符合预期,并且退出得更快。

任何试图在一个 agent session 内完成海量工作的方案,最终都会碰到 context 膨胀 → compact → 信息丢失 → 效率下降的问题。

其实优化方向也特别简单,设计一个主-子 Agent 的运行模式(任务调度器),同时将任务进度写到 file system 中(进度持久化),每个子 agent 有独立 context、独立退出逻辑,主 agent 只负责调度和进度追踪,从而绕过单一 agent 的所有瓶颈。

因此给 cc 的指令需要包含至少这三部分:

1)任务分解。不要给一个无边界的指令(如修复所有单测),而是先扫描出所有失败测试,按目录或模块分组,每组 15-30 个,作为一个独立子任务。关键是每个子任务的 prompt 必须自包含——写清楚文件路径、错误现象、期望行为,不能写"根据之前的分析来修复",因为子 agent 看不到父 agent 的历史。

2)进度持久化。在项目根目录维护一个 progress.json,记录 completed / failed / pending 三个列表。主 agent 每轮调度前读这个文件决定下一批任务,子 agent 完成后更新对应条目。这样即使主 agent 自己被 compact,重读文件就能恢复全部状态。

3)失败策略。子 agent 报错时,如果错误可修复,用 SendMessage 继续同一个子 agent(保留错误上下文更高效);如果方向完全错了,启动新的子 agent 避免锚定在错误路径上;多次失败则上报用户,不要无限重试烧 token。

Claude Code 其实已经内建了这套能力。最直接的方式是启用 Coordinator Mode(输入 /coordinator),主 agent 自动变成纯调度者:它不执行任何实际工具调用,只负责理解子 agent 的返回结果、合成下一步的具体指令、并行派发独立任务;而每个子 agent 会通过 AgentTool 启动,它们有独立 context。

记住一句话就行了:设计多个 agents,各司其职、快进快出,把进度交给文件系统来记忆。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:2776601884@qq.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|青ICP备2025004122号-1

在本版发帖
关注公众号
返回顶部