AI Agent(四):上下文与记忆
上下文预算、证据检索、任务状态与长期记忆的管理。
上下文的组成与预算
上下文是模型进行当前决策时实际收到的信息集合,包括任务指令、用户请求、工具定义、历史消息和检索材料。数据库记录通过工具返回或检索进入上下文后,才能参与这一轮判断。上下文工程关注的是信息选择、组织和更新。
可用窗口有限,而且更长的输入会增加处理成本。可以把预算写为 B = I + T + H + E + O,其中 I 是指令,T 是工具定义,H 是保留历史,E 是证据,O 是为输出预留的空间。各项按同一模型的 token 计数方式估算。
订单调查保留 O-1042 的版本、物流事件、适用政策和已尝试操作。压缩历史时,可删去无关闲聊,保留尚未解决的审批请求、任务约束和关键事实。
信息组织可以采用固定顺序:先放不可变任务约束,再放当前目标与已确认状态,然后是带来源的新增观察。相互矛盾的材料并列呈现并标注差异,供后续核查。工具定义也要与当前可用权限一致,避免模型反复选择已经被禁用的能力。
检索与证据组织
检索负责从较大资料集中选择当前任务需要的材料。订单号适合精确查询;“延迟后能否申请调查”适合政策检索;跨实体关系可能需要图查询。检索方法由问题决定,向量相似度高的文本不一定属于正确地区、时间或客户。
检索前按租户和访问范围过滤,结果附上来源、版本、位置和适用条件。国内配送与跨境配送政策分别保留,按订单所属范围选用。
{
"evidence_id": "policy:delivery:2026-10",
"source": "delivery-policy",
"version": "2026-10",
"scope": "domestic",
"statement": "超过约定配送期后可申请物流调查",
"locator": "section-4"
}判断 O-1042 是否满足这项政策,还需要订单约定日期与当前时间。将政策和订单事实分别保存,便于核对申请条件。
检索接口用状态码区分无匹配、权限不足与服务故障。无匹配时调整查询,权限不足时说明访问范围,服务故障时等待或转人工。
短期状态与长期记忆
短期状态保存一次任务的进度,例如订单已查询、物流待确认、工具失败两次。长期记忆保存跨任务复用的信息,例如用户偏好的联系方式或已确认的业务配置。两者分别设置有效期、访问范围和删除策略。
单次查询的订单和未经确认的丢失推测,都只保留在当前任务中。写入记忆前需要判断信息来源、确认程度、适用范围和保留期限。模型可以提出候选记忆,应用决定哪些类别允许持久化。
| 信息 | 合适位置 | 失效条件 |
|---|---|---|
| 当前工具返回 | 任务观察记录 | 新的版本替代 |
| 待批准操作 | 任务状态与审批存储 | 批准过期或参数变化 |
| 经确认的用户偏好 | 用户级长期存储 | 用户修改或删除 |
| 业务政策 | 版本化知识库 | 政策生效区间结束 |
| 模型的暂时推测 | 任务内候选判断 | 证据否定或任务结束 |
检索用户偏好时用 user_id 限定范围,保持不同用户的记忆隔离。管理员角色等权限信息由认证系统提供。
摘要与上下文压缩
摘要压缩通过保留关键状态来减少历史输入。Anthropic 的上下文工程资料将压缩、结构化笔记等作为长任务的信息管理手段,并指出过度压缩可能遗漏后续才显现重要性的细节。摘要会丢失信息,应保留原始轨迹的引用。
Anthropic:Effective context engineering for AI agents,2025
订单任务摘要保留目标、已确认事实、来源、待查问题、操作约束和待核查操作。例如“物流查询超时,未确认派送状态”和“已提交调查,响应未知”,压缩后仍保留未知状态。
{
"goal": "调查 O-1042 配送延迟",
"confirmed": [{"fact": "订单已发货", "evidence_id": "order:O-1042:v3"}],
"unresolved": ["物流查询超时,当前派送状态未知"],
"constraints": ["仅调查,不提交退款"],
"pending_operations": [],
"trace_ref": "run-17/events/1-8"
}压缩后应重新检查约束是否保留、证据引用是否可解析、未知状态是否被肯定化。对高影响任务,可以把关键约束放在确定性状态字段中,每轮由运行时重新注入。
记忆更新与质量验证
新事实与旧记忆冲突时,按版本和时间确定当前有效记录。修改后的收件偏好用于后续任务,历史订单地址保留原记录。删除记忆时,同步清理向量索引、摘要和缓存。
质量评估可以比较无记忆、原始历史和压缩历史三种配置。固定同一任务集,检查关键条件保留率、引用正确率、无关信息召回和输入费用。跨用户泄露单独作为失败项统计。
对上下文污染应设置专门案例:物流备注包含“忽略指令”,旧摘要把未知结果写成失败,政策缓存晚于源文档失效。分别检查数据是否被当作指令、状态是否被恢复正确,以及回答是否引用了已撤回版本。
写入错误记忆后,找到受影响的记忆版本、检索索引和任务,撤销或修订记录,再检查后续检索是否仍使用旧结论。为记忆记录保留写入来源,并提供删除接口,才能完成这类修复。