docx 报表进 OpenClaw 本地 RAG:memory 索引实践与 6 个坑

正文:

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、回答附带文件出处。

相关推荐
死磕音视频1 天前
Open WebUI 入门:用 Docker 装上本地对话界面并连接 Ollama
docker·ollama·本地大模型·open webui
xzlAwin3 天前
Win10 安装 Ollama 本地AI
ai·ollama
还卿一钵无情泪5 天前
PEFT-Transformers、Unsloth、LLaMA-Factory 微调框架 横向对比
深度学习·大模型·llama·ollama
读完一本书5 天前
Ollama 跑得慢?我试了 6 个参数,只有 3 个真有用
人工智能·ollama
Flynn Liang5 天前
保姆级|Spring AI 2.0 第一个 Demo:Spring Boot 4 接入大模型(含国内可用方案 + 完整 pom)
人工智能·spring·ollama·springai·deepseek·springai入门·java接入大模型
孙琦Ray5 天前
黑客用一首诗控制3400台服务器挖矿
github·开源安全·ollama·litellm·僵尸网络·加密货币挖矿
七夜zippoe6 天前
Spring AI + Ollama 本地模型:数据不出内网的合规方案(落地全流程)
java·人工智能·spring·ai·ollama
一级新生8 天前
Dify 接入大模型:本地还是云端?实战与选型
人工智能·大模型·dify·ollama
一级新生9 天前
Ollama 是什么、干什么用、怎么用
人工智能·dify·ollama·本地大模型
小肝一下10 天前
1.大模型介绍
python·langchain·大模型·ollama·langgrap