正文:
D1 把对话模型换到本机 Ollama 之后,D2 的问题变成:业务里的 docx、xlsx 报表,能不能不进云、在内网完成建库和检索。
我选了一批电力见证资料做验证------逆变器/开关柜/汇流箱见证表、实施表等。OpenClaw 走 memory-core,嵌入用 Ollama 的 nomic-embed-text,对话仍用 qwen2.5:7b。
为什么要先转 Markdown
memory-core 的 extraPaths 目前主要索引 .md。所以 D2 的流水线是:
bash
raw(docx/xlsx) → 转换脚本 → md → workspace/knowledge/ → memory index → 检索/对话
这不是最终形态,但足够验证「内网 RAG 能不能跑通」。
操作步骤
1. 原始文件放 raw 目录
建议目录名用英文,例如 power-witness/raw,避免 PowerShell 读中文路径失败。
2. docx 转 md
Windows 上可用 Word COM 脚本批量转,转完检查 md 是否有正文,空文件多半是扫描图。
3. 同步到 OpenClaw workspace
md 需要出现在容器挂载的 workspace 下,例如 knowledge/power-witness/。
4. 拉 embedding 模型
powershell
ollama pull nomic-embed-text
5. 写配置
json
"memorySearch": {
"provider": "ollama",
"model": "nomic-embed-text",
"remote": { "baseUrl": "http://host.docker.internal:11434" },
"extraPaths": ["knowledge/power-witness"],
"query": { "maxResults": 3 }
},
"tools": {
"profile": "messaging",
"alsoAllow": ["group:memory"]
},
"plugins": { "slots": { "memory": "memory-core" } }
PowerShell 写 JSON 数组时,用单引号整段传递,例如:
powershell
$json = '["group:memory"]'
docker compose run --rm --entrypoint node openclaw-gateway dist/index.js config set tools.alsoAllow $json --strict-json
不要用 tools.allow 只留 memory 两个工具,会导致对话侧报 no registered tools matched。
6. 建索引并验证
powershell
docker compose restart openclaw-gateway
docker compose run --rm --entrypoint node openclaw-gateway dist/index.js memory status --deep
docker compose run --rm --entrypoint node openclaw-gateway dist/index.js memory index --force --verbose
docker compose run --rm --entrypoint node openclaw-gateway dist/index.js memory search "逆变器见证"
我这边结果是 8/8 files、218 chunks。如果 status 显示 0/0,不是配置错了,通常是还没跑 index。

踩坑与解决
1. PowerShell 脚本语法错误
| 现象 | 运行转换脚本报 ParserError,提示数组索引表达式丢失 |
| 原因 | Write-Host "[ERR] ..." 中括号被解析 |
| 解决 | 改为 Write-Host 'ERR: ...',或输出 OK / FAIL 不带方括号 |
2. raw 目录读不到文件
| 现象 | 脚本提示 no docx/xlsx files,资源管理器里明明有 |
| 原因 | 文件在中文目录 电力见证\raw,脚本读英文 power-witness\raw |
| 解决 | 统一拷到英文目录;先执行 Get-ChildItem -LiteralPath "...\power-witness\raw" 确认 |
3. 索引 0/0
| 现象 | memory status --deep 显示 Indexed 0/0,Dirty: yes |
| 原因 | 只查了 status,没有执行 index |
| 解决 | 运行 memory index --force --verbose,等到提示 Memory index updated |
4. config set JSON 失败
| 现象 | Too many arguments,或 Could not parse as JSON |
| 原因 | PowerShell 拆参数、吃掉 JSON 内部引号 |
| 解决 | 用变量:$json = '["knowledge/power-witness"]' 再 --strict-json;或直接改 openclaw.json |
5. 对话无法调用 memory
| 现象 | no registered tools matched |
| 原因 | tools.allow 覆盖 profile;plugins.slots.memory 未配置 |
| 解决 | 改用 alsoAllow: ["group:memory"],加上 memory-core slot,重启 Gateway 后 New Chat |
6. Gateway 起不来
| 现象 | 容器 Restarting,18789 拒绝连接 |
| 原因 | 配置写了无效字段 limits,日志 memorySearch: Invalid input |
| 解决 | 删除非法字段,改用 query.maxResults: 3,再 docker compose up -d |
7. 上下文溢出
| 现象 | Context overflow,Auto-compaction could not recover |
| 原因 | 7B 上下文有限,见证表 md 大,旧会话堆了失败记录 |
| 解决 | New Chat;提问写短;限制 maxResults;可先用 CLI search 再把结果贴进对话 |
8. 检索结果不准
| 现象 | 问「叶片设备」,先命中「钢塔见证表」 |
| 原因 | 见证表结构相近,单文件 chunk 过多 |
| 解决 | 提问带文件名或表号;大表按设备拆分;后续加 metadata 与出处引用 |
CLI 验证示例:
powershell
docker compose run --rm --entrypoint node openclaw-gateway dist/index.js memory search "叶片设备见证情况表"
Top1 文件对了,再在浏览器里问同样的问题。

小结与下一步
D2 的价值是跑通内网闭环:转换 → 索引 → CLI/对话检索。
局限也明确:docx 转 md 丢格式、Excel/扫描件要另做管道、7B 不适合长上下文堆叠。下一步会做 xlsx 结构化入库、PDF/OCR、回答附带文件出处。