活跃记忆
活跃记忆是一个可选的、由插件拥有的阻塞式记忆子智能体,会在符合条件的对话会话中于主回复之前运行。 之所以存在它,是因为大多数记忆系统虽然能力很强,但都是被动响应式的。它们要么依赖主智能体来决定何时搜索记忆,要么依赖用户说出像“记住这个”或“搜索记忆”这样的话。等到了那时,原本可以让回复显得自然的记忆介入时机,往往已经过去了。 活跃记忆为系统提供了一次受限的机会,让它在生成主回复之前先呈现相关记忆。将这段内容粘贴到你的智能体中
如果你想让你的智能体通过一个自包含、默认安全的配置来启用活跃记忆,请将以下内容粘贴进去:main 智能体启用该插件,默认将其限制在私信风格的会话中,优先让它继承当前会话模型,并且当没有显式模型或继承模型可用时,仍允许使用内置远程回退。
之后,重启 Gateway 网关:
启用活跃记忆
最安全的配置方式是:- 启用插件
- 指定一个对话式智能体
- 仅在调优期间保持日志开启
openclaw.json 中加入以下内容:
plugins.entries.active-memory.enabled: true会启用该插件config.agents: ["main"]只让main智能体使用活跃记忆config.allowedChatTypes: ["direct"]默认只在私信风格的会话中启用活跃记忆- 如果未设置
config.model,活跃记忆会优先继承当前会话模型 config.modelFallbackPolicy: "default-remote"会在没有显式模型或继承模型可用时,保留内置远程回退这一默认行为config.promptStyle: "balanced"会为recent模式使用默认的通用提示风格- 活跃记忆仍然只会在符合条件的交互式持久聊天会话中运行
如何查看它
活跃记忆会为模型注入隐藏的系统上下文。它不会向客户端暴露原始的<active_memory_plugin>...</active_memory_plugin> 标签。
会话开关
如果你想在不编辑配置的情况下,为当前聊天会话暂停或恢复活跃记忆,请使用插件命令:plugins.entries.active-memory.enabled、智能体目标设置或其他全局配置。
如果你希望这个命令写入配置,并为所有会话暂停或恢复活跃记忆,请使用显式的全局形式:
plugins.entries.active-memory.config.enabled。它会保持
plugins.entries.active-memory.enabled 为开启状态,以便该命令之后仍可用于重新启用活跃记忆。
如果你想查看活跃记忆在实时会话中的具体行为,请为该会话开启详细模式:
- 一行活跃记忆状态,例如
Active Memory: ok 842ms recent 34 chars - 一条可读的调试摘要,例如
Active Memory Debug: Lemon pepper wings with blue cheese.
它何时运行
活跃记忆使用两个门槛条件:- 配置选择启用
必须启用该插件,且当前智能体 id 必须出现在
plugins.entries.active-memory.config.agents中。 - 严格的运行时资格 即使已启用并已指定目标,活跃记忆也只会在符合条件的交互式持久聊天会话中运行。
会话类型
config.allowedChatTypes 控制哪些类型的对话可以运行活跃记忆。
默认值是:
它在哪些地方运行
活跃记忆是一项对话增强功能,而不是一个平台范围内的推理功能。| 界面 | 会运行活跃记忆吗? |
|---|---|
| Control UI / web chat 持久会话 | 是,前提是插件已启用且智能体已被指定为目标 |
| 同一持久聊天路径上的其他交互式渠道会话 | 是,前提是插件已启用且智能体已被指定为目标 |
| 无头单次运行 | 否 |
| 心跳/后台运行 | 否 |
通用内部 agent-command 路径 | 否 |
| 子智能体/内部辅助执行 | 否 |
为什么使用它
在以下情况下,请使用活跃记忆:- 会话是持久的且面向用户
- 智能体拥有有意义的长期记忆可供搜索
- 连续性与个性化比纯粹的提示确定性更重要
- 稳定偏好
- 重复习惯
- 应该自然浮现的长期用户上下文
- 自动化
- 内部工作器
- 单次 API 任务
- 那些隐藏式个性化会让人感到意外的场景
它如何工作
运行时形态如下: 这个阻塞式记忆子智能体只能使用:memory_searchmemory_get
NONE。
查询模式
config.queryMode 控制阻塞式记忆子智能体能看到多少对话内容。
提示风格
config.promptStyle 控制阻塞式记忆子智能体在决定是否返回记忆时有多积极或多严格。
可用风格:
balanced:适用于recent模式的通用默认值strict:最不积极;适合你希望尽量减少附近上下文外溢影响时使用contextual:最有利于连续性;适合对话历史应当更重要时使用recall-heavy:即使匹配较弱但仍合理时,也更愿意呈现记忆precision-heavy:除非匹配非常明显,否则会强烈偏向返回NONEpreference-only:针对收藏、习惯、例行模式、口味和重复性个人事实进行优化
config.promptStyle 时,默认映射为:
config.promptStyle,则以该覆盖值为准。
示例:
模型回退策略
如果未设置config.model,活跃记忆会按以下顺序尝试解析模型:
config.modelFallbackPolicy 控制最后这一步。
默认值:
resolved-only。
高级逃生舱选项
这些选项有意不属于推荐配置的一部分。config.thinking 可以覆盖阻塞式记忆子智能体的思考级别:
config.promptAppend 会在默认活跃记忆提示之后、对话上下文之前,附加额外的操作员指令:
config.promptOverride 会替换默认的活跃记忆提示。OpenClaw 仍会在其后附加对话上下文:
NONE 或适用于主模型的紧凑用户事实上下文进行了调优。
message
只发送最新一条用户消息。
- 你想要最快的行为
- 你希望对稳定偏好召回有最强的偏向
- 后续轮次不需要对话上下文
- 从
3000到5000ms 左右开始
recent
发送最新一条用户消息以及少量最近的对话尾部内容。
- 你希望在速度和对话语境之间取得更好的平衡
- 后续问题通常依赖最近几轮对话
- 从
15000ms 左右开始
full
将完整对话发送给阻塞式记忆子智能体。
- 你更看重最强的召回质量,而不是延迟
- 对话中在线程较早位置包含重要铺垫信息
- 与
message或recent相比,应显著增加 - 根据线程大小,从
15000ms 或更高开始
转录持久化
活跃记忆阻塞式记忆子智能体运行时,会在该阻塞式记忆子智能体调用期间创建一个真实的session.jsonl 转录。
默认情况下,该转录是临时的:
- 它会被写入临时目录
- 它仅用于阻塞式记忆子智能体运行
- 运行结束后会立即删除
config.transcriptDir 更改这个相对子目录。
请谨慎使用:
- 在繁忙会话中,阻塞式记忆子智能体转录可能会快速累积
full查询模式可能会复制大量对话上下文- 这些转录包含隐藏提示上下文和已召回的记忆
配置
所有活跃记忆配置都位于:| 键名 | 类型 | 含义 |
|---|---|---|
enabled | boolean | 启用插件本身 |
config.agents | string[] | 可使用活跃记忆的智能体 id |
config.model | string | 可选的阻塞式记忆子智能体模型引用;未设置时,活跃记忆会使用当前会话模型 |
config.queryMode | "message" | "recent" | "full" | 控制阻塞式记忆子智能体能看到多少对话内容 |
config.promptStyle | "balanced" | "strict" | "contextual" | "recall-heavy" | "precision-heavy" | "preference-only" | 控制阻塞式记忆子智能体在决定是否返回记忆时有多积极或多严格 |
config.thinking | "off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "adaptive" | 阻塞式记忆子智能体的高级思考覆盖设置;默认值为 off 以提高速度 |
config.promptOverride | string | 高级完整提示替换;不建议正常使用 |
config.promptAppend | string | 附加到默认或覆盖提示后的高级额外指令 |
config.timeoutMs | number | 阻塞式记忆子智能体的硬超时时间 |
config.maxSummaryChars | number | 活跃记忆摘要允许的最大总字符数 |
config.logging | boolean | 在调优期间输出活跃记忆日志 |
config.persistTranscripts | boolean | 将阻塞式记忆子智能体转录保留在磁盘上,而不是删除临时文件 |
config.transcriptDir | string | 智能体会话文件夹下的相对阻塞式记忆子智能体转录目录 |
| 键名 | 类型 | 含义 |
|---|---|---|
config.maxSummaryChars | number | 活跃记忆摘要允许的最大总字符数 |
config.recentUserTurns | number | 当 queryMode 为 recent 时要包含的先前用户轮次数 |
config.recentAssistantTurns | number | 当 queryMode 为 recent 时要包含的先前助手轮次数 |
config.recentUserChars | number | 每个最近用户轮次的最大字符数 |
config.recentAssistantChars | number | 每个最近助手轮次的最大字符数 |
config.cacheTtlMs | number | 对重复且相同查询的缓存复用时间 |
推荐设置
从recent 开始。
/verbose on,而不要寻找单独的活跃记忆调试命令。
然后再转向:
- 如果你想降低延迟,使用
message - 如果你认为额外上下文值得更慢的阻塞式记忆子智能体,则使用
full
调试
如果活跃记忆没有出现在你预期的位置:- 确认已在
plugins.entries.active-memory.enabled下启用该插件。 - 确认当前智能体 id 已列在
config.agents中。 - 确认你是在通过交互式持久聊天会话进行测试。
- 打开
config.logging: true并查看 Gateway 网关日志。 - 使用
openclaw memory status --deep验证记忆搜索本身是否正常工作。
maxSummaryChars
- 降低
queryMode - 降低
timeoutMs - 减少最近轮次数
- 降低每轮字符上限