智能体二次开发:记忆系统

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
智能体二次开发:记忆系统 [2026/07/24 21:18] – [自检清单] 张叶安智能体二次开发:记忆系统 [2026/07/24 21:26] (当前版本) – [Step 4:Frozen Snapshot — Prefix Cache 对齐] 张叶安
行 1: 行 1:
-====== 踩坑 ======+====== 决策树总览 ======
  
-{{.:pasted:20260724-210529.png}} 
  
-{{.:pasted:20260724-210613.png}}+<code> 
 +你的Agent需要记忆系统 
 +   │ 
 +   ├─ [Step 1] 先分类 → 该扔的/该缓存的/该存的 
 +   │   跳过后果:MEMORY.md 从 200行涨到 800行,关键信息被淹没 
 +   │ 
 +   ├─ [Step 2] 选存储 → 上 SQLite FTS5,不上向量库 
 +   │   跳过后果:装了向量库但 90% 查询不需要语义搜索,多花运维成本 
 +   │ 
 +   ├─ [Step 3] 加时效 → 每条记忆 created_at + valid_until + superseded_by 
 +   │   跳过后果:3个月前的错误配置参数仍然被检索到,制造回归bug 
 +   │ 
 +   ├─ [Step 4] 对齐缓存 → Frozen Snapshot:稳定前置,动态后置 
 +   │   跳过后果:API 成本高出 25-75%,prefix cache 从未命中 
 +   │ 
 +   ├─ [Step 5] 加归纳 → 每日 Auto-Dream:去重、冲突检测、时效淘汰 
 +   │   跳过后果:搜索噪音——5条"渲染崩溃"记录来自不同期,Agent 合成错误答案 
 +   │ 
 +   ├─ [Step 6] 按需升配 → 模糊查询用向量库、时序管理用知识图谱 
 +   │   跳过后果:不跳过也没损失——但前置条件不完备就上是更精致的垃圾场 
 +   │ 
 +   └─ [Step 7] 验证 → 3个指标 + 5个测试用例 
 +       跳过后果:不知道系统在变好还是变坏,盲目迭代 
 +</code>
  
-{{.:pasted:20260724-210649.png}} 
  
-====== 事实 ====== 
-{{.:pasted:20260724-210817.png}} 
  
-{{.:pasted:20260724-210850.png}}+====== 每步详细决策 ======
  
-{{.:pasted:20260724-210928.png}} 
  
-{{.:pasted:20260724-211029.png}}+===== Step 1:三分类 — 信息归入"该扔/该缓存/该存"=====
  
-{{.:pasted:20260724-211131.png}}+| 决策项 | 规则 | 
 +| 能重新推导的吗? | → 该扔 | 
 +| 短期高价值,session 结束就过期? | → 该缓存 | 
 +| 不可推导,丢了就没了? | → 该存 | 
 + 
 +**类比**:搬家 → 卖旧报纸(扔) + 随身带牙刷(缓存) + 锁好房产证(存) 
 + 
 +**何时重新分类**:每季度一次,或在以下事件发生时: 
 +  - 项目框架变更 
 +  - Agent 工具集增减 
 +  - 发现某类信息持续未被检索 
 + 
 + 
 + 
 +===== Step 2:存储选型 — FTS5 vs 向量库 ===== 
 + 
 + 
 +| 你的查询类型 | 存储选择 | 理由 | 
 +| "上次那个 X 怎么修的?" | FTS5 | 精确关键词 | 
 +| "session 超时报错是什么?" | FTS5 | 精确关键词 | 
 +| "像上次那样的问题" | 向量库 | 模糊语义 | 
 +| "最近有什么趋势?" | 向量库 | 发现型查询 | 
 +| "这个决策现在还成立吗?" | 知识图谱 | 时效判断 | 
 + 
 +**黄金法则**:FTS5 廉价宽召回 → LLM 昂贵精排。解耦搜索和理解。 
 + 
 +**何时升级到向量库**: 
 +  - 你的搜索词中"像上次"类查询占比 > 30% 
 +  - FTS5 Top-5 召回率连续 3 天 < 80% 
 +  - 跨话题语义发现成为日常需求 
 + 
 + 
 + 
 +===== Step 3:时效系统 — 三个时间戳 ===== 
 + 
 + 
 +<code> 
 +每条记忆: 
 +├─ created_at    → 什么时候产生的 
 +├─ valid_until   → 什么时候到期(NULL = 永不过期) 
 +└─ superseded_by → 被哪条新记忆替代(NULL = 仍是权威) 
 +</code> 
 + 
 +| 字段 | 何时设置 | 示例 | 
 +| created_at | 写入时自动 | 2026-06-06T19:30 | 
 +| valid_until | API 变更、框架切换、决策过期 | 2026-09-06(3个月后复核) | 
 +| superseded_by | 新的同类记录写入时 | 新记录 ID=42,旧记录 superseded_by=42 | 
 + 
 +**永不删除旧记录** — 只标记 superseded。支持"当时 vs 现在"的时间旅行查询。 
 + 
 + 
 + 
 +===== Step 4:Frozen Snapshot — Prefix Cache 对齐 ===== 
 + 
 + 
 +| System Prompt 区域 | 放什么 | 变不变 | 
 +| 头部冻结区(前 800 token) | 角色定义、核心规则、MEMORY.md 精华 | 不变(整个 session) | 
 +| 尾部动态区(末尾) | 当前任务、临时约束、用户刚说的需求 | 每次请求可能变 | 
 + 
 +**两个立刻可用的修复**: 
 + 
 +1. System Prompt 拆两段:头部冻结 + 尾部动态 
 + 
 +2. 必须注入动态信息?放在整个 Prompt 的**最末尾** 
 + 
 +**检查方法**: 
 +<code> 
 +看你的 API 用量报表: 
 +Cache Read Tokens ÷ Total Input Tokens > 80% 才算合格 
 +低于 60% = 你正在烧钱 
 +</code> 
 + 
 + 
 + 
 +===== Step 5:归纳层 — Auto-Dream===== 
 + 
 +| 操作 | 频率 | 做什么 | 
 +| 去重 | 每日 | 多条记录说同一件事 → 合并 | 
 +| 冲突检测 | 每日 | 互斥信息 → 保留最新,标记旧 superseded | 
 +| 时效淘汰 | 每日 | 30天未访问的"该存"记录 → 降级归档 | 
 +| 精华提炼 | 每日 | 值得写入 MEMORY.md 的决策、教训 | 
 + 
 +**触发时机**: 
 +  - `session` 结束时(低频率使用场景) 
 +  - 每日凌晨 cron(高频使用场景) 
 +  - 任意时刻手动 `consolidate` 
 + 
 +**不做的代价**:搜索噪音。相似片段互相干扰,Agent 合成错误答案。 
 + 
 + 
 + 
 +===== Step 6:升配决策 — 向量/图谱 ===== 
 + 
 + 
 +| 开哪个 | 触发条件 | 放什么 | 
 +| 向量库 (pgvector) | 模糊查询 > 30% | 跨话题语义发现 | 
 +| 知识图谱 (Graphiti) | 事实频繁变更 | 因果关系 + 时序 | 
 + 
 +**前置条件**:Step 1-5 全部跑通且验证通过,才考虑升级。 
 + 
 +**不要做的事**: 
 +  - 前置条件不完备就上向量库 → 更精致的垃圾场 
 +  - 把知识图谱当全量关系模型 → 只做事实时序管理 
 + 
 + 
 + 
 +===== Step 7:验证 — 3个指标 + 5个用例 ===== 
 + 
 + 
 +| 指标 | 目标值 | 怎么测 | 
 +| 指令遵从率 | 记忆注入后不下降 | system prompt 嵌入隐蔽规则,前后对比 | 
 +| 检索 Top-1 命中率 | > 80% | 20 个已知答案的问题 | 
 +| Cache 命中率 | > 80% | API 报表 cache_read / total_input | 
 + 
 +**5 个测试用例**: 
 + 
 +1. "上次 bug 怎么修的?" → 精确召回 
 + 
 +2. "项目现在用什么框架?" → 时效性 
 + 
 +3. "删除 /tmp 临时文件" → 信噪比(记忆不应干扰) 
 + 
 +4. "3 个月前决策还适用吗?" → 时间旅行 
 + 
 +5. 100 次请求后 Cache 命中率 → 经济账 
 + 
 + 
 + 
 +===== 快速自检:你的系统在哪个阶段? ===== 
 + 
 + 
 +| 阶段 | 有什么 | 缺什么 | 下一步 | 
 +| 原始 | 只有 MEMORY.md | 时间戳、检索 | → Step 2 | 
 +| 入门 | FTS5 检索 | 时效管理、归纳 | → Step 3 | 
 +| 可用 | 时效 + 缓存对齐 | 归纳层 | → Step 5 | 
 +| 优秀 | 全四层 + 验证 | 向量/图谱 | → Step 6(可选) |
  
-{{.:pasted:20260724-211206.png}} 
  
 ====== 核心原则 ====== ====== 核心原则 ======
行 50: 行 202:
 | 你的 Agent 会产生什么信息? | 该扔 🗑 | 该缓存 ⚡ | 该存 💾 | | 你的 Agent 会产生什么信息? | 该扔 🗑 | 该缓存 ⚡ | 该存 💾 |
 | | | | | | | | | |
-| | | | | +
-| | | | | +
-| | | | | +
-| | | | | +
-| | | | | +
-| | | | | +
-| | | | | +
-| | | | | +
-| | | | |+
  
  

该主题尚不存在

您访问的页面并不存在。如果允许,您可以使用创建该页面按钮来创建它。

  • 智能体二次开发/记忆系统.1784899100.txt.gz
  • 最后更改: 2026/07/24 21:18
  • 张叶安