本页内容
本页内容
会话和内存
主动记忆如何运作
工作原理
flowchart LR
U["User Message"] --> D["Rule-Based 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 并且主要回复将在没有额外上下文的情况下继续进行。有意无意的跳过和不可用的回忆仅添加固定的、有限的结果注释。
主动记忆是一种会话增强功能,而不是平台范围的推理功能:
| 表面 | 是否运行主动记忆? |
|---|---|
| Control UI / 网络聊天持续会话 | 是,当任一激活路径以代理为目标时 |
| 控制界面 / Web 聊天持久会话 | 是,当任一激活路径目标指向该代理时 |
| 同一持久聊天路径上的其他交互式通道会话 | No |
| Heartbeat/background 运行 | No |
通用内部 agent-command 路径 |
No |
| 子 agent/internal 帮助程序执行 | No |
会话间消息和子完成传递不会运行 Active Memory,即使它们到达可见对话时也是如此。 OpenClaw 使用其键入的交付来源来跳过召回。根据通常的定位和会话规则,同一对话中的后续人工消息仍然符合资格。
当会话持久且面向用户时使用它,代理具有有意义的长期记忆来搜索,并且 continuity/personalization 比原始提示确定性更重要:稳定的偏好、反复出现的习惯、应该自然浮现的长期上下文。它不太适合自动化、内部员工、一次性 API 任务或任何隐藏的个性化令人惊讶的地方。
何时运行
Active Memory 有两个面向 deep-recall 通道的定位路径:
- 跨会话记忆 会自动定位到其有效
memory.search.rememberAcrossConversations设置已启用的 agent,但仅限于私密直接对话或持久化的显式 UI 会话。 - 高级活动内存 以
plugins.entries.active-memory.config.agents中列出的代理 ID 为目标,并应用插件的聊天类型和聊天 ID 控件。
这两条路径都要求插件已启用,并且会话必须是符合条件的交互式持久会话。会话级 /active-memory off 会暂停该会话的这两条路径。如果任何条件不满足,active memory 就不会在该轮运行,主回复也不会受影响。
config.mode 控制目标轮次何时启动阻塞式子 agent:
| 模式 | 行为 |
|---|---|
escalate |
默认值。仅在 lane 1 没有强匹配时,针对 recall 意图运行。 |
always |
保留之前的行为,在每个符合条件的目标轮次都运行。 |
off |
在不卸载插件的情况下禁用 deep recall。 |
基于规则的可信触发通道在 off 模式下仍然可用。 rememberAcrossConversations 不变:它仍然控制深度召回是否可以搜索其他私人对话。
会话类型
config.allowedChatTypes 控制哪些类型的会话可以运行高级 Active Memory 路径。它不能扩大跨会话记忆的范围:即使高级 Active Memory 允许在群组或频道中运行,该产品设置仍然只限私密场景。默认值:
有效值:direct、group、channel、explicit(门户风格会话,具有一个不透明的 session id,例如 agent:main:explicit:portal-123)。直接消息会话默认运行;group、channel 和 explicit 会话需要显式启用:
如果要在某个允许的聊天类型内进行更小范围的灰度发布,可以添加 config.allowedChatIds 和 config.deniedChatIds:
allowedChatIds是已解析会话 id 的允许名单。非空时,active memory 只会在会话 id 位于该列表中的会话上运行——这会一次性收窄所有允许的聊天类型,包括直接消息。若要保留所有直接消息,同时只收窄群组,请把直接对端 id 也加入allowedChatIds,或者将allowedChatTypes仅限制在你正在测试的 group/channel 灰度范围内。deniedChatIds是拒绝名单,优先级始终高于allowedChatTypes和allowedChatIds。
ID 来自持久通道会话密钥(例如 Feishu chat_id/open_id、Telegram 聊天 id、Slack 通道 id)。匹配不区分大小写。如果 allowedChatIds 非空并且 OpenClaw 无法解析会话的对话 ID,则活动内存会跳过该回合而不是猜测。
