主动记忆如何工作
工作原理¶
flowchart LR
U["User Message"] --> D["Deterministic Trigger Recall"]
D -->|strong trusted match| I["Inject Bounded Hidden Context"]
D -->|weak or empty| H["Check Recall Intent"]
H -->|no| O["Inject Bounded Recall Outcome"]
H -->|yes| R["Active Memory Deep Recall Sub-Agent"]
R -->|NONE| M
R -->|unavailable| O
R -->|relevant summary| I
O --> M["Main Reply"]
I --> M
深度召回子代理只能调用已配置的记忆召回工具(见 记忆工具)。如果查询与可用记忆之间的关联较弱,它会返回 NONE,主回复将在没有额外上下文的情况下继续。主动跳过无意图的情况和不可用的召回只会添加一条固定的、有界的结果说明。
Active Memory 是一种对话增强功能,而非平台级推理功能:
| 场景 | 会运行 Active Memory 吗? |
|---|---|
| Control UI / Web 聊天持久会话 | 是,当任一激活路径定向到该代理时 |
| 同一持久聊天路径上的其他交互式频道会话 | 是,当任一激活路径允许该对话时 |
| 无头一次性运行 | 否 |
| 心跳/后台运行 | 否 |
通用内部 agent-command 路径 |
否 |
| 子代理/内部辅助执行 | 否 |
会话间消息和子完成投递不会运行 Active Memory,即使它们到达可见对话中也是如此。OpenClaw 会根据它们的类型化投递来源跳过召回。同一对话中随后的人类消息在通常的定向和会话规则下仍符合条件。
请在会话持久且面向用户、代理拥有有意义的长期记忆可供搜索,并且连续性与个性化比原始提示确定性更重要时使用:稳定的偏好、重复出现的习惯、应自然浮现的长期上下文。它不适合自动化、内部工作器、一次性 API 任务,或任何隐藏个性化会令人意外的场景。
运行时机¶
Active Memory 为深度召回通道提供两条定向路径:
- Remember across conversations 会自动定向启用有效
memory.search.rememberAcrossConversations设置的代理,但仅限私密直接对话或持久的显式 UI 对话。 - Advanced Active Memory 定向
plugins.entries.active-memory.config.agents中列出的代理 ID,并应用插件的聊天类型和聊天 ID 控制。
两条路径都要求插件已启用,并且是符合条件的交互式持久会话。会话级 /active-memory off 会暂停该会话的两条路径。如果任何条件不满足,则 Active Memory 不会在该回合运行,主回复不受影响。
config.mode 控制定向回合何时启动阻塞式子代理:
| 模式 | 行为 |
|---|---|
escalate |
默认。仅在通道 1 没有强命中时,为召回意图运行。 |
always |
保留之前的行为,在每个符合条件的定向回合都运行。 |
off |
禁用深度召回,但不卸载插件。 |
确定性可信触发器通道在 off 模式下仍可用。
rememberAcrossConversations 保持不变:它仍然控制深度召回是否可以搜索其他私密对话。
会话类型¶
config.allowedChatTypes 控制哪些类型的会话可以运行 Advanced Active Memory 路径。它不能扩大 Remember across conversations 的范围:即使 Advanced Active Memory 被允许在群组或频道中使用,该产品设置仍保持仅私密。默认值:
有效值:direct、group、channel、explicit(使用不透明会话 ID 的 portal 式会话,例如 agent:main:explicit:portal-123)。直接消息会话默认运行;群组、频道和显式会话需要选择加入:
为了在允许的聊天类型内进行更小范围的发布,请添加
config.allowedChatIds 和 config.deniedChatIds:
allowedChatIds是已解析会话 ID 的允许列表。当非空时,Active Memory 仅对会话 ID 位于列表中的会话运行——这会同时收窄所有允许的聊天类型,包括直接消息。若要在只收窄群组的同时保留所有直接消息,请将直接对端 ID 也添加到allowedChatIds中,或者将allowedChatTypes限制在你正在测试的群组/频道发布范围内。deniedChatIds是一个拒绝列表,始终优先于allowedChatTypes和allowedChatIds。
ID 来自持久频道会话键(例如飞书 chat_id/open_id、Telegram 聊天 ID、Slack 频道 ID)。匹配不区分大小写。如果 allowedChatIds 非空且 OpenClaw 无法解析该会话的会话 ID,则 Active Memory 会跳过该回合,而不是猜测。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw