长周期 Claude Agent 如何减少上下文丢失
围绕状态外置、证据索引、工具输出裁剪和阶段交接设计可恢复工作流。
把任务状态与聊天记录分开
Agent 可以因为资料遗漏、摘要失真、工具输出过多或中间结论未经验证而偏离目标,不能把所有失败都解释成“早期信息权重自然衰减”。应用应明确保存目标、不可变约束、任务状态和证据位置,每一轮只提供与当前步骤相关的部分。
Anthropic 的长任务工程文章强调分阶段推进和清晰交接。下面的设计是原创实现建议,不是官方 SDK 内置能力,也不代表经过生产压力测试。模型的系统提示属于指导,真正的读写边界还需要应用权限控制。
最小状态结构
例如处理一组公开产品手册,状态可记录待核对文档、已确认条款与证据页码。完成一项必须有外部证据,模型说“完成”不足以更新最终状态。以下纯 Python 演示验证证据后更新状态,已本地断言测试,不连接模型或数据库。
from copy import deepcopy
def mark_done(state, task_id, evidence):
if not evidence or not evidence.strip():
raise ValueError("完成项必须有证据位置")
updated = deepcopy(state)
task = next(t for t in updated["tasks"] if t["id"] == task_id)
task.update(status="done", evidence=evidence)
return updated
state = {"goal": "核对手册的保修期限", "tasks": [
{"id": "D01", "status": "pending", "evidence": None}
]}
new = mark_done(state, "D01", "D01 第4页:保修期限条款")
assert state["tasks"][0]["status"] == "pending"
assert new["tasks"][0]["status"] == "done"控制进入上下文的内容
工具返回大段日志时,把原始输出存到受控位置,只把错误摘要、关键行和路径交给模型;保留可回查信息,不要只剩无法证明的结论。筛选结果必须附工具状态和时间,防止过期成功响应覆盖新的失败。
在阶段边界生成交接:当前目标、已确认事实、引用位置、未解决冲突、失败尝试和下一步。对摘要做抽查后才替换旧上下文;API 压缩的返回块要依文档处理,工具调用和工具结果的关联不能被任意打散。
用故障演练而非承诺验证
状态文件本身也要有版本号和修改时间。若多个执行者可能同时更新,增加锁或事务机制,避免最后一次保存覆盖他人的进展;发现输入文件变化时,将依赖旧输入的结论重新标为待验证,而不是继续沿用旧检查点。
原创演练:在第二份手册核对后停止进程,再从保存状态恢复。检查它是否重复处理已完成项、把待核验项当结论,或丢掉“只使用指定文件”的约束。另测试损坏状态、源文件更新和工具超时。
设置预算、连续失败阈值和人工暂停入口;涉及发布、付款或删除等副作用时独立检查授权。该流程减少重复解释的机会,不能保证长期任务必然正确。示例未实现并发锁、持久化事务与网络恢复,生产系统应补齐。
参考来源
资料核对日期:2026-10-04。涉及产品与账户条件时,请以当前官方说明为准。