OpenClaw 插件接入
通过 duMemory OpenClaw 插件(@baidu/openclaw-memory)接入 Agent 记忆服务,可在 OpenClaw 对话中自动 retain / recall 长期记忆。插件以 Cloud-only 方式运行,不会替换 OpenClaw 本地会话存储,仅额外将对话写入 duMemory Cloud,并在每次交互前自动召回相关记忆注入上下文。
OpenClaw 插件适合以 OpenClaw 作为 Agent 宿主的场景。安装后无需在业务代码中手动调用 API,即可获得自动召回、自动存储、记忆隔离、失败重试和历史回填能力。
连接信息
| 信息 | 值 |
|---|---|
| API Base URL | https://cloud.memory.bj.baidubce.com/api |
| API Key / Token | 在控制台“API Key”页签中创建。在 OpenClaw 插件中作为 DUMEMORY_API_TOKEN 环境变量或 duMemoryApiToken 配置使用 |
| Bank ID | 在控制台创建记忆库时设定,可静态指定,也可由插件动态派生 |
| 插件下载地址 | https://cloud-memory.bj.bcebos.com/baidu-openclaw-memory-0.8.0.tgz |
API Base URL 已包含
/api,不要再额外拼接。以下示例中<API_BASE_URL>替换为上述实际地址。
前提条件
- Node.js
>=22 - 已安装并可运行
openclaw - 可访问插件包下载地址,或可访问对应 npm registry / 内网 npm 源
- 已创建记忆库,获取 API Base URL、API Key 和 Bank ID
安装流程
1. 下载插件
1wget https://cloud-memory.bj.bcebos.com/baidu-openclaw-memory-0.8.0.tgz
2. 安装插件
1openclaw plugins install baidu-openclaw-memory-0.8.0.tgz
3. 运行配置向导
交互式配置,适合本地首次接入:
1node ~/.openclaw/extensions/dumemory-openclaw/dist/setup.js
非交互式配置,适合 CI / 生产环境。推荐通过环境变量引用 Token:
1export DUMEMORY_API_TOKEN="<your-api-key>"
2node ~/.openclaw/extensions/dumemory-openclaw/dist/setup.js \
3 --mode cloud \
4 --token-env DUMEMORY_API_TOKEN
4. 推荐固定 Bank ID
默认情况下,插件按 agent::channel::user 动态派生 Bank ID。本地单用户使用时推荐固定 Bank ID,避免因上下文缺失产生匿名 Bank:
1openclaw config set plugins.entries.dumemory-openclaw.config.dynamicBankId false --strict-json
2openclaw config set plugins.entries.dumemory-openclaw.config.bankId "<your-bank-id>"
切换 Bank 后,旧 Bank 中的记忆不会自动迁移。如需保留历史数据,请使用历史数据回填工具。
5. 验证安装与配置
1openclaw plugins inspect dumemory-openclaw
2openclaw config validate
3openclaw plugins doctor
6. 重启 OpenClaw
1openclaw gateway restart
插件默认行为:
- 每次对话前自动 recall 相关记忆,注入系统提示上下文,不污染可见聊天记录
- 每轮对话结束后自动 retain 对话内容
- 按 Bank ID 或动态 Bank 规则隔离记忆库
完整配置示例
配置路径:~/.openclaw/openclaw.json → plugins.entries.dumemory-openclaw.config
1{
2 "plugins": {
3 "entries": {
4 "dumemory-openclaw": {
5 "enabled": true,
6 "hooks": { "allowConversationAccess": true },
7 "config": {
8 "duMemoryApiUrl": "https://cloud.memory.bj.baidubce.com/api",
9 "duMemoryApiToken": {
10 "source": "env",
11 "provider": "default",
12 "id": "DUMEMORY_API_TOKEN"
13 },
14 "dynamicBankId": false,
15 "bankId": "<your-bank-id>"
16 }
17 }
18 }
19 }
20}
功能特性
| 功能 | 说明 |
|---|---|
| 自动召回(Auto-Recall) | 每次对话前自动检索相关记忆,注入系统提示上下文,不污染可见聊天记录 |
| 自动存储(Auto-Retain) | 每轮对话结束后自动将内容存入记忆库 |
| 记忆隔离 | 通过 dynamicBankGranularity 按 Agent、频道、用户或 Provider 隔离记忆库 |
| 历史回填 CLI | 将已有 OpenClaw 历史会话批量导入记忆库 |
| 失败重试队列 | API 暂时不可用时自动缓存,恢复后重试 |
| 会话过滤 | 通过 glob 模式排除定时任务、子 Agent 等会话 |
| 知识工具 | 可选注册 agent_knowledge_* 系列工具,支持 Agent 主动查询记忆 |
配置参考
配置路径:~/.openclaw/openclaw.json → plugins.entries.dumemory-openclaw.config
连接配置
| 配置项 | 默认值 | 说明 |
|---|---|---|
duMemoryApiUrl |
https://cloud.memory.bj.baidubce.com/api |
duMemory Cloud API 地址 |
duMemoryApiToken |
— | API 鉴权 Token。敏感信息,建议通过 SecretRef 引用环境变量 |
记忆库(Bank)配置
| 配置项 | 默认值 | 说明 |
|---|---|---|
dynamicBankId |
true |
启用动态记忆库,按上下文自动派生 Bank ID |
bankId |
— | dynamicBankId: false 时使用的静态 Bank ID |
bankIdPrefix |
— | Bank ID 前缀,如 prod → prod-agent::channel::user |
dynamicBankGranularity |
["agent", "channel", "user"] |
派生 Bank ID 所用字段。可选:agent、channel、user、provider |
bankMission |
— | 首次使用时写入 Bank 的 reflect_mission,仅影响 reflect 操作 |
retainMission |
— | 首次使用时写入 Bank 的 retain_mission,引导事实提取方向 |
observationsMission |
— | 首次使用时写入 Bank 的 observations_mission,引导观察合并方向 |
存储(Retain)配置
| 配置项 | 默认值 | 说明 |
|---|---|---|
autoRetain |
true |
每轮对话结束后自动存储 |
retainRoles |
["user", "assistant"] |
存储哪些角色的消息 |
retainFormat |
"json" |
存储格式:json(结构化数组)或 text(旧版标记格式) |
retainToolCalls |
true |
json 格式时是否包含工具调用内容 |
retainEveryNTurns |
1 |
每 N 轮存储一次,>1 时启用滑动窗口分块存储 |
retainOverlapTurns |
0 |
分块存储时额外包含的前几轮,窗口 = retainEveryNTurns + retainOverlapTurns |
retainTags |
[] |
所有存储文档附加的标签,也支持消息内联 <retain_tags> 指令 |
retainSource |
"openclaw" |
存储文档元数据中的 source 字段 |
retainDocumentScope |
"session" |
文档 ID 粒度:session(整个会话一个文档)或 turn(每次存储一个文档) |
召回(Recall)配置
| 配置项 | 默认值 | 说明 |
|---|---|---|
autoRecall |
true |
每次提示前自动召回记忆 |
recallBudget |
"mid" |
召回力度:low、mid、high |
recallMaxTokens |
1024 |
召回结果最大 token 数 |
recallTypes |
["observation"] |
召回的记忆类型:world、experience、observation |
recallRoles |
["user", "assistant"] |
构建召回查询时包含的消息角色 |
recallTopK |
— | 每轮最多注入的记忆条数,不设则不限 |
recallContextTurns |
1 |
构建召回查询时包含的历史轮数 |
recallMaxQueryChars |
800 |
召回查询最大字符数 |
recallPromptPreamble |
内置文本 | 注入记忆块前的提示语 |
recallInjectionPosition |
"prepend" |
注入位置:prepend、append、user |
recallTimeoutMs |
10000 |
自动召回超时时间,单位毫秒 |
会话过滤
通过 glob 模式排除定时任务、子 Agent 等会话,控制哪些会话写入或读取记忆。
| 配置项 | 默认值 | 说明 |
|---|---|---|
excludeProviders |
["heartbeat"] |
跳过指定 Provider 的所有召回和存储 |
ignoreSessionPatterns |
[] |
完全忽略的会话 key glob 模式,不召回、不存储 |
statelessSessionPatterns |
[] |
只读会话 glob 模式,永远不存储;skipStatelessSessions: true 时也不召回 |
skipStatelessSessions |
true |
true 时无状态会话同时跳过召回 |
Glob 语法:* 匹配单段(不含 :),** 匹配多段(含 :)。会话 key 格式:agent:<agentId>:<type>:<uuid>。
典型场景:定时任务完全忽略,子 Agent 可读不可写:
1{
2 "ignoreSessionPatterns": ["agent:*:cron:**"],
3 "statelessSessionPatterns": ["agent:*:subagent:**"],
4 "skipStatelessSessions": false
5}
其他配置
| 配置项 | 默认值 | 说明 |
|---|---|---|
retainQueuePath |
~/.openclaw/data/dumemory-retain-queue.jsonl |
失败重试队列文件路径 |
retainQueueMaxAgeMs |
-1 |
队列条目最大存活时间,单位毫秒,-1 表示永不过期 |
retainQueueFlushIntervalMs |
60000 |
队列刷新间隔,单位毫秒 |
enableKnowledgeTools |
false |
注册 agent_knowledge_* 系列工具 |
logLevel |
"info" |
日志级别:off、error、warning、info、debug |
logSummaryIntervalMs |
300000 |
日志摘要聚合间隔,0 表示每次都打印 |
debugPerfTiming |
false |
输出每个钩子的性能耗时日志 |
Bank ID 配置示例
单用户或本地 CLI/TUI 使用时,推荐指定静态 Bank ID:
1{
2 "plugins": {
3 "entries": {
4 "dumemory-openclaw": {
5 "enabled": true,
6 "hooks": { "allowConversationAccess": true },
7 "config": {
8 "duMemoryApiUrl": "https://cloud.memory.bj.baidubce.com/api",
9 "duMemoryApiToken": {
10 "source": "env",
11 "provider": "default",
12 "id": "DUMEMORY_API_TOKEN"
13 },
14 "dynamicBankId": false,
15 "bankId": "<your-bank-id>"
16 }
17 }
18 }
19 }
20}
改完后重启 OpenClaw gateway:
1openclaw gateway restart
如果不指定,插件默认使用动态 Bank ID,格式类似:
1agent::channel::user
历史数据回填
插件内置 dumemory-openclaw-backfill CLI,可将已有 OpenClaw 历史会话批量导入记忆库,默认继承当前插件的 Bank 路由配置。
先 dry-run 确认导入计划:
1node ~/.openclaw/extensions/dumemory-openclaw/dist/backfill.js --dry-run --limit 20
确认后执行导入:
1node ~/.openclaw/extensions/dumemory-openclaw/dist/backfill.js --wait-until-drained --max-pending-operations 0
临时指定 Token:
1node ~/.openclaw/extensions/dumemory-openclaw/dist/backfill.js --api-token "$DUMEMORY_API_TOKEN"
临时指定 API 地址:
1node ~/.openclaw/extensions/dumemory-openclaw/dist/backfill.js \
2 --api-url "https://cloud.memory.bj.baidubce.com/api" \
3 --api-token "$DUMEMORY_API_TOKEN"
指定 Agent 并断点续传:
1node ~/.openclaw/extensions/dumemory-openclaw/dist/backfill.js \
2 --agent my-agent \
3 --resume \
4 --max-pending-operations 10
常用参数:
| 参数 | 说明 |
|---|---|
--agent <id> |
只导入指定 Agent 的历史,可重复 |
--exclude-archive |
跳过迁移备份归档目录 |
--bank-strategy <mode> |
mirror-config(跟随插件配置)、agent(按 Agent 建 Bank)、fixed(固定 Bank) |
--resume |
跳过断点文件中已完成的条目 |
--checkpoint <path> |
自定义断点文件路径 |
--wait-until-drained |
阻塞等待所有队列处理完毕后再退出 |
--dry-run |
只打印导入计划,不实际执行 |
--limit <n> |
最多导入 N 个会话 |
--api-token <token> |
临时指定 Token,也可通过 $DUMEMORY_API_TOKEN 注入 |
--api-url <url> |
临时指定 API 地址 |
卸载
1openclaw plugins uninstall dumemory-openclaw
使用建议
- 本地单用户场景建议固定
bankId,避免动态上下文缺失导致写入匿名 Bank。 - 多 Agent、多频道或多用户场景可使用动态 Bank,并通过
dynamicBankGranularity规划隔离维度。 - 定时任务、心跳、子 Agent 等不应写入记忆的会话,建议通过会话过滤配置排除。
- API Key 建议通过环境变量或 SecretRef 引用,不要明文写入公开配置。
- 启用或修改插件配置后,执行
openclaw config validate和openclaw plugins doctor,再重启 gateway。
评价此篇文章
