持久化记忆
持久化记忆让 Anyy 在多个 session 之间保留长期事实。它适合保存稳定的用户偏好、 反复出现的纠正、助手笔记、环境事实和项目约定。
它不是 transcript 搜索系统。要回忆过去对话,请使用 session search;要记录临时进度,请使用任务、 提醒或 session state。
记忆如何工作
Anyy 在当前 home 下保存 profile-scoped 长期记忆。普通 profile 有两个文件:
| 文件 | 用途 |
|---|---|
USER.md | 用户身份、稳定偏好和反复出现的纠正。 |
MEMORY.md | 助手笔记、环境事实和项目约定。 |
Memory store 还会在 state database 中维护索引、写入事件和 suggestion 记录。这些记录用于 review、audit、Dashboard 查看和 retention。
记忆在系统 Prompt 中的呈现方式
当 memory 可用时,Anyy 会构建有边界的 memory snapshot,并把它放入模型上下文。
snapshot 会带上 profile memory path 提示,让助手区分 USER.md 和 MEMORY.md。
Memory context 在受控的 context-building 阶段组装。某一轮中途写入 memory,不会改写已经发出的 模型请求。
Memory 工具操作
普通模型可见的 memory 入口只有一个结构化工具:memory,由 memory 工具集提供。
它接受:
| 参数 | 是否必填 | 可选值 | 含义 |
|---|---|---|---|
action | 是 | add, replace, remove | 要执行的 memory 操作。 |
target | 是 | user, memory, daily | user 写 USER.md;memory 写 MEMORY.md;daily 追加今天的 daily note。 |
content | add 和 replace 必填 | string | 新条目内容。 |
old_text | replace 和 remove 必填 | string | 用来识别已有条目的短唯一子串。 |
Schema 是关闭的。scope、kind、mode、gate、行号范围、review reason 等底层字段都会被拒绝。
Add
action: add 会在 content 非空时追加一个长期条目。重复条目会被跳过,不会再次写入。
用户事实和偏好写到 target: user:
{
"action": "add",
"target": "user",
"content": "The user prefers concise status updates during long-running work."
}
助手或项目笔记写到 target: memory:
{
"action": "add",
"target": "memory",
"content": "This repository keeps user-facing docs under docs-site/."
}
Replace
action: replace 需要 old_text 和非空 content。old_text 必须匹配一个已有 memory
条目,或匹配多个内容完全相同的重复条目。
如果该子串匹配到不同条目,Anyy 会因为歧义拒绝操作。此时应使用更具体的 old_text。
Remove
action: remove 需要 old_text。它会删除匹配到的 memory 条目,并使用和 replace 相同的歧义检查。
不应保存的内容
不要把临时任务进度、一次性搜索结果、原始收集资料、链接收藏、附件、书签或完整 transcript 写入 memory。
这些情况分别使用:
- session search 回忆过去对话;
- task/reminder 工具跟进未来工作;
- skills 保存可复用流程知识;
- files 或 artifacts 保存用户明确要求保留的材料。
安全扫描
生成的 memory 内容会在写入前经过扫描。不安全的生成内容会被阻止,像 secret 的值会被脱敏。
Anyy 也会阻止把明显的收集资料写入 USER.md,因为用户记忆应该描述用户,而不是成为链接或文档 dump。
Memory 写入会按低风险 config/file-write 操作审计,并经过 memory store 的 review-policy 写入 gate。
记忆建议
Suggestion 管理不是普通模型工具。它通过受信任的本地和 Dashboard RPC 完成:
| RPC | 用途 |
|---|---|
memory.suggestions.list | 列出 suggestion 记录;省略 status 时默认查 pending。 |
memory.suggestions.accept | 接受 suggestion,并通过 approved-suggestion gate 写入。 |
memory.suggestions.reject | 拒绝 suggestion,并记录治理决定。 |
只读 memory.view RPC 会返回当前 profile 的 USER.md 和 MEMORY.md,供本地/Dashboard
界面使用。文件不存在会以 missing entry 返回,不是 RPC 错误。
这些 RPC 不是 anyy memory shell 子命令。CLI 当前只暴露手动 AutoDream 运行。
后台 Review
同一个 session 每经过 10 个成功用户 turn,gateway 可能会基于当前 conversation snapshot 启动一个静默后台 memory-review agent。
这个 review agent 只暴露结构化 memory 工具。它可以把长期事实或偏好添加到 USER.md,并记录
memory_review_started、memory_review_completed 或 memory_review_failed 事件。
如果 review 成功写入用户 memory,Anyy 可以发布一条渠道通知,说明长期记忆已更新。主 turn 中的普通工具调用不会重置 10-turn 节奏。
记忆 Scope
当前 profile memory 布局使用 profile 级 USER.md 和 MEMORY.md。旧的 workspace 或
agent-scoped 路径会由 memory migration 代码迁移到 profile 布局。
Session search 和 memory 故意分开。Session search 搜索历史消息;memory 工具编辑长期记忆文件。
AutoDream CLI
当你想针对正在运行的 gateway 手动预览或应用 AutoDream 记忆整理时,可以使用 CLI:
anyy memory dream --dry-run
anyy memory dream --execute --yes
--dry-run 会以 execute: false 调用 memory.dream,不会写入文件。--execute --yes
会先预览结果,再通过 gateway RPC 应用通过验证的变化。执行可能写入 USER.md 和
MEMORY.md,因此必须显式传 --yes。
两种模式都需要正在运行的 resident gateway。gateway 使用非默认 socket 时传 --socket;
脚本需要原始 RPC 响应时使用 --json。
配置
Memory maintenance 在 memory 下配置:
memory:
maintenance_enabled: true
suggestion_ttl_days: 14
daily_keep_days: 180
daily_mode: delete
auto_dream_enabled: true
auto_dream_min_hours: 168
auto_dream_min_user_turns: 50
auto_dream_scan_interval: 8h
| 字段 | 默认值 | 含义 |
|---|---|---|
maintenance_enabled | true | 在 resident runtime 中启动后台 retention loop。 |
suggestion_ttl_days | 14 | 过期超过该 TTL 的 pending suggestions。 |
daily_keep_days | 180 | daily/*.md daily memory 文件的保留窗口。 |
daily_mode | delete | delete 删除过期 daily 文件;archive 移到 archive/。 |
auto_dream_enabled | true | 在 memory maintenance 启用时允许 AutoDream consolidation。 |
auto_dream_min_hours | 168 | 上次成功 AutoDream 之后至少经过的小时数。 |
auto_dream_min_user_turns | 50 | 上次成功运行之后跨 channel 累计的成功外部用户 turn 数。 |
auto_dream_scan_interval | 8h | 后台检查间隔;检查本身很轻,只在阈值满足时运行 AutoDream。 |
Retention loop 在 runtime 活跃时每 24 小时运行一次。它会过期 suggestions,并对 daily 文件执行保留策略。
它不会裁剪 USER.md 或 MEMORY.md。
daily_mode 只接受 delete 或 archive。空值默认是 delete。
排查
如果新 session 中没有 memory,请检查 active toolset 列表里是否包含 memory,以及 resident runtime
是否用预期的 home 和 profile 启动。
如果 replace 或 remove 失败,请让 old_text 更具体。Anyy 会拒绝有歧义的匹配,避免改错条目。
如果 memory 写入被标记为 duplicate,说明同一个长期条目已经存在。