11. 真实任务串联:修复测试失败¶
用“修复一个测试失败”可以把 Claude Code 的主要机制串起来。用户输入“修复这个测试”,入口层先把请求交给查询引擎。查询引擎构造上下文:默认系统提示告诉模型如何作为编程智能体行动,CLAUDE.md 提供项目规则,git 快照告诉模型当前分支和工作区状态,历史消息提供前文,工具结构说明告诉模型可以运行测试、读取文件、编辑文件。
第一步通常是观察。模型会请求 Bash 运行特定测试或整个测试命令。运行时不会因为模型请求就直接执行,它会解析 Bash 输入,检查命令是否匹配允许/拒绝/询问规则,判断是否可以使用沙箱,必要时询问用户。若权限允许,Bash 处理器才运行命令。测试输出被截断或保留后作为工具结果回填。
第二步是定位。模型看到失败堆栈后,会请求读取相关代码、测试文件或配置文件。文件读取结果不仅作为工具结果进入下一轮采样,也会更新已读文件状态。后续如果上下文过长触发压缩,运行时可以把近期读取过的重要文件片段重新附加回来,避免模型在压缩后失去关键代码。
第三步是修改。模型会请求文件编辑或文件写入。文件工具同样经过结构校验、钩子和权限判断。编辑成功后,工具结果会说明修改结果,文件历史和归因也会更新。模型下一轮不是凭空相信自己改对了,而是根据编辑结果继续决定是否查看文件或运行测试。
第四步是验证。模型再次请求 Bash 跑测试。测试通过时,工具结果成为最终回答的依据;测试失败时,循环继续。这个过程中最大轮数、预算和上下文窗口都可能限制任务长度。如果测试输出很长,工具结果会被压缩或截断;如果历史过长,自动压缩会把旧过程摘要化,再附加必要文件、计划和技能信息。
失败分支会自然回到同一条链路。测试命令被权限拒绝时,模型下一轮会看到拒绝原因,可以请求授权、改用只读检查或说明限制;工具参数无效时,错误工具结果会提示模型修正参数;沙箱阻止命令时,运行时会按策略询问或返回受限结果;压缩遗漏了关键事实时,模型可能重新读取文件或要求用户补充上下文。
如果用户中途中断,中断控制器会通知模型请求或工具执行停止。运行时会补齐必要的工具结果,保持消息成对,转录记录仍可恢复。如果用户稍后恢复,会话会从 JSONL 重建主线,恢复压缩边界、文件历史和任务状态,模型能接着看到“测试跑到哪一步、哪些文件已读、哪些修改已完成”。
这个例子展示的是闭环任务执行。模型负责基于上下文选择下一步;工具系统负责把下一步变成受控的本地动作;权限系统决定动作能否发生;记忆和转录记录保证动作结果能被后续推理利用;压缩和恢复保证长任务不会因为上下文窗口或进程中断而断裂。