让 Agent 的记忆更智能,让 Token 的预算更健康。
大家可能都在陆续发现,OpenClaw 存在一个隐蔽但致命的问题 —— 你用得越久,Token 就烧得越快,而你的钱包正在为大量无关记忆买单。

为什么会这样?OpenClaw 会默认把整份
MEMORY.md 每轮塞进
system_prompt—— 只做加载,不做检索,且随着使用无限增长。而 Memory 中大部分的内容,跟当前对话都毫无关系。
想象一下:你只是问 Agent「今天有什么任务?」,但系统却把过去几个月积累的所有诊断规范、使用统计、零散笔记全部加载进来。这就像为了找一把钥匙,每次都要把整个仓库搬出来。
所以我们最近对 Agent 的记忆痛点进行了一些探索,并为 OpenClaw 做的一个开源的 PowerMem 记忆插件 —— memory-powermem。装上这个插件之后,OpenClaw 的记忆机制变成: 会话前按需检索相关记忆注入上下文,会话后智能抽取关键事实落库。只把该用的放进去,该记的存下来。
实测效果如下:
| 实验组 | 输入 Token 总量 |
|---|---|
| OpenClaw 默认(memory-core) | 24,611,530 |
| OpenClaw + LanceDB | 51,574,530 |
| OpenClaw + PowerMem 插件 | 4,533,508 |
同等任务下,Token 消耗降至默认方案的 18%。


插件接管了 OpenClaw 的记忆读写,通过两条自动化链路工作:
autoRecall)每次会话开始前,插件用你发的第一条消息向 PowerMem 做语义检索,把 Top-K 条相关记忆格式化后注入上下文前部。Agent 从第一轮就能看到跟当前问题直接相关的历史事实,而不是把整份
MEMORY.md 丢进去。
autoCapture)会话正常结束时,插件把本轮对话发给 PowerMem,PowerMem 用 LLM 从中抽取事实,去重、合并后落库。存下来的是提炼过的记忆单元,不是整段对话的拷贝。
两者形成闭环: 会话前按需注入,会话后智能抽取。只把该用的放进上下文,该记的存进库。
插件还向 Agent 暴露了三个工具:
memory_recall:按自然语言查询检索长期记忆memory_store:写入一条记忆(用户说「请记住……」时触发)memory_forget:按 ID 或搜索条件删除记忆(也可用于合规删除场景)此外,通过 PowerMem 的 Dashboard(
http://localhost:8000/dashboard/)可以在 Web 端浏览、筛选和统计所有记忆。记忆不再是黑盒里的上下文——你能看到系统记住了什么、什么时候记的、被检索过几次。运维时也可以用
openclaw ltm search 直接在终端查询。
用两个例子直观感受。
假设
MEMORY.md 已经积累到 50KB(约 15,000 tokens),里面有 Agent 使用统计、Token 消耗记录、定时任务配置、诊断规范、各种零散笔记。
MEMORY.md 整份进
system_prompt(15,000 tokens 固定基线),再加上模型调用
memory_search 拉取的片段(约 1,500 tokens)。合计约
16,500 tokens/轮,其中绝大部分跟定时任务无关。autoRecall 用这句话做查询,只返回跟定时任务和今天相关的精炼记忆。合计约
650 tokens/轮,
省了 90%+。MEMORY.md 15,000 tokens + 诊断规范整章 2,000 tokens。实际有用的就第一步:检查网关健康这一句。合计
17,000+ tokens/轮。autoRecall 返回诊断相关记忆。合计约
680 tokens/轮,
省了 90%+。插件不是少调一次 API,而是用按需检索替代了整份
MEMORY.md 每轮必带。
算一笔账:假设上下文窗口 128K,输入单价约 2 美元 /1M tokens。每轮省 ~15,000 tokens,每天 50 轮对话,一个月仅记忆相关部分就能省约
45 美元。Agent 越多、
MEMORY.md 越长、调用越频繁,节省越显著。
做这个插件之前,我们先看了 OpenClaw 的记忆机制到底是怎么工作的。
OpenClaw 把记忆存在 Markdown 文件里:
MEMORY.md(精选长期记忆)和
memory/YYYY-MM-DD.md(按日追加的日志)。模型通过
memory_search 和
memory_get 两个工具做语义检索或按路径读取。写入依赖 compaction 前的 memory flush 和 session-memory 钩子。
这套设计在文件即真相和可检索之间做了平衡,但有几个结构性问题:
MEMORY.md 整份进
system_prompt,不做检索,写什么、写多少完全依赖模型判断。历史会话一旦被整段写入,就会在后续检索中反复以大块形式出现。PowerMem 针对这些问题做了不同的选择:
user_id、
agent_id,支持精确删除、跨 Agent 共享插件把这些能力接入 OpenClaw,在不改变使用方式的前提下替换底层记忆机制。槽位切换,零侵入——随时可以切回
memory-core,原有文件不受影响。
上一篇文章没有详细介绍安装 PowerMem 的步骤,今天正好亡羊补牢,给大家一份儿可以直接让 OpenClaw 自行安装 PowerMem 的步骤。
社区的运营小编已经通过以下步骤,在自动和手动两条路径中都完成了 PowerMem 的安装。上手几乎负门槛,欢迎大家试用!

通过 ClawHub Skill 安装,OpenClaw 自动完成插件下载、配置和槽位切换:
# 1. 登录 ClawHub(第一次使用) clawhub login # 2. 一键安装skills clawhub install teingi/install-powermem-memory-minimal # 3. 查看已安装的技能 clawhub list
有了 Skill 之后,你就可以指挥你的 OpenClaw 去自动安装
memory-powermem 插件了:

当然你如果你还想省事,你可以直接扔一个 Skill 链接,让小"龙虾"帮你搞定安装,此时你只需要喝着咖啡,稍等片刻即可:
参考这个链接: https://clawhub.ai/teingi/install-powermem-memory-minimal,帮我安装一下memory-powermem插件,并做一下记忆的测试


前置条件:本机需要 Python 3.10+(
python3 --version 确认)。如果还没装:macOS 用
brew install python,Linux 用系统包管理器,Windows 从 python.org 下载安装(安装时勾选 Add to PATH)。
终端执行
openclaw --version,并且你已经在 OpenClaw 里配好了
平时对话用的模型(能正常回复即可)。
在创建虚拟环境或执行
pip install
之前必须先确认版本,否则后续容易装失败或运行异常:
python3 --version
输出应为 Python 3.10.x、3.11.x、3.12.x 等(次版本号 ≥ 10)。也可用下面命令做一次硬性校验(不通过会报错退出):
python3 -c "import sys; assert sys.version_info >= (3, 10), '需要 Python 3.10 或更高'; print(sys.version.split()[0], 'OK')"
若版本不够:先升级本机 Python,或安装并使用
python3.11 /
python3.12 等满足要求的解释器,并将下面步骤里的
python3 换成实际命令(例如
python3.12 -m venv ...)。
建议用虚拟环境,然后安装:
mkdir ~/.openclaw/powermem python3 -m venv ~/.openclaw/powermem/.venv source ~/.openclaw/powermem/.venv/bin/activate pip install powermem
装好后执行
pmem --version,能输出版本就行。
在目录下
~/.openclaw/powermem 新建
.env,配置 LLM 和 Embedding(数据库开箱即用,无需额外配置):
mkdir -p ~/.openclaw/powermem && cd ~/.openclaw/powermem cat > .env << 'EOF' TIMEZONE=Asia/Shanghai LLM_PROVIDER=qwen LLM_API_KEY=your_api_key_here LLM_MODEL=qwen-plus EMBEDDING_PROVIDER=qwen EMBEDDING_API_KEY=your_api_key_here EMBEDDING_MODEL=text-embedding-v4 EMBEDDING_DIMS=1536 EOF
将
your_api_key_here 替换为你的 API Key。
PowerMem 需要配置 LLM(用于智能抽取)和 Embedding(用于向量检索),两者可以用不同供应商。内置支持的 LLM Provider:
| LLM_PROVIDER | 说明 | 推荐模型 |
| --- | --- | --- |
|
qwen | 通义千问 |
qwen-plus |
|
deepseek | DeepSeek |
deepseek-chat |
|
siliconflow | 硅基流动(聚合多家模型) | 按需选择 |
|
ollama | 本地部署(Ollama) | 按需选择 |
|
vllm | 本地部署(vLLM) | 按需选择 |
|
openai | OpenAI 兼容接口 |
gpt-4 |
|
anthropic | Anthropic 兼容接口 |
claude-sonnet-4-20250514 |
大量国内供应商提供 OpenAI 或 Anthropic 兼容 API,可以直接用
openai /
anthropic 作为 Provider,修改对应的
BASE_URL 指向实际服务地址即可。
适用于月之暗面、零一万物、百川等:
# 月之暗面 Kimi LLM_PROVIDER=openai LLM_API_KEY=your_moonshot_api_key LLM_MODEL=moonshot-v1-8k OPENAI_LLM_BASE_URL=https://api.moonshot.cn/v1 # 零一万物 LLM_PROVIDER=openai LLM_API_KEY=your_yi_api_key LLM_MODEL=yi-large OPENAI_LLM_BASE_URL=https://api.lingyiwanwu.com/v1
适用于智谱等:
# 智谱 GLM LLM_PROVIDER=anthropic LLM_API_KEY=your_zhipu_api_key LLM_MODEL=glm-4-plus ANTHROPIC_LLM_BASE_URL=https://open.bigmodel.cn/api/paas/v4
原理:只要该服务兼容 OpenAI 的
/v1/chat/completions 或 Anthropic 的
/v1/messages 接口,就可以用对应 Provider + 自定义
BASE_URL 接入。
内置支持的 Embedding Provider:
| EMBEDDING_PROVIDER | 说明 | 推荐模型 | 维度 |
| --- | --- | --- | --- |
|
qwen | 通义千问 |
text-embedding-v4 | 1536 |
|
siliconflow | 硅基流动 | 按需选择 | 按模型 |
|
ollama | 本地部署 | 按需选择 | 按模型 |
|
huggingface | HuggingFace 本地模型 | 按需选择 | 按模型 |
|
openai | OpenAI 兼容接口 |
text-embedding-ada-002 | 1536 |
同理,兼容 OpenAI Embedding 接口的国内服务也可以用
openai + 自定义
OPENAI_EMBEDDING_BASE_URL 接入:
# 智谱 Embedding(OpenAI 兼容) EMBEDDING_PROVIDER=openai EMBEDDING_API_KEY=your_zhipu_api_key EMBEDDING_MODEL=embedding-3 EMBEDDING_DIMS=2048 OPENAI_EMBEDDING_BASE_URL=https://open.bigmodel.cn/api/paas/v4
注意
EMBEDDING_DIMS 必须与模型实际输出维度一致,否则检索会出错。
完整配置参考 .env.example。
然后启动:
cd ~/.openclaw/powermem source ~/.openclaw/powermem/.venv/bin/activate powermem-server --host 0.0.0.0 --port 8000
验证:
curl -s http://localhost:8000/api/v1/system/health
openclaw plugins install memory-powermem
安装后用
openclaw plugins list 确认
memory-powermem 存在。
插件安装后自带一份配置(HTTP 模式,连接
localhost:8000),如果你的 PowerMem 服务就跑在本机默认端口,
这一步可以跳过。
只有以下情况需要手动编辑
~/.openclaw/openclaw.json:
localhost:8000(改
baseUrl)mode)autoRecall /
autoCapture 等行为配置生效优先级:
~/.openclaw/openclaw.json > 插件内置默认值。
HTTP 模式示例:
{
"plugins": {
"slots": { "memory": "memory-powermem" },
"entries": {
"memory-powermem": {
"enabled": true,
"config": {
"mode": "http",
"baseUrl": "http://localhost:8000",
"autoCapture": true,
"autoRecall": true,
"inferOnAdd": true
}
}
}
}
}
CLI 模式示例(不启 HTTP 服务,本机直接调用
pmem):
{
"plugins": {
"slots": { "memory": "memory-powermem" },
"entries": {
"memory-powermem": {
"enabled": true,
"config": {
"mode": "http",
"envFile": "~/.openclaw/powermem/.env",
"pmemPath": "~/.openclaw/powermem/.venv/bin/pmem",
"autoCapture": true,
"autoRecall": true,
"inferOnAdd": true
}
}
}
}
}
重启 OpenClaw gateway,执行:
openclaw gateway restart
检测 memory-powermem 记忆插件健康情况:
openclaw ltm health
无报错即表示插件已连通。可以再试一下写入和检索:
openclaw ltm add "一条测试记忆" openclaw ltm search "测试"
如果检索能返回刚写入的内容,说明完整链路(PowerMem → 插件 → OpenClaw)已经通了。
openclaw ltm health
连不上:确认 PowerMem 服务在运行,
curl http://localhost:8000/api/v1/system/health 能返回 JSONopenclaw plugins list 检查,确认执行过
openclaw plugins install memory-powermem.env 里 Embedding 配置是否正确(API Key、模型名)openclaw plugins doctor 可以诊断插件加载和配置问题| 配置项 | 必填 | 说明 |
| --- | --- | --- |
|
mode | 否 |
"http"(默认)或
"cli" |
|
baseUrl | HTTP 必填 | PowerMem 服务地址,如
http://localhost:8000 |
|
apiKey | 否 | PowerMem 启用 API Key 鉴权时填写 |
|
envFile | 否 | CLI 模式:PowerMem 的
.env 路径 |
|
pmemPath | 否 | CLI 模式:
pmem 可执行路径,默认
pmem |
|
userId | 否 | 多用户隔离,默认
openclaw-user |
|
agentId | 否 | 多 Agent 隔离,默认
openclaw-agent |
|
autoCapture | 否 | 会话结束后是否自动抽取写入记忆,默认
true |
|
autoRecall | 否 | 会话开始前是否按首条消息注入相关记忆,默认
true |
|
inferOnAdd | 否 | 写入时是否使用智能抽取,默认
true |
插件管理常用命令:
| 命令 | 说明 |
|---|---|
openclaw plugins list |
列出已安装插件,确认 memory-powermem 存在 |
openclaw plugins info memory-powermem |
查看插件详情 |
openclaw plugins doctor |
诊断插件加载和配置问题 |
openclaw plugins update memory-powermem |
更新插件到最新版 |
openclaw plugins uninstall memory-powermem |
卸载插件 |
MEMORY.md
怎么办?*不受影响。插件通过 OpenClaw 的 memory 槽位机制接入,不修改也不删除原有文件。切回
memory-core 后,
MEMORY.md 和
memory/*.md 依然可用。
memory-core
吗?*可以。把
openclaw.json 里的
slots.memory 改回
"memory-core",重启即可。零侵入,可逆。
autoRecall 和
autoCapture 可以单独关闭吗?可以。在配置里把对应项设为
false。比如只想用手动的
memory_store /
memory_recall 工具,关掉两个 auto 即可。
支持。通过
userId 和
agentId 配置项做隔离,每个 Agent 有独立命名空间,同一 PowerMem 实例可服务多个 Agent。
不需要。PowerMem 的 Embedding 和 LLM 调用走外部 API(OpenAI、通义千问等),本地只需要跑 Python 服务。

OceanBase 社区上线新课程 ——《Easy Data x AI》,会结合 Data 这个话题, 讲清 Data 在 GenAI / Agent 中扮演的重要角色,给大家呈现一个以数据为视角的完整 AI 认知框架。
课程介绍详见这篇公众号文章: OpenClaw 为啥越用越好用?

今晚(2025/03/25)我们会在社区的直播活动中,为大家介绍这个全新且免费的社区课程,欢迎各位老师预约直播,和我们共同学习~

最后,也欢迎各位对 AI 感兴趣的老师加入 Data x AI 交流群,和我们一起学习,一起玩耍~

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70047136/viewspace-3114470/ ,如需转载,请注明出处,否则将追究法律责任。