2162 字
约 7 分钟
13
S21-J20 · 卷五到卷七:上下文的边界、记忆与检索

适用读者:上下文越用越乱、记忆越存越错、RAG 检索出来答不对的人。
前置:S21-J19(卷一–卷四)、S20-J05(上下文工程决策树)、S20-B01(RAG 流程)。
覆盖旧文:4887–4901(《Agent 工程》卷五–卷七,15 章:5.x 上下文边界 5 章 / 6.x 记忆 5 章 / 7.x 检索 5 章)。
扩展点:E-S21-035(上下文的四个失效模式:污染、遗忘、溢出、断点)、E-S21-036(记忆三层与"守门员":什么该记、冲突怎么办)、E-S21-037(RAG 四步与五类失败诊断)。
下一篇:待写(J21 · 卷八到卷十一):MCP、Skills、Loop 与多 Agent。


1. 一句话结论

上下文的问题不是"装不下",是"装错了"。压缩、记忆、检索三件事解决的是同一个问题的三个面:在正确时刻,让窗口里只留下正确的东西。

出处:A-4887(5.1 上下文里到底装了什么)…A-4901(7.5 RAG 失败模式与诊断)。


2. 上下文的四个失效模式(E-S21-035)

模式 表现 处置
溢出 超窗口被截断,早先约束丢失 双路径压缩(摘要 + 落盘),先落盘再摘要
污染 早期错误结论被后续推理不断引用 隔离(子 Agent)+ 显式"作废"标记
遗忘 长任务里目标/约束漂移 状态栏 + 定期复述硬约束(见 §5)
断点 换会话即失忆,无法续跑 结构化笔记落盘,Session ≠ Context

"上下文里到底装了什么"(5.1):system 规则、工具定义、历史对话、检索片段、工具输出、当前任务。判据:先按"是否影响正确性"排序,再按"是否可再取"决定删留——可再取的(文档原文、工具输出)优先落盘,不可再取的(人类口头约束)必须常驻。

KV Cache 与成本(5.3):缓存只对稳定前缀生效。把时间戳、随机 ID、动态用户信息放系统提示最前面 = 每次都全量重算。判据:"会变的东西一律往后放"。

上下文污染与遗忘(5.4):错误一旦进入上下文,就会被后续步骤当作事实。处置:显式推翻("前面那条结论作废,原因是 X")比"不再提"有效——模型看不到"你已放弃"这件事。


3. 记忆:三层与守门员(E-S21-036)

短记忆:当前会话(窗口内)
长记忆:跨会话(用户偏好、项目事实)→ 需检索注入
外部记忆:文件/数据库/向量库(可审计、可更新、可删除)
章 结论
6.1 三层记忆 分层不是"越多越好",而是"按访问频率与寿命分层"
6.2 MemGPT 思路 把上下文当内存:主上下文=RAM、外部存储=磁盘,靠"换页"扩容量
6.3 ChatMemory 到生产 从"存全部历史"到"存摘要 + 关键事实 + 检索"
6.4 冲突与遗忘 同一事实多次写入需时间戳 + 来源优先级;被推翻的要标记而非删除
6.5 常见误区 记忆不是把历史都塞进去;全量历史 = 成本与噪声双高

守门员(gatekeeper)四问:

① 这条信息会不会影响未来决策?(否 → 不记)
② 它会过期吗?(会 → 记时间戳与失效条件)
③ 它与已有记忆冲突吗?(是 → 按来源优先级裁决,保留冲突记录)
④ 它敏感吗?(是 → 不记或加密,且可删除)

判据:"能删的记忆才是好记忆"——不可删除的记忆(写进提示词、写进微调)会变成永久污染源(见 §5 记忆即攻击面)。

长任务的交接(5.5):Session ≠ Context。会话是通道,上下文是内容。交接要交的是:目标、已完成、未完成、约束、下一步——五行足够,不需要完整历史。


4. RAG 四步与五类失败(E-S21-037)

① 切片(chunking)② 嵌入(embedding)③ 召回(retrieve)④ 重排(rerank)
步 取舍 判据
切片 固定长度 / 语义 / 结构(标题层级) 按文档结构切优先;块间留重叠
嵌入 模型维度、多语言、领域适配 换模型必须重建索引(不可混用)
召回 向量 / 关键词 / 混合 专有名词、编号、代码 → 必须加关键词检索
重排 cross-encoder / LLM 判分 候选 20~50 条再重排,成本可控

五类失败诊断(7.5):

症状 归因 验证方式
检索命中但答错 块内缺语境("它""该值"指代丢失) 人工读块:脱离原文能否看懂
检索不命中 切片错位 / 关键词缺失 用问题原文做关键词检索对照
命中旧版本 索引未重建 / 版本混存 查块元数据版本号
答非所问 重排缺失,噪声进上下文 对比重排前后 top-5
引用不存在 模型编造 强制"只答块内内容,附块 ID"

Contextual Retrieval(6.5):给每个块补一段"它属于哪份文档、讲什么"的上下文再嵌入。原文称"失败率降约 2/3",该数字未在本环境复现,待核;方向上可靠(块脱离语境是主要失败源)。

知识库当代码库管(6.7 / 6.8):版本、变更记录、回滚、按目录组织(文件系统范式)。判据:"知识更新没有 diff,就等于没有更新"。


5. 记忆即攻击面(6.9 的工程结论)

攻击 机制 防护
知识投毒 往知识库写入恶意内容,检索后被当事实 写入审核、来源白名单、内容指纹
记忆持久化后门 诱导 Agent 记住"以后都这么做" 记忆写入需人工确认;定期审计
跨用户污染 共享记忆空间混入他人数据 记忆按租户隔离,键空间带前缀

判据:"记忆是权限,不是缓存"——写入权限要收紧,读取要可审计。


6. 反例:八种"上下文越用越乱"

做法 后果
系统提示前置动态内容 KV Cache 全失效,成本翻倍
工具输出全文回灌 溢出,早先约束被截断
早期错误不显式作废 污染整条推理链
全量历史当记忆 成本与噪声双高,关键事实被淹没
记忆只写不删 冲突累积,行为漂移
换嵌入模型不重建索引 召回质量断崖
只用向量检索查编号/代码 专有名词召回失败
不校验引用 编造引用无法发现

7. 自测

  1. 上下文四个失效模式与处置?
  2. 记忆三层各解决什么?守门员四问?
  3. 为什么"Session ≠ Context"?交接要交哪五项?
  4. RAG 四步的取舍判据?五类失败的验证方式?
  5. 为什么说"记忆是权限"?
答案
  1. 溢出→压缩落盘;污染→显式作废+隔离;遗忘→状态栏复述;断点→结构化笔记。
  2. 短/长/外部;四问:影响决策、是否过期、是否冲突、是否敏感。
  3. 会话是通道、上下文是内容;交目标、已完成、未完成、约束、下一步。
  4. 按结构切、换模型重建、专名加关键词、候选再重排;失败按块语境/关键词/版本/重排/引用逐项验证。
  5. 写入决定未来行为,等于授权;必须收紧写入、可审计、可删除。

8. 下一篇

待写(J21 · 卷八到卷十一)—— MCP 的两层结构与懒连接、Skill 的三段结构与渐进式披露、Loop 引擎与会话持久化、多 Agent 的天花板与并发代价。


本篇属于系列《S21 · Agent 与工具协议》。旧文来源:A-4887–4901(卷五–卷七 15 章);扩展点 E-S21-035…038。Contextual Retrieval 的"失败率降 2/3"为原文说法,未在本环境复现(待核)。

S21-J20 · 卷五到卷七:上下文的边界、记忆与检索
https://www.clxhxhhr.top/posts/5504/
作者
clxstart
发布于
2024-12-31
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。