---
summary: "升级流程,其表面运行活动内存、两个目标路径以及高级路径允许的会话类型。"
read_when:
- "你想了解深度回忆流程"
- "您正在检查对话是否符合条件"
title: "主动记忆如何运作"
---
## 工作原理
```mermaid
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
```
深度召回子代理只能调用已配置的内存召回工具(请参阅[内存工具](/concepts/active-memory/memory-tools#memory-tools))。如果查询和可用内存之间的连接很弱,它会返回 `NONE` 并且主要回复将在没有额外上下文的情况下继续进行。有意无意的跳过和不可用的回忆仅添加固定的、有限的结果注释。
主动记忆是一种会话增强功能,而不是平台范围的推理功能:
| 表面 | 是否运行主动记忆? |
| ------------------------------------------------------------------- | -------------------------------------------------------- |
| Control UI / 网络聊天持续会话 | 是,当任一激活路径以代理为目标时 |
| 控制界面 / Web 聊天持久会话 | 是,当任一激活路径目标指向该代理时 |
| 同一持久聊天路径上的其他交互式通道会话 | No |
| Heartbeat/background 运行 | No |
| 通用内部 `agent-command` 路径 | No |
| 子 agent/internal 帮助程序执行 | No |
会话间消息和子完成传递不会运行 Active Memory,即使它们到达可见对话时也是如此。 OpenClaw 使用其键入的交付来源来跳过召回。根据通常的定位和会话规则,同一对话中的后续人工消息仍然符合资格。
当会话持久且面向用户时使用它,代理具有有意义的长期记忆来搜索,并且 continuity/personalization 比原始提示确定性更重要:稳定的偏好、反复出现的习惯、应该自然浮现的长期上下文。它不太适合自动化、内部员工、一次性 API 任务或任何隐藏的个性化令人惊讶的地方。
## 何时运行
Active Memory 有两个面向 deep-recall 通道的定位路径:
1. **跨会话记忆** 会自动定位到其有效 `memory.search.rememberAcrossConversations` 设置已启用的 agent,但仅限于私密直接对话或持久化的显式 UI 会话。
2. **高级活动内存** 以 `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 允许在群组或频道中运行,该产品设置仍然只限私密场景。默认值:
```json5
allowedChatTypes: ["direct"]
```
有效值:`direct`、`group`、`channel`、`explicit`(门户风格会话,具有一个不透明的 session id,例如 `agent:main:explicit:portal-123`)。直接消息会话默认运行;group、channel 和 explicit 会话需要显式启用:
```json5
allowedChatTypes: ["direct", "group"]
allowedChatTypes: ["direct", "group", "channel"]
```
如果要在某个允许的聊天类型内进行更小范围的灰度发布,可以添加 `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,则活动内存会跳过该回合而不是猜测。
```json5
allowedChatTypes: ["direct", "group"],
allowedChatIds: ["ou_operator_open_id", "oc_small_ops_group"],
deniedChatIds: ["oc_large_public_group"]
```