openclaw课程-干货合集
03 搜索能力 & 记忆系统详解
搜索能力
原生支持
- OpenClaw的原生搜索能力由配置的Provider(搜索服务商)支持
- 支持的Provider | Provider | 免费额度 | 适用场景 | | --- | --- | --- | | Brave | 每月赠 $5 额度 ≈ 1000次(需绑信用卡,超出扣费) | 通用搜索(官方默认推荐);需要海外网络环境 | | Firecrawl | 500 credits | 需要读取页面内容的场景;需要海外网络环境 | | Gemini | AI Studio Key 免费;每天 500-1500 次免费 | 通用搜索 | | Grok | 注册送 $25 credits | X/Twitter 内容 | | Kimi | - | 国内直连、中文搜索好 | | Perplexity | - | 深度搜索、内容提取 |
- 核心机制
- 只能选 1 个 Provider,没有备选降级策略
1. 只接受一个值,且只能是 6 个原生 provider 之一(brave / firecrawl / gemini / grok / kimi / perplexity)。写
"brave"就只能用 Brave,写"kimi"就只能用 Kimi。不支持配置多个 provider 做轮换或降级。写"tavily"会直接报 schema validation 错误。
AGENTS指令
- Agent直接调Tavily API(国内友好)
- 注册获取Tavily API,传送门:tavily.com。免费额度:1000次/月,无需海外网络

- 复制API Key,让Openclaw帮你配。可以这么跟它说: ``` openclaw内置的web search无法使用时,调用tavily api进行搜索。api key:xxxx把这个搜索方式记到AGENTs.md,API Key同步记到TOOLS.md
3. 配置完成后,可以让Openclaw试试搜索某个东西
#### Skills & Plugin方案
1. 以下不能写在 `provider` 字段里,通过 Skill、Plugin 或 MCP 方式接入,给 agent 提供额外搜索能力。重点推荐国内友好的方案:
2. **博查 **[**Bocha**](https://open.bochaai.com/)(⭐ 国内首选)
- 国内 AI 搜索引擎,DeepSeek 官方联网搜索供应方,阿里/腾讯/字节官方推荐
- 承接国内 60%+ AI 应用联网搜索请求,中文搜索质量极高
- API 完全国内直连(open.bocha.cn),有免费额度
- 接入方式:MCP Server(`bocha-search-mcp`)或 ClawHub Skill(`bocha-skill`)
- 已有社区 PR 申请加入原生 provider(GitHub #25420),后续可能直接配置
3. **SearXNG**(⭐ 完全免费 + 无限制)
- 开源元搜索引擎,聚合 Google、Bing、DuckDuckGo 等 70+ 引擎
- Docker 自建,零 API Key、零费用、无查询上限
- 自建在国内服务器上即可国内直连
- 多个 ClawHub Skill 可选:`private-web-search-searchxng`(@adelpro)、`local-websearch`、`searxng-local` 等
- 也可通过 MCP 接入(`ask-search` 项目)
4. **webserp**(⭐ 零配置 + 免费)
- 7 个搜索引擎并行查询(Google、DuckDuckGo、Brave 等),无需 API Key
- GitHub 仓库自带 OpenClaw Skill 文件,直接下载安装
- 安装指令
```
cd ~/.openclaw/workspace/skills/ && git clone https://github.com/PaperBoardOfficial/webserp.git
- 适合不想注册任何账号、只想开箱即用的学员
- Web Search Plus(进阶,多引擎智能路由)
- ClawHub Skill,连接 7 个搜索 provider(Serper、Tavily、Exa、Perplexity、You.com、SearXNG 等)
- 根据查询意图自动选最优引擎(购物 → Google、研究 → Tavily、隐私 → SearXNG)
- 只需 1 个 API Key 即可启动,按需添加更多
- 安装:ClawHub 搜索
web-search-plus
- openclaw-search-skills(进阶,四源并行)
- 社区高星项目,Brave + Exa + Tavily + Grok 四源并行搜索
- 意图感知评分 + 自动去重 + 链式引用追踪
- 附带 content-extract(URL → Markdown,微信/知乎等反爬站点自动降级到 MinerU)
- GitHub:https://github.com/blessonism/openclaw-search-skills
建议
- 国内朋友
- Agent直接调Tavily API,或初始配置时Provider选择Kimi(需付费,成本较高)
- 海外朋友
- Brave API Key作为Provider,Agent调Tavily作为备选
记忆系统
重要性
- 有好的记忆系统,能让龙虾越来越懂你,让你们之间的沟通阻抗越来越小。它就会越来越高效
记忆的结构
Session Memory:会话记忆
- 定义
- 每个飞书对话窗口/微信对话窗口 / Web Chat 对话 = 一个 Session(会话)。Session 里存的是完整的消息历史(你说的 + agent 回的)。
- 关键机制
- compaction****(压缩)。当对话历史接近 context window 上限时,OpenClaw 会自动压缩旧消息——用摘要替代原文。压缩后原始细节就丢了。
- 在 compaction 之前,OpenClaw 有一个 memory flush 机制:提醒 agent 把重要内容写入 memory 文件。但这个机制依赖 agent "自觉"——如果 agent 忘了写,信息就随着压缩一起丢了
- Session重置问题
- 如果你遇到过这种问题,请看解法
1. 现象:每天早上起来发现 OpenClaw "失忆"了——webchat 和飞书的对话历史都没了,只剩几行,agent 对昨天聊的内容一无所知。
2. 原因:OpenClaw 在凌晨 4 点触发一次心跳,检查每个 session 的
updatedAt,发现早于最近一次 daily reset 时间就标记为过期。旧 session 被归档成.jsonl.reset.2026-03-XX文件(数据还在磁盘上,但不再被加载),然后你早上发第一条消息时,OpenClaw 创建一个全新的空 session。所以不是"失忆",而是"换了一个新脑子"。 - 解法
解决方案:把
session.reset从默认的daily改成idle模式,设一个极长的超时时间。改完重启 gateway 就生效了 ```JSON { "session": { "dmScope": "per-channel-peer", "reset": { "mode": "idle", "idleMinutes": 52560000 } }}
##### Daily Memory:每日记忆
1. 定义
1. 每天的工作日志,翻日历📅可查看
2. 核心机制
在 `~/.openclaw/workspace/memory/` 目录下,按日期存储:
memory/├── 2026-03-20.md├── 2026-03-21.md├── 2026-03-22.md└── 2026-03-23.md
每个文件记录当天的对话摘要、完成事项、关键决策。**不是自动生成的**——需要 agent 主动写入,或者你手动创建。
##### Long-term Memory(Memory.md):长期记忆
1. 定义
1. OpenClaw脑中沉淀的长期记忆,永不丢失
2. 核心机制
1. 存放跨越时间的持久信息:用户偏好、项目状态、关键人物、经验教训等。**每次 agent 醒来(新的session)开始工作前都会读这个文件**。所以写在这里的信息,agent 永远记得。
```Markdown
**# Long-term Memory****## 用户画像**- 名字:Michael- 身份:AI 教育创业者,前网易产品专家- 沟通风格:简洁直接,喜欢类比**## 活跃项目**- [P0] OpenClaw 课程开发 → 6-8 场直播- [P1] ai798lab 社群运营**## 经验教训**- 2026-03-21:Kimi K2.5 声称已配置但实际未执行,memory 记录不可全信- 2026-03-22:session.reset 默认 daily 导致每天失忆,改成 idle 模式
写入与读取机制
写入
- 如果不做任何配置,OpenClaw不会主动提炼Daily Memory,写进MEMORY.md(长期记忆)。记忆的写入完全靠 agent 主动调用工具。OpenClaw 不会自动把对话内容存到 memory 文件里。
- 写入方式
- Agent 调用文件写入工具,往
MEMORY.md或memory/YYYY-MM-DD.md追加内容 - 你直接在终端编辑这些文件
- Compaction (session context爆了,自动生成摘要)前的 memory flush 提醒 agent 写入(但不保证 agent 会写)
- 核心问题
- 如果 agent 忘了写,信息就只存在备份 session transcript(.jsonl 文件)里。compaction 之后细节丢失,下次 session 搜不到。这是 OpenClaw 原生记忆最大的痛点。
读取
- 存在2种读取方式
- 被动加载:每次 session 开始,agent 自动读取 SOUL.md、USER.md、AGENTS.md、MEMORY.md。这些文件的内容直接注入到系统提示里。所以 MEMORY.md 里的信息,agent 不需要搜索就"知道"。
- 主动加载:agent 调用
memory_search工具,在 memory/*.md 文件里做语义搜索。这需要 agent 意识到"我可能之前处理过类似的事情"然后主动去搜。如果 agent 没这个意识,就不会搜。
增强AGENTS记忆的技巧
- 在 AGENTS.md 里写规则,约束 agent 的记忆行为:
**## 记忆规则****### 写入**- 每轮对话如果涉及配置变更、决策、bug 修复,必须写入 memory/YYYY-MM-DD.md- 写入格式:## HH:MM - 事件标题 + 简要说明- 不确定要不要记的时候,记。宁多勿少**### 读取**- 每个新 session 开始后,先用 memory_search 搜索与当前话题相关的历史记忆- 用户问"之前"、"上次"、"我们讨论过"时,必须先搜 memory 再回答**### 诚实原则**- 如果 memory_search 失败或搜不到,明确告知用户,不要编造- 不要假装记得实际上没有记录的事情
记忆检索策略
现状
- OpenClaw 默认的 记忆检索(memory search) 依赖 OpenAI embeddings API。国内用户不挂 VPN 根本连不上。连不上的结果:memory search 每次都失败,
fallback默认是"none"——直接放弃。agent 搜不到任何历史记忆,等于失忆。这就是为什么很多国内朋友说 OpenClaw "每天都失忆"。
原生配置
- 支持6个服务商 + 1个本地部署方案
| 服务商 | 环境配置 | 国内直连 | 免费额度 |
| --- | --- | --- | --- |
| OpenAI | OPENAI_API_KEY | ❌ | 需付费 |
| Gemini | GOOGLE_API_KEY | ❌ | 有免费额度(AI Studio Key 即可) |
| Voyage | VOYAGE_API_KEY | ❌ | 有免费额度 |
| Mistral | MISTRAL_API_KEY | ❌ | 有免费额度 |
| Ollama | 本地
localhost:11434| ✅ | 完全免费 | | GGUF | memorySearch.local.modelPath | ✅ | 完全免费 | | 任何 OpenAI 兼容 API |memorySearch.remote.baseUrl+apiKey| ✅ | 取决于接入的API服务商 | - 注意:如果你的OpenClaw已经在用Gemini api,就很方便了。一个Gemini可以一次性搞定搜索和记忆检索的配置
- 下面介绍国内用户友好的记忆检索方法👇
简易方案(新手推荐;国内友好)
- 硅基流动 embedding
- 优势
1.
BAAI/bge-m3是目前最好的中英文混合 embedding 模型之一 2. 硅基流动国内直连,延迟低 3. provider 设为"openai"是因为硅基流动兼容 OpenAI API 格式 4. 注册送的免费额度,embedding 调用非常便宜,日常使用几乎不花钱 - 步骤
- Step 1 · 注册 1. 打开硅基流动 → 手机号注册 → 注册送 14 元代金券 → 左侧菜单「API 密钥」→ 创建 Key
- Step 2 · 配置 1. 你可以跟OpenClaw这么说,让它配置 ```Bash 我需要你帮我配置 memory search,使用硅基流动(SiliconFlow)的 embedding API。## 背景OpenClaw 默认的 memory search 依赖 OpenAI embeddings API,国内连不上会导致 memory_search 每次都失败,等于失忆。我要切换成硅基流动,国内直连。## 前提我已经在硅基流动注册了账号(https://cloud.siliconflow.cn),拿到了 API Key。## 需要你做的事### 第一步:把 API Key 写入环境变量文件在 ~/.openclaw/.env 文件中添加一行(如果文件不存在就创建):SILICONFLOW_API_KEY=(我的硅基流动 API Key,我稍后告诉你)### 第二步:修改 openclaw.json读取 ~/.openclaw/openclaw.json,修改以下配置:1. 把 memory.backend 设为 "builtin"2. 把 agents.defaults.memorySearch 设为:{ "provider": "openai", "model": "BAAI/bge-m3", "remote": { "baseUrl": "https://api.siliconflow.cn/v1/", "apiKey": "${SILICONFLOW_API_KEY}" }, "fallback": "none"}注意:- provider 写 "openai" 是因为硅基流动兼容 OpenAI API 格式,不是真的用 OpenAI- model 用 BAAI/bge-m3,这是目前最好的中英文混合 embedding 模型- apiKey 用 ${SILICONFLOW_API_KEY} 引用环境变量,不要把明文 key 写进 json- 如果 json 里已经有 memorySearch 的旧配置(比如指向 OpenAI 的),直接覆盖### 第三步:重启 gateway执行重启命令让配置生效。
##### 本地部署方案(国内友好)
1. QMD
1. QMD 是 OpenClaw 内置的本地搜索引擎,支持 BM25 + 向量 + reranker 混合搜索。
2. 优势
1. 完全本地,不依赖网络,零 API 费用
3. 问题
1. `node-llama-cpp` 依赖需要编译原生模块,在 Mac 上经常编译失败或超时
2. 第一次运行需要下载约 2GB 的本地模型
3. 社区有已知 bug:搜索返回空、超时后永久降级、scope 默认拒绝群聊等
2. 部署
1. Step 1 · 安装QMD
1. 打开终端,执行安装指令
```
npm list -g | grep qmd
- Step 3 · 修改配置 1. 打开终端,执行以下指令 ```C++ node -e 'const fs = require("fs");const path = process.env.HOME + "/.openclaw/openclaw.json";const config = JSON.parse(fs.readFileSync(path, "utf8"));// 1. 切换 memory backend 到 qmdconfig.memory = config.memory || {};config.memory.backend = "qmd";config.memory.qmd = { searchMode: "search", scope: "all", limits: { maxResults: 6, timeoutMs: 30000 }};// 2. 顺便修复 session.reset(如果还没改过)config.session = config.session || {};if (!config.session.reset || config.session.reset.mode === "daily") { config.session.reset = { mode: "idle", idleMinutes: 52560000 }; console.log("✅ session.reset 已改为 idle 模式");}fs.writeFileSync(path, JSON.stringify(config, null, 2), "utf8");console.log("✅ memory.backend:", config.memory.backend);console.log("✅ memory.qmd.searchMode:", config.memory.qmd.searchMode);console.log("✅ memory.qmd.scope:", config.memory.qmd.scope);'
3. Step 3 · 重启Gateway
```
openclaw gateway restart
- Step 4 · 验证
1. 在终端执行以下指令
- 如果有结果,则成功。没有结果,跑以下命令检查,看看memory 目录有没有文件
openclaw doctor --fix
```
openclaw memory search "测试"
```
ls ~/.openclaw/workspace/memory/
5. Step 5 · 测试
1. 去飞书或webchat让OpenClaw搜索某个词,看是否有结果