Context Engineering:上下文预算、压缩与记忆检索系统设计
Agent 的上下文不是聊天记录拼接。它是有限 token 预算内,由系统策略、当前任务、工具状态、检索证据、长期记忆和历史摘要组成的动态工作集;塞得越多不一定越聪明,反而可能更慢、更贵、更容易被污染。
一、30 秒面试回答
我会为每次运行建立 context budget,而不是无限累积消息。系统策略和安全约束固定保留;当前任务、工具状态和已授权证据按优先级分配预算;历史对话做结构化摘要,长期记忆通过权限过滤和相关性检索按需注入。每个上下文片段带来源、时间、租户、置信度和 token 成本,超预算时按明确策略压缩、淘汰或请求澄清。摘要与记忆也视为不可信派生数据,防止错误信息或注入指令跨会话持续存在。trace 记录最终 context manifest,才能回放“为什么模型看到了这些内容”。
二、上下文分层与预算
| 层 | 内容 | 策略 |
|---|---|---|
| 不可替代 | 系统安全、工具边界、任务契约 | 固定预算,不被摘要覆盖 |
| 当前工作集 | 用户目标、状态、最近工具结果 | 高优先级、短生命周期 |
| 检索证据 | RAG 文档、代码、网页 | ACL 过滤、引用与去噪 |
| 会话历史 | 已确认偏好、决策、未完成事项 | 摘要 + 最近窗口 |
| 长期记忆 | 跨会话事实与偏好 | 按需检索、可撤销 |
预算应按模型窗口、输出预留、任务风险和成本制定。不要把全部窗口用于输入而挤掉模型完成任务所需的输出空间。
三、压缩不是简单摘要
| 方法 | 适合 | 风险 |
|---|---|---|
| 最近窗口 | 短对话连续性 | 丢失早期关键决定 |
| 结构化摘要 | 任务进度、约束、已验证事实 | 摘要幻觉或遗漏 |
| 分层摘要 | 长会话与周期性 checkpoint | 需要版本与重建策略 |
| 检索历史 | 大量历史记录 | 需要权限与相关性过滤 |
| 任务状态外置 | 工具参数、计划、审批状态 | 不能让模型文本成为唯一事实 |
摘要应包含“事实、决策、未决事项、来源、置信度”,而不是模糊自然语言结论。高风险状态如审批、订单或工具执行结果应从业务系统读取,不从聊天摘要恢复。
四、记忆检索与污染控制
长期记忆写入前要做权限、来源、有效期和冲突检查;读取时按 tenant、用户、角色与任务相关性过滤。外部文档、工具输出和用户话术不能因“被写进 memory”就取得系统指令优先级。对低置信、过期或冲突记忆,应显示不确定性、重新验证或不注入。
删除、撤权和偏好变更要能定位 memory、摘要、缓存和索引并主动失效。跨租户或跨用户复用记忆属于严重隔离事故。
五、观测与评测
每次运行记录 context manifest:片段 ID、来源、版本、token、优先级、是否摘要、检索分数和最终是否被使用。重点指标包括:上下文 token、有效证据命中、摘要错误率、记忆陈旧率、污染拦截率、TTFT、任务成功率和每成功任务成本。评测集应含超长会话、冲突记忆、撤权、注入文档和预算耗尽场景。
5.1 预算控制面与确定性降级瀑布
预算不只是输入 token 上限,还包括输出预留、时延、成本、最大工具步数和各来源配额。定义软/硬阈值,并让降级顺序可预测:先去重和裁剪低价值工具输出,再压缩历史,再减少检索候选,随后请求澄清或将任务转异步;高风险操作在证据不足时直接拒绝执行。不要在预算耗尽后随机丢掉系统约束或授权证据。
5.2 记忆生命周期与删除收敛
将记忆建模为 candidate -> quarantined -> verified -> active -> superseded -> tombstoned -> erased。只有 verified/active 可被常规召回;外部文本、模型推断和低置信摘要不能自动升级为可信事实。撤权或删除时,状态先变为 tombstoned 以阻止读取,再异步清理 embedding、缓存、摘要和索引副本,并保存收敛审计收据与失败重试记录。
5.3 多 Agent 并发写与污点传播
共享记忆使用版本号/CAS、租约或事件追加避免互相覆盖;临时推断不能因另一 Agent 写入而变成事实。每个片段携带 trust label,且该标签穿过摘要、chunk、embedding、rerank 和 memory promotion:untrusted 摘要仍是 untrusted,除非经过明确审核。来源撤销后可按血缘隔离所有派生内容。
5.4 上下文因果评测
不要只报“召回了多少段”。对 manifest 做消融与反事实测试:移除、替换或打乱某片段后,任务成功、引用质量、风险动作和成本如何变化。这样能回答“这 800 token 为什么值得保留”,也能发现无关证据、陈旧记忆或注入内容是否真正影响了决策。
六、高频问答
Q:上下文越长越好吗?
不是。长上下文增加 prefill 成本、稀释注意力并引入陈旧或无关信息。应按任务选择高价值证据,保留输出预算,用摘要/检索/外置状态替代盲目拼接。
Q:如何避免摘要把错误永久带入后续会话?
摘要带来源和版本,只把已验证事实写入长期层;高风险业务状态从权威系统读取;对摘要做定期重建、冲突检测和抽样评测,且允许删除/撤销。
Q:记忆与 RAG 有什么区别?
RAG 面向外部知识证据,通常按文档和权限检索;记忆面向用户/任务持续状态与偏好。两者都需检索、版本和 ACL,但写入规则、保留期和错误代价不同。
七、项目讲法模板
我们将 Agent 上下文拆为系统策略、当前状态、授权证据、历史摘要和长期记忆,并对每层分配 token 预算。工具和审批状态外置到权威服务,摘要只保留带来源的已确认信息;记忆读写均做租户、权限、有效期和污染检查。每次运行保存 context manifest,用于回放、成本分析和 bad case 定位。这样既控制了长上下文成本,也降低了陈旧记忆与间接注入跨会话放大的风险。
继续学习:Context Engineering、Agent 记忆、RAG 生产化与系统设计、LLM 推理容量与弹性伸缩设计。