1. 对话历史不是最好的任务数据库
“刚才提过”不保证后续步骤会准确使用。聊天记录通常混着用户想法、模型猜测、工具结果与已经推翻的结论。
Agent 需要知道:目标是什么、有哪些硬约束、什么已经验证、哪些动作已经完成、下一步还缺什么。
这叫任务状态。它可以由程序管理,而不是每次要求模型从几万字对话里重新猜出来。
2. 分清四种信息
| 信息 | 例子 | 保存方式 |
|---|---|---|
| 不可丢约束 | 只查询,不发送申请 | 显式任务字段,并由执行器检查 |
| 已验证事实 | 工具返回可用年假 3 天 | 值、来源、查询时间与权限 |
| 暂时推测 | 下周可能适合休假 | 标记未验证,不能冒充事实 |
| 原始证据 | 制度第三条全文 | 可回查文档或工具回执 |
把未经核实的推测压进摘要,后面再当事实使用,会形成错误自我强化。
3. 工作记忆与长期记忆
工作记忆服务当前任务,例如进度与待办。长期记忆保存未来任务可能需要的授权信息,例如用户偏好、历史决定或持久文档。
长期记忆需要解决:谁能写、谁能读、保存多久、如何纠错、何时删除。不是任何一次对话里的说法都应永久保存。
取回记忆时还要确认适用范围与时效。去年偏好“周五不开会”,今年可能已改变;旧事实不能因存进数据库就永远有效。
4. 全量重传为什么越来越贵
假设固定任务说明占 个 Token,每一步新增记录近似为 个 Token。若第 步把之前全部内容重新发送,教学近似为:
n 步累计输入量:
第二项随步数近似二次增长。取 ,累计约 50000 输入 Token;改成 100 步,约 1050000。
这说的是上述实现与假设下累计输入 Token 的增长,不是所有 Agent 的通用美元费用,也不是说每次推理延迟都按步数平方增长。缓存折扣、输出量、工具费和压缩策略另算。
def full_history_input(steps, base=400, added=200):
return sum(base + added * i for i in range(1, steps + 1))
print(full_history_input(20)) # 50000
print(full_history_input(100)) # 1050000
5. 四种压缩办法
滑动窗口保留最近若干步。简单,但早期关键证据可能移出窗口。
结构化摘要保存目标、结论、约束和未完成事项。能减少长度,但摘要会遗漏或写错,需要保留来源。
外部检索记忆把原始历史移出上下文,需要时再召回。能控制直接输入,但增加检索成本,也会有漏召回。
分层任务把大目标拆为子任务。子任务完成后提交结构化结果,保留证据入口,不必让每一步带着所有原始过程。
通常是组合使用,而不是简单把所有历史都概括成一句话。
6. 预算必须覆盖压缩本身
如果每轮额外调用模型总结历史,总结也消耗输入、输出和延迟。检索服务、向量生成、工具与失败重试同样要计入。
“压缩后更便宜”需要比较总账:原本传输和计费多少,压缩增加多少调用,是否引入错误与重复工作。
前缀缓存可能降低某些重复输入的计算或计费,但命中条件与价格由服务定义,不能直接当所有历史都免费。
7. 如何写可恢复的状态
{
"task_id": "leave-plan-demo",
"goal": "给出休假建议",
"constraints": ["不得提交申请"],
"completed_steps": ["读取制度", "查询本人余额"],
"verified_facts": [
{"name": "available_days", "value": 3, "source": "receipt-001"}
],
"pending": ["核对项目交付日期"],
"budget": {"remaining_steps": 4},
"status": "waiting_for_information"
}
恢复任务时,程序先读取状态与必要证据,再把当前需要的部分送给模型。还应检查记录是否过期、权限是否仍有效、上次操作有没有完成。
任务 ID 不等于幂等键。一次有副作用的操作需要自己的唯一业务标识,防止恢复时重复执行。
8. 哪些信号说明陷入循环
相同参数调用相同工具,没有新增事实;反复生成同一草稿;多次修正没有改善评分;不停请求已知不可访问的资源。
可以记录进展指纹、最近错误和工具调用次数。一旦无进展,停止、补充信息或转人工,而不是继续扩大上下文。
“让 Agent 自己决定停”之外,还应有独立控制器的预算与权限限制。
复习卡片与自测
- 状态保存事实与进度,历史保存过程,证据保存依据。
- 全量历史重传在特定假设下累计输入近似二次增长。
- 摘要有损,检索会漏,压缩也有成本。
- 恢复任务要防止过期状态与重复写操作。
1. 让另一个模型写摘要,就能保证不丢信息吗?
参考答案
不能。仍需检查关键约束与事实,并保留可回查证据。2. 输入 Token 数减少一半,总费用一定少一半吗?
参考答案
不一定。输出、缓存计价、总结调用、检索、工具和重试也可能占费用。3. 为什么“已经执行”和“准备执行”必须分开保存?
参考答案
任务中断后若无法区分,恢复时可能漏做或重复操作,尤其对发送、提交和付款等动作影响很大。原文定位
依据:原资料 4.8、4.15、8.5—8.6、18.2—18.3。