跳到主要内容

持久化记忆

持久化记忆让 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.mdMEMORY.md

Memory context 在受控的 context-building 阶段组装。某一轮中途写入 memory,不会改写已经发出的 模型请求。

Memory 工具操作

普通模型可见的 memory 入口只有一个结构化工具:memory,由 memory 工具集提供。

它接受:

参数是否必填可选值含义
actionadd, replace, remove要执行的 memory 操作。
targetuser, memory, dailyuserUSER.mdmemoryMEMORY.mddaily 追加今天的 daily note。
contentaddreplace 必填string新条目内容。
old_textreplaceremove 必填string用来识别已有条目的短唯一子串。

Schema 是关闭的。scopekindmodegate、行号范围、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 和非空 contentold_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.mdMEMORY.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_startedmemory_review_completedmemory_review_failed 事件。

如果 review 成功写入用户 memory,Anyy 可以发布一条渠道通知,说明长期记忆已更新。主 turn 中的普通工具调用不会重置 10-turn 节奏。

记忆 Scope

当前 profile memory 布局使用 profile 级 USER.mdMEMORY.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.mdMEMORY.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_enabledtrue在 resident runtime 中启动后台 retention loop。
suggestion_ttl_days14过期超过该 TTL 的 pending suggestions。
daily_keep_days180daily/*.md daily memory 文件的保留窗口。
daily_modedeletedelete 删除过期 daily 文件;archive 移到 archive/
auto_dream_enabledtrue在 memory maintenance 启用时允许 AutoDream consolidation。
auto_dream_min_hours168上次成功 AutoDream 之后至少经过的小时数。
auto_dream_min_user_turns50上次成功运行之后跨 channel 累计的成功外部用户 turn 数。
auto_dream_scan_interval8h后台检查间隔;检查本身很轻,只在阈值满足时运行 AutoDream。

Retention loop 在 runtime 活跃时每 24 小时运行一次。它会过期 suggestions,并对 daily 文件执行保留策略。 它不会裁剪 USER.mdMEMORY.md

daily_mode 只接受 deletearchive。空值默认是 delete

排查

如果新 session 中没有 memory,请检查 active toolset 列表里是否包含 memory,以及 resident runtime 是否用预期的 home 和 profile 启动。

如果 replace 或 remove 失败,请让 old_text 更具体。Anyy 会拒绝有歧义的匹配,避免改错条目。

如果 memory 写入被标记为 duplicate,说明同一个长期条目已经存在。