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

相关推荐
福大大架构师每日一题12 天前
ollama v0.30.8 最新更新解读:修复启动提供方选择错误,提示词缓存更稳,MLX 推理与递归模型全面增强
ollama
大佐不会说日语~13 天前
在 Windows 本地用 Docker 部署向量模型(bge-m3)
windows·docker·容器·llm·ollama
腾飞开源14 天前
05_Dify接入Ollama本地大模型
人工智能·项目实战·dify·ai智能体·ollama·企业级应用·接入模型
逻极14 天前
Windows 平台 Ollama AMD GPU 一键编译指南:基于 ROCm 7.1 的自动化实战
人工智能·windows·stm32·自动化·gpu·amd·ollama
yuanzhengme16 天前
Ollama【部署 07】搭建本地智能体的简单说明(局域网离线部署Ollama+模型迁移+Docker部署AnythingLLM)
运维·docker·容器·大模型·ollama·本地智能体
hdsoft_huge17 天前
部署 Nacos + Ollama + vLLM + MCP 完整图文教程(1Panel 面板,命令行安装两种方式)
python·vllm·ollama·mcp
小七-七牛开发者19 天前
本地模型为什么能跑起来?从 llama.cpp 量化说起
agent·llama·模型部署·ollama·本地模型
xyz_CDragon19 天前
OpenClaw 局域网调用 Ollama 本地大模型:完整配置与踩坑指南
python·ai编程·集成学习·ollama·deepseek·openclaw