← 返回笔记列表
AI 技术与原理 第 18 / 28 篇

AI 原理学习笔记(十八):Agent 的状态、记忆与 Token 成本

查看“AI 技术与原理”专题目录(18/28)
本文目录 10 个小节

返回系列导读 · 先修:Agent 循环

1. 对话历史不是最好的任务数据库

“刚才提过”不保证后续步骤会准确使用。聊天记录通常混着用户想法、模型猜测、工具结果与已经推翻的结论。

Agent 需要知道:目标是什么、有哪些硬约束、什么已经验证、哪些动作已经完成、下一步还缺什么。

这叫任务状态。它可以由程序管理,而不是每次要求模型从几万字对话里重新猜出来。

2. 分清四种信息

信息例子保存方式
不可丢约束只查询,不发送申请显式任务字段,并由执行器检查
已验证事实工具返回可用年假 3 天值、来源、查询时间与权限
暂时推测下周可能适合休假标记未验证,不能冒充事实
原始证据制度第三条全文可回查文档或工具回执

把未经核实的推测压进摘要,后面再当事实使用,会形成错误自我强化。

3. 工作记忆与长期记忆

工作记忆服务当前任务,例如进度与待办。长期记忆保存未来任务可能需要的授权信息,例如用户偏好、历史决定或持久文档。

长期记忆需要解决:谁能写、谁能读、保存多久、如何纠错、何时删除。不是任何一次对话里的说法都应永久保存。

取回记忆时还要确认适用范围与时效。去年偏好“周五不开会”,今年可能已改变;旧事实不能因存进数据库就永远有效。

4. 全量重传为什么越来越贵

假设固定任务说明占 PP 个 Token,每一步新增记录近似为 cc 个 Token。若第 ii 步把之前全部内容重新发送,教学近似为:

Ii=P+ciI_i=P+ci

n 步累计输入量:

Itotal=nP+cn(n+1)2I_{\text{total}} =nP+c\frac{n(n+1)}2

第二项随步数近似二次增长。取 P=400,c=200,n=20P=400,c=200,n=20,累计约 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。

继续学习本专题