Memory Routing Rules
信息路由规则 — 什么信息应该写到哪里。 这是整个 OPC 系统防污染的核心文件。
原则
- 分层就是防污染 — 信息放错地方就会污染其他层
- 每类信息只有一个家 — 不确定就先放 inbox,再决定
- Profile 是员工,Wiki 是公司系统 — 不要混淆
路由总表
| 信息类型 | 目标位置 | 案例 |
|---|---|---|
| 角色身份定义 | profile/SOUL.md | ”你是 Researcher,职责是…” |
| 角色通用经验 | profile/memories/MEMORY.md | ”环境怪癖:terminal 工作目录问题” |
| 用户长期偏好 | profile/memories/USER.md | ”ZoOL 喜欢中文交流” |
| 统一的用户画像 | wiki/system/user-profile.md | 所有 Profile 共享的画像源头。Profile 的 USER.md 可作为补充但不应冲突 |
| 项目背景 | projects/*/context.md | ”这是 Twitter 增长项目,目标…” |
| 项目任务状态 | projects/*/tasks.md | Doing / Todo / Done |
| 项目推进日志 | projects/*/log.md | ”今天完成了热点研究” |
| 项目决策 | projects/*/decisions.md | ”内容定位已确定” |
| 项目中间材料 | projects/*/inbox/ | 草稿、粗糙想法、未确认结论 |
| 项目正式产出 | projects/*/outputs/ | 最终文章、PR、交付物 |
| 跨项目方法论 | wiki/pages/ | research-methods.md, writing-methods.md |
| 原始资料 | wiki/raw/ | 论文、文章快照、数据(只读不改) |
| 过期/废弃内容 | wiki/archive/ | 先归档,再决定是否彻底删除 |
| 实体资料 | wiki/entities/ | bevy.md, deerflow.md |
| 概念知识 | wiki/concepts/ | bevy-ecs-game-type-fit.md |
| 对比分析 | wiki/comparisons/ | agent-frameworks-cn-im.md |
| 查询结果 | wiki/queries/ | 值得保存的查询结果 |
| 全局管理 | wiki/system/ | dashboard, skill-registry, memory-routing |
| 配置/模型设置 | config.yaml | 模型、provider、工具集 |
| 临时中转 | Hermes 当前会话 | 一次性对话内容 |
| 重要事实/偏好 | supermemory | ”用户有6岁女儿” “家在闵行吴泾” |
详细规则
规则 A:Hermes memory(profile/memories/)
每个 Profile 有自己的 memory,只存该角色视角下的信息。
MEMORY.md 存:
- 该角色遇到的环境怪癖、工具问题、已知的 workaround
- 该角色积累的工作经验
- 跨会话但非项目专属的上下文
USER.md 存:
- 该角色视角下对用户的了解
- 用户偏好该角色特别需要注意的部分
❌ 不要往 MEMORY.md 写项目状态、任务列表、临时 TODO ❌ 不要往 USER.md 写项目背景
规则 B:Supermemory
supermemory 是跨 Profile 的语义记忆层。存:
- 用户个人事实(年龄、职业、家庭成员、住址)
- 稳定的环境事实(OS、工具、API key 用途)
- 用户偏好(语言、风格、习惯)
- 跨项目可复用的经验总结
❌ 不要存临时状态、会话过程、任务进度 ❌ 不要存 Wiki 已经有了的结构化知识(Wiki 才是权威源)
规则 C:Wiki(wiki/)
Wiki 是结构化知识库,分以下类别:
| wiki 目录 | 写入者 | 读权限 | 说明 |
|---|---|---|---|
raw/ | Researcher 为主 | 所有 Profile | 只读不改;原始资料入口 |
entities/ | 所有 Profile | 所有 Profile | 实体知识 |
concepts/ | 所有 Profile | 所有 Profile | 概念知识 |
comparisons/ | Researcher 为主 | 所有 Profile | 对比分析 |
queries/ | Researcher 为主 | 所有 Profile | 值得保存的查询 |
pages/ | 确认后写入 | 所有 Profile | 跨项目方法论(待建) |
system/ | Coordinator | 所有 Profile | 全局管理文件 |
_meta/ | 自动 | 所有 Profile | wiki 元信息 |
规则 D:Projects(workspace/*/)
项目目录是代码和构建产出的空间,不是知识库。
项目文件用途:
AGENTS.md/.cursorrules— 项目级 Agent 规则context.md— 项目背景和约束README.md— 项目概览和入门指南src/tests/— 代码和测试
❌ 不要往项目文件写永久知识 — 那应该去 wiki ❌ 不要往项目文件写角色经验 — 那应该去 memory
规则 E:Hermes 当前会话
会话是工作台,不是存储。临时材料、中间推理、未定稿的对话内容天然属于会话。
需要保存的材料,按路由表转存到正确位置。会话结束后,只有 route 成功的信息才算被记住。
常见错误(及纠正)
| 错误做法 | 问题 | 正确做法 |
|---|---|---|
| 把项目状态写进 MEMORY.md | 记忆污染,其他项目会读到无关状态 | 写到 projects/*/tasks.md |
| 把角色经验写进项目文件 | 知识分散,换项目就丢经验 | 写到 profile/memories/MEMORY.md |
| 把临时想法写进 wiki/pages/ | 长期知识变脏 | 写到 projects/*/inbox/ |
| 把所有东西写进 supermemory | 语义搜索失效 | 按路由规则分到不同层 |
| 把对话记录保存到 memory | 浪费空间 | 对话记录通过 session_search 检索 |
执行检查清单
每次保存信息前问自己:
- 这是永久知识还是临时状态?
- 它是角色经验、项目信息、还是用户偏好?
- 它属于哪个 Profile的视角,还是跨 Profile 共享?
- 它应该进 memory、supermemory、wiki、还是项目文件?
回答完这四个问题,路由就清楚了。
更新历史
- 2026-05-02: 初始创建,基于文章”下篇”的 routing table 适配 ZoOL 实际架构