title: " Fable 5上下文管理 | 长任务不跑偏" category: 人工智能 tags:
- 大模型API中转站
- 4SAPI
- Claude Fable 5
- Context Engineering
- 长时任务
- Agent Memory
- 日志审计 description: "Fable 5 适合长时间自主运行,但越能自己干活,越需要上下文账本。本文给出 CONTEXT.md、EVIDENCE.md、HANDOFF.md 三件套,让长任务有当前状态、有证据索引、有交接包,并说明如何用 4SAPI 做长任务日志、预算和审计。"
前两篇讲了 Fable 5 的 Prompt 迁移和四要素写法。
这一篇讲更难的一层:
长时间自主运行时,怎么管上下文。
Fable 5 很适合跑长任务。
它可以连续调工具、读文件、改代码、跑测试、写文档、自己判断下一步。
但越能自己干活,就越要回答一个问题:
它跑了很久以后,还在正确的轨道上吗?
这篇不重复讲“长任务要有记忆”这种大原则。
第148期已经讲过 Subagent 和记忆。
这一篇换一个更落地的角度:
给 Fable 5 准备三份文件。
CONTEXT.md:当前任务状态。
EVIDENCE.md:每个完成声明对应的证据。
HANDOFF.md:给下一次会话或下一个人看的交接包。
上下文管理就是为了解决这个问题。
不是让模型看更多。
而是让模型在每一步看到正确的信息,并且知道哪些信息必须被证据支撑。
1. 长任务最怕三件事
Fable 5 跑长任务,最常见的风险有三类。
第一,跑偏。
一开始是修 bug。
跑着跑着变成重构。
再跑着跑着开始优化无关文件。
第二,虚构进度。
它说测试已经通过。
但其实没跑测试。
它说文件已经写入。
但实际只是计划写。
第三,忘记历史。
前面已经否掉的方案,后面又拿出来。
你明确说不能动的目录,过几轮又被碰到。
这些问题不是靠一句“认真一点”解决的。
要靠上下文工程。
2. 检查点:只在真正需要人时暂停
很多人用长程 Agent,会犯两个极端错误。
一种是完全放飞:
你自己做完。
结果它可能在危险动作上也不停。
另一种是过度打断:
每一步都问我。
结果自动化失去意义。
更好的检查点写法是:
只在工作真正需要我介入时才暂停:
破坏性或不可逆的操作、真正的范围变更、或只有我能提供的信息。
其余情况持续推进,完成后汇报。
这句话很关键。
它定义了三类必须暂停的情况:
| 暂停条件 | 例子 |
|---|---|
| 破坏性或不可逆 | 删除数据、切换 DNS、部署生产、发送邮件 |
| 范围变更 | 从修 bug 变成重构系统 |
| 独占信息 | 需要账号、密钥、业务决策、客户确认 |
除此之外,测试失败、代码审查意见、数据异常、格式不对,应该让 Fable 5 自己消化并推进。
这就是长任务的好用边界。
3. 允许/禁止:把边界写成清单
Fable 5 主动性很强。
有时候会做你没要求但它觉得“顺手有用”的事。
比如:
创建备份分支。
起草邮件。
修改配置文件。
访问无关目录。
顺手重构。
有些动作可能真有价值。
但生产里不能默认允许。
所以要把边界写成允许/禁止清单:
本次任务的边界:
允许:
- 读取代码库
- 修改 src/ 下与本任务相关的文件
- 运行测试和 lint
- 更新本任务对应的文档
禁止:
- 发送任何邮件或消息
- 创建或删除分支
- 修改生产配置
- 执行部署命令
- 访问 src/ 以外的目录
- 输出真实 API Key
超出边界但你认为有价值的动作,先提出理由并等我确认,不要直接做。
这种结构比散句更稳。
因为模型在长上下文里更容易回忆:
允许清单。
禁止清单。
超界先问。
企业接入 4SAPI、MCP、Claude Code、Codex 这类工具时,这个边界尤其重要。
否则模型可能拿着一个有权限的 Key,把“建议”变成“操作”。
4. 进度汇报必须绑定证据
长任务里最危险的失败模式之一,是虚构进度。
不是胡编结论那种明显幻觉。
而是它在汇报里写:
测试已通过。
文件已更新。
配置已完成。
接口已验证。
但对应工具其实没有执行。
解决方式很简单:
汇报进度时,每一条完成声明都必须对照实际的工具执行结果:
测试确实跑过且通过、文件确实写入、命令确实返回成功。
没有对应工具结果支撑的事项,标注为“未验证”,不要报告为“已完成”。
这条提示词很值钱。
它把“声明”和“证据”绑起来。
以后 Fable 5 就不能轻易说:
我完成了。
它必须区分:
已完成。
已尝试但失败。
已计划但未执行。
未验证。
企业里做 Agent 工作流,这一点必须写进默认系统提示或 Skill。
因为没有证据绑定,日志审计就会失真。
5. CONTEXT.md:把当前状态从聊天里拿出来
Fable 5 最怕把“当前状态”只放在聊天历史里。
聊天一长,状态会被压缩。
会话一换,状态会丢。
所以长任务启动后,建议先让它维护一个 CONTEXT.md。
内容不需要复杂:
任务目标:
- 本轮到底要完成什么
当前状态:
- 已完成什么
- 正在做什么
- 下一步是什么
边界:
- 允许做什么
- 禁止做什么
- 哪些动作必须暂停确认
开放问题:
- 哪些信息还缺
- 哪些判断待验证
关键点是:
CONTEXT.md 只写当前任务,不写历史百科。
它是驾驶舱。
不是知识库。
每次 Fable 5 继续工作前,先读这份文件,比让它从几万字聊天历史里重新捞状态稳得多。
6. EVIDENCE.md:给每个“已完成”编号
第148期讲过“检查点”。
这里再往前推一步:
不要只让它说已完成。
让它给已完成事项配证据编号。
例如 EVIDENCE.md:
E-001
声明:登录页单测已通过。
证据:npm test -- LoginForm.test.ts 返回 exit 0。
时间:2026-07-03 16:20。
E-002
声明:4SAPI Base URL 已统一到配置文件。
证据:src/config/model.ts 第 12 行读取 MODEL_BASE_URL。
时间:2026-07-03 16:31。
E-003
声明:生产 DNS 未修改。
证据:本轮没有执行 DNS 写操作,只有读取。
时间:2026-07-03 16:40。
然后最终汇报里不要写空话:
“测试已通过”后面要带 E-001。
“配置已修改”后面要带 E-002。
“生产未变更”后面要带 E-003。
这样用户不用翻工具日志,也能快速定位证据。
如果没有证据编号,就只能写:
未验证。
7. HANDOFF.md:把最终总结变成交接包
长任务跑完以后,最终消息很容易写成“工作线程的最后一句”。
更好的方式是同时生成 HANDOFF.md。
它不是流水账,而是交接包:
本轮结果:
- 做成了什么
- 没做什么
- 哪些风险还在
关键证据:
- E-001
- E-002
- E-003
需要用户确认:
- 是否允许下一步切换生产配置
- 是否接受当前折中方案
下次继续时:
- 先读 CONTEXT.md
- 再读 EVIDENCE.md
- 然后从“下一步”开始
这份文件的价值在于:
换会话不丢上下文。
换人接手也能继续。
第二天回来不需要重新解释。
8. notes/:只存可复用经验
CONTEXT.md、EVIDENCE.md、HANDOFF.md 解决当前任务。
notes/ 解决长期经验。
可以让 Fable 5 这样写:
提示词:
把本次任务中未来会复用的经验写入 notes/。
不要记录当前任务状态,那应该写在 CONTEXT.md。
不要记录证据流水,那应该写在 EVIDENCE.md。
只记录下次能少踩坑的方法、规则和决策原因。
这样四类文件分工很清楚:
| 文件 | 保存什么 |
|---|---|
CONTEXT.md |
当前任务状态 |
EVIDENCE.md |
完成声明和证据 |
HANDOFF.md |
交接和下一步 |
notes/ |
可复用经验 |
9. 最终汇报:不要写给一个全程围观的人
Fable 5 长时间跑任务后,最终汇报有时会变得很难读。
它可能写:
已完成 CDN->源站->头部校验->回源安全链路。
下一步按前述策略继续。
这对一直盯着的人也许能懂。
但用户可能几个小时没看。
最终汇报应该重新铺垫。
可以给它这段规则:
工具调用之间的简略速记没问题,那是工作过程。
但最终总结面向一个没看过过程的读者。
如果你已经长时间在用户不在场的情况下工作,
你的最终消息是他们对这一切的第一眼。
先说结果,再说需要用户做的一两件事。
不要使用你工作中自创的缩写或标签,除非重新解释。
提到文件、配置、参数时,每一个都配一句白话说明。
如果必须在简短和清晰之间选择,选清晰。
这条对企业工作流很有用。
因为很多 Agent 不是现场汇报,而是跨夜跑完第二天给人看。
最终总结必须像交接文档。
不是工作线程尾巴。
10. 4SAPI 怎么配合上下文账本
长任务一跑,模型调用会很多。
你不能只看最终消息。
要在 4SAPI 或自己的任务日志里记录:
| 字段 | 用途 |
|---|---|
task_id |
把多轮调用归到同一任务 |
context_version |
本轮读取的是哪版 CONTEXT.md |
evidence_ids |
本轮产出的证据编号 |
handoff_version |
是否生成新的交接包 |
agent_role |
planner、worker、reviewer、summary |
model |
用了哪个模型 |
effort |
质量和成本档位 |
status |
completed、failed、unverified |
cost |
当前累计成本 |
这样你才能复盘:
它哪里跑偏了?
哪里虚构进度了?
哪里该暂停却没暂停?
哪个角色成本最高?
哪一版上下文导致了错误判断?
哪条完成声明没有证据?
哪个交接包之后任务质量下降?
4SAPI 的价值不是只做转发。
在长程 Agent 里,它是模型调用账本。
上下文三件套是任务账本。
两者对上,才方便审计。
11. 完整示例:4SAPI 接入改造的上下文账本
假设你要让 Fable 5 改造一个项目,把散落的模型调用统一走 4SAPI。
可以让它先创建三份文件。
CONTEXT.md 示例
# CONTEXT.md
任务目标:
- 将当前项目中的模型 API 调用统一收口到 4SAPI 兼容入口。
- 保留现有业务行为,不做无关重构。
成功标准:
- 所有模型调用从统一配置读取 Base URL 和 API Key。
- 不再出现硬编码模型供应商地址。
- 调用日志包含 project、environment、model、cost 或可扩展字段。
- 测试通过。
允许:
- 修改 src/config、src/lib/ai、tests 下与模型调用相关的文件。
- 新增示例 env 文档。
- 运行测试和 lint。
禁止:
- 输出真实 API Key。
- 修改生产部署配置。
- 执行发布命令。
- 改动无关业务逻辑。
下一步:
- 搜索硬编码 Base URL。
- 建立统一模型配置。
- 补最小测试。
EVIDENCE.md 示例
# EVIDENCE.md
E-001
声明:已定位 3 处硬编码模型 API 地址。
证据:rg "api.openai|anthropic|base_url" 返回 src/lib/ai/client.ts、
src/jobs/summarize.ts、src/tools/review.ts。
E-002
声明:已新增统一配置读取。
证据:src/config/model.ts 新增 MODEL_BASE_URL、MODEL_API_KEY、MODEL_NAME。
E-003
声明:测试已通过。
证据:npm test -- ai-client 返回 exit 0。
E-004
声明:生产配置未修改。
证据:本轮 git diff 不包含 deploy、infra、terraform、docker-compose.prod。
HANDOFF.md 示例
# HANDOFF.md
本轮结果:
- 模型调用入口已经统一到 src/config/model.ts。
- 3 处硬编码地址已移除。
- 单测通过。
还没做:
- 生产环境变量尚未配置。
- 4SAPI 控制台 Key 分组和预算还需要人工确认。
需要用户确认:
- 是否创建 prod 专用 4SAPI Key。
- 是否把 reviewer 模型单独拆一个低额度 Key。
下次继续:
1. 先读 CONTEXT.md。
2. 对照 EVIDENCE.md 检查是否有新改动。
3. 配置 staging 环境变量。
4. 不要直接改 production。
这个例子的重点不是文件名。
而是让 Fable 5 的工作从“聊天流”变成“可交接的任务流”。
12. 一条长任务启动模板
可以直接复制:
我正在让你执行一个长时间自主任务:[任务目标]。
成功标准:
- [可验证标准 1]
- [可验证标准 2]
- [可验证标准 3]
检查点:
只在破坏性或不可逆操作、真正的范围变更、或只有我能提供的信息出现时暂停。
其余问题请自行排查、修复、验证并继续推进。
边界:
允许:[允许读取/修改/运行的范围]
禁止:[发送、删除、部署、改生产配置、输出密钥等]
超出边界但你认为有价值的动作,先说明理由并等我确认。
进度汇报:
每一条“已完成”都必须有工具执行结果支撑。
没有证据的事项标注为“未验证”。
把完成声明写入 EVIDENCE.md,并给每条证据编号。
上下文账本:
- 用 CONTEXT.md 维护当前状态
- 用 EVIDENCE.md 记录证据编号
- 用 HANDOFF.md 写最终交接
- 用 notes/ 记录可复用经验
最终汇报:
面向没看过过程的人,先说结果,再说需要我做什么。
这条模板适合:
代码迁移。
SEO/GEO 审计。
CDN 配置。
工作流重构。
4SAPI 接入治理。
大规模文档整理。
13. 总结
Fable 5 能跑长任务,是优势。
但长任务不是放飞。
长任务要有:
CONTEXT.md。
EVIDENCE.md。
HANDOFF.md。
notes/。
4SAPI 调用账本。
个人使用,可以简单写进提示词。
团队使用,建议沉淀成 Skill 或系统提示。
企业使用,必须配合 4SAPI 这类模型 API 网关,把调用日志、预算、角色、任务结果记录下来。
下一篇讲循环:
/goal、/loop、/schedule。
怎么让 Fable 5 在明确条件下自己迭代,而不是每次等你手动发下一句。