# 记忆最佳实践 SUMMARY: 如何结构化记忆以实现高效回放 — 分类、键、标签、优先级。 记忆最佳实践 记忆的结构决定了它的实用价值。本指南涵盖记忆的分类、打标签与优先级模式,让 LLM 能在正确时间回放出正确信息。 分类:选择最具体的 | 分类 | 用于 | 示例 | |----------|---------|---------| | | 用户名、角色、联系方式 | | | | 喜好、厌恶、工作风格 | | | | 可验证的事实 | | | | 项目状态、决策 | | | | 用户的技能 | | | | 要避免的过往错误 | | | | 与会话相关的上下文 | | | | 其他备注 | | > [!TIP] > 拿不准时,可验证信息用 ,其他都用 。 > 不要过度分类 — 清晰的 比含糊的 更好。 Key:有意义的标识符 字段是记忆的标识符。使用有意义且稳定的 key: 好 key: - - - - 坏 key: - (无意义) - (不具描述性) - (日期对回放无帮助) Key 命名规范 - (小写加下划线) - 以分类为前缀:、、 - 使用描述性名词,而非动词 - 长度控制在 50 字符以内 Tags:用于搜索与过滤 标签可加速过滤与搜索。每条记忆加 2-5 个标签: [CODE BLOCK] 标签模式 - 项目名:、、 - 主题:、、、 - 状态:、、 - 优先级指示:、 > [!NOTE] > 标签不区分大小写。请使用小写以保持一致。 优先级:实事求是 | 优先级 | 用于 | 占比 | |----------|---------|---------------| | | 用户身份、法律信息、不可逆决策 | 5% | | | 进行中的项目、重要偏好 | 20% | | | 大多数事实、备注、上下文 | 65% | | | 临时、知道就好的信息 | 10% | > [!WARNING] > 不要把所有记忆都标为 。如果一切都是 critical,那就什么都不是。 > 把 留给那些一旦被遗忘就会造成实际伤害的内容。 何时存储、何时不存储 始终存储 - 用户身份(姓名、邮箱、角色) - 长期偏好 - 项目决策与理由 - 过往错误与教训 - 对用户做出的承诺 不要存储 - 临时状态(改用变量) - 逐字对话历史(聊天系统会处理) - 敏感数据(密码、API key) - 易推导的事实(当前日期、文件内容) - 短暂上下文(用 分类 + low 优先级) 更新记忆 用相同的 + 发起 会更新已有记忆: [CODE BLOCK] > [!TIP] > 使用稳定的 key,这样你可以更新而不创建重复。LLM 应该在信息变化时重新 POST 相同的 key,而不是创建新记忆。 记忆生命周期 [CODE BLOCK] - 创建:POST /memory,带上完整上下文 - 活跃:频繁回放,按需更新 - 陈旧:仍相关但不再活跃使用(降低优先级?) - 归档:设为 优先级,保留供历史参考 - 删除:不再相关时 DELETE /memory/:id 定期清理 [CODE BLOCK] 模式:记忆继承 对于层级上下文(项目 → 子项目 → 任务): [CODE BLOCK] LLM 之后可搜索 找到所有相关记忆。 模式:决策日志 把决策与理由一起存储,这样 LLM 不会重新质疑: [CODE BLOCK] 模式:错误规避 把错误与具体的规避指令一起存储: [CODE BLOCK] 应避免的反模式 > [!WARNING] > - 存储对话日志 — 聊天系统会处理 > - 存储整个文件 — 用脚本存储或外部存储 > - 存储临时状态 — 用变量 > - 存储密钥 — 用环境变量 > - 重复记忆 — 用稳定的 key > - 过度打标签 — 每条记忆 2-5 个标签最理想 > - 一切都是 critical — 优先级要实事求是 下一步 - Memory API - 持久化 LLM Agent - 记忆打标签策略