Memory(记忆)
侧栏 → Memory Profiles(位于 Tasks 分组),再在 Agent 编辑页 → Memory 中按 Agent 开启。
Memory 是 Agent 的自动长期记忆。每轮对话结束后,后台 Selector 会先浏览完整记忆目录并筛出相关条目,再由 MemoryLLM 阅读候选正文并执行最终修改。在后续对话中,Agent 通过 search_memory 和 read_memory 工具把它们读回来。
可以把它理解为:Agent 从每次对话中自我学习,无需你显式教学,也不会撑爆系统提示词。
工作原理
- 筛选 —— 对话结束后,selector 模型 用本轮对话匹配全部全局记忆和当前工作区记忆的自包含标题。标题在预算内时一次完成;目录过大时只将对话压缩一次,再用简短事实分批匹配标题。Selector 不读取正文;未配置时复用 writer 模型。
- 提取 —— writer 模型 阅读候选条目的完整正文和本轮对话,再决定新建、更新、删除或不修改。
- 读取 —— 后续对话中 Agent 调用:
search_memory—— 在已存记忆中做 BM25 关键词查找read_memory—— 按 slug 读取某条记忆的完整内容
- 维护 —— 后台任务保持记忆库健康:
- Consolidate(合并) —— 合并、去重相关记忆
- Reconcile(校正) —— 重建索引、清理陈旧条目
- 删除 —— 被删除的记忆移到
.archive/,可恢复。
全局与工作区记忆
一个 Memory Profile 同时包含两层记忆:
- 全局 —— 跨项目生效的用户偏好、机器环境和通用工作方式。
- 工作区 —— 按当前
workPath隔离的项目路径、约定、模块关系、构建步骤和架构决策。
频道仍然只需选择一个 Memory Profile。每轮对话会同时读取全局记忆和当前工作区记忆;不同 workPath 使用独立的数据库和检索索引,不会互相搜索或写入。未配置 workPath 的会话(包括普通 Web 对话)统一使用 ~/.sbot/workspace 作为默认记忆工作区,不会把所有内容都写进全局记忆。Memory Profiles 的查看窗口可以在全局和已创建的工作区之间切换。
配置项
Memory Profile 定义记忆如何被提取与读取。侧栏 → Memory Profiles → 新建:
| 字段 | 说明 |
|---|---|
| 名称 | 该 Profile 的显示名称 |
| 启用 | 暂停该 Profile,而不删除配置 |
| Writer 模型 | 阅读候选完整正文并执行最终修改的权威 MemoryLLM |
| Selector 模型 | 可选的低成本目录筛选模型;不设置时复用 Writer 模型 |
| Writer 提示词 | 控制 提取什么 |
| Read 提示词 | 召回的记忆如何回填进提示词 |
随后在 Agent → Memory 区块开启 Memory 并选择 Profile。在 Memory Profiles 页面可以 查看记忆、检查 pending / failed 后台任务、重试或删除任意失败任务,也可以用 整理记忆 排队合并/压缩现有记忆,用 同步文件索引 重新扫描文件与索引。
Memory vs Notes vs Wiki
| 写入方 | 写入时机 | |
|---|---|---|
| Memory | 后台 MemoryLLM | 对话空闲后自动写入 |
| Notes | 人 / 运维者 | 手动写入,随后自动注入或通过 note_search 召回 |
| Wiki | 人 / Wiki 数据源插件 | 编纂后的页面供 Agent 搜索 / 读取 |
三者中 Memory 最"省心、自动"。