进四 Context Engineering:真正的护城河(含 Memory)
本章目录
这一章是 2026 最重要的新认知。决定 Agent 强不强的,往往不是模型,是你往上下文里塞了什么、怎么塞。
04.1 全景:五个维度,一张地图
中科算网《上下文工程指南》把上下文从"系统提示"扩成五大类(文本/环境/用户/系统/组织)。落地时,我把它压成五个工程动作:
示意图 19:Context Engineering 五维地图
flowchart TD
W["① 写入 Write<br/>构造系统提示/初始上下文"]
S["② 选择 Select<br/>检索·挑相关料"]
C["③ 压缩 Compress<br/>摘要·裁剪保重点"]
I["④ 隔离 Isolate<br/>分窗·防互相污染"]
K["⑤ 缓存 Cache<br/>复用前缀省钱"]
W --> S --> C --> I --> K
style S fill:#e8f0fe,stroke:#2563eb
style K fill:#0ea5a4,stroke:#0f766e,color:#fff
| 维度 | 回答啥问题 | 标叔的结论 |
|---|---|---|
| 写入 | 一开始放啥 | 行为控制系统(04.2) |
| 选择 | 用啥料 | RAG/记忆(04.6) |
| 压缩 | 放不下咋办 | 摘要裁剪(04.3) |
| 隔离 | 互相干扰咋办 | 分上下文(进五) |
| 缓存 | 怎么省钱 | 见 04.4 |
04.2 System Prompt 工程化与 Context Rot
从"写一段提示词"升级到"搭一个行为控制系统":系统提示不再是文案,而是角色、边界、输出格式、工具说明、禁忌的集合体,要像代码一样版本管理。
但坑来了——Context Rot(上下文腐烂):系统提示越长,模型越容易"看不见"中间的规则,注意力被稀释。
核心建议:系统提示别写成长篇小说。能外置成 Skill/工具说明的,就别塞进系统提示。
04.3 上下文快爆了?聊聊压缩
呼应 §06.4 的分层摘要。工程上压缩三招:
- 摘要:旧对话压成要点(保留近期 N 轮原文)。
- 裁剪:丢掉与本任务无关的早轮。
- 压缩:用更小模型先提炼再喂大模型。
04.4 Cache 全解与成本控制:别再弄混这几个概念
这是 2026 最容易被混淆的一组。一次讲清:
| 概念 | 它站在哪 | 人话 |
|---|---|---|
| KV Cache | 推理引擎底层 | "这段算过,复用,加速" |
| Prompt Cache | 厂商计费层 | "这段我处理过,命中价低至 1/10" |
| Context Collapse | 现象/坑 | "塞太满,反而更笨" |
崔亮《Prompt Cache》点破关键:前缀要稳定。你每轮开头都变,缓存永远不命中。Agent 的 I/O 常是 100:1(读多写少),Cache-Safe 是客户端工程责任——把不变的系统提示/工具定义放最前,且别乱插变量。
经验:省成本第一招不是换便宜模型,是让前缀稳定、复用缓存。
04.5 深入 Just-In-Time Context:不是越早塞越好
直觉是"把料早早全塞进上下文"。错。JIT(即时)上下文主张:用到那一步,才注入那块料。
例子:写代码 Agent,不必一上来把整个代码库塞进去;读到某文件时,才把该文件上下文注入。好处:窗口不爆、相关性强、缓存命中高。
04.6 RAG 全流程与检索优化
呼应 §06.3。补"全流程":文档 → 切分 → 嵌入 → 建索引 → 检索 → 重排 → 生成。
关键坑:语义相似 ≠ 任务相关。检索回来"意思像"的,未必是"该用"的。所以要用 §06.3 的多路召回 + 重排,必要时让模型自己判断相关性。
04.7 LLM 编译知识库:让知识持续积累互联
进阶玩法:别把知识库当静态档案。让 Agent 跑完任务后,自动抽取新知识点、连成图谱、回写库。知识库越用越聪明,像人做笔记越记越通。
04.8 记忆系统:文件派 vs 数据库派,谁对
| 派别 | 怎么存 | 优点 | 缺点 | 标叔的结论 |
|---|---|---|---|---|
| 文件派 | Markdown/文件 | 人可读、好调试 | 检索慢、难规模 | 个人/小项目首选 |
| 数据库派 | 向量/图库 | 快、可海量检索 | 要维护、不直观 | 企业/高并发首选 |
经验:没有标准答案。先看规模与可读性,再选。很多生产系统是"文件做源、库做索引"混合。
04.9 记忆会"坏":五种失效模式
2026 年 4 月 golangstar 把"记忆覆盖"拆成三种故障;我合上行业经验,补成五种:
| 失效 | 表现 | 解法 |
|---|---|---|
| 覆盖丢失 | 新记忆冲掉旧的 | 版本化、不覆盖 |
| 压缩失真 | 摘要丢了关键细节 | 关键字段原样留 |
| 语义漂移 | 记忆被悄悄篡改 | 写时校验+签名 |
| 过时 stale | 记的是旧事实 | 加时间戳+过期 |
| 检索不到 | 存了但找不到 | 多路索引+重排 |
注意:记忆不是"写了就灵"。它和数据库一样,要防脏数据。