正文:

D2 把 8 份电力见证 docx 跑进了 memory,CLI 能搜、浏览器也能调工具。做到这儿我发现还缺几件事:检查项那张 xlsx 一直没进库;问「叶片」经常撞到「钢塔」;每来一个新文件都要「转 md → 拷 workspace → 跑 index」三步,太碎。

D3 就是把这些补上,另外顺手试了一条文字型 PDF(电子发票),看 Word 能不能直接抽字进库。

整体思路

D2 的链路不变,只是中间多了一层「结构化」、末尾合成一条命令:

raw(docx/xlsx/pdf) → 转 md(带 YAML 头)→ workspace → memory index

见证表 md 头部会写上 devicedoc_typesource_file 这类字段,后面检索时好区分。发票 PDF 我不打算整段正文入库,只保留 buyer_nameseller_name 这些 facts 字段,免得版式乱了以后更难搜。

配置还是 D2 那套,没大改:

"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" } }

入库和验证(我这边最后是 10/10 files、222 chunks,含 1 个 xlsx + 1 个 PDF):

cd study\scripts
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force
.\d3-ingest.ps1 -All

cd openclaw
docker compose exec -T openclaw-gateway node dist/index.js memory status --deep
docker compose exec -T openclaw-gateway node dist/index.js memory search "doc_type:checklist 检查项目"

单文件可以 -File "检查项目(1).xlsx",只改 metadata 不重新转 Office 用 -MetadataOnly

踩坑与解决

坑 1:跑 ingest 提示找不到脚本

现象:PowerShell 报 d3-ingest.ps1 不是命令。
原因:D2 只有转换脚本,一键入库脚本得单独写,我当时以为已经有了直接跑。
解决:确认 study\scripts\ 下有 d3-ingest.ps1 再执行。

坑 2:脚本里写中文,PowerShell 直接语法错误

现象:一运行满屏红字,elseif ($base -match '叶片') 附近解析失败,中文变成乱码。
原因:Windows 自带 PowerShell 5.1 吃 UTF-8 脚本很挑,字符串里的中文容易炸。
解决:脚本主体尽量英文;设备名、文件名映射放到单独的 d3-file-map.json 里用 UTF-8 读。

坑 3:md 有了 frontmatter,但全是 device: general

现象:转换是成功的,YAML 头也在,可设备类型没写上。
原因:规则在 PS 里匹配中文文件名没生效。
解决:改成 JSON 里按完整文件名映射;跑一遍 .\d3-ingest.ps1 -MetadataOnly 重刷头信息。

坑 4:xlsx 转出来了,索引还是 8/8

现象:demo-office\...\md\ 里能看到检查项目,但 memory status 不变。
原因:md 没同步进容器挂载的 workspace\knowledge\power-witness\,或者 Copy-Item *.md 漏了带括号的文件名。
解决:复制时逐个 -LiteralPath;同步完再 memory index --force

坑 5:索引卡在 9/10,或报 database locked

现象:compose run 建索引失败,提示 sqlite 被占用;或者 status 差 1 个文件。
原因:Gateway 正在跑,和临时容器抢同一个库。
解决:先 docker compose restart openclaw-gateway,再用 exec 进正在跑的容器索引:

docker compose exec -T openclaw-gateway node dist/index.js memory index --force --verbose

坑 6:搜「叶片」还是钢塔排前面

现象:D2 的老问题还在,泛问容易撞到结构相近的见证表。
原因:钢塔那份 chunk 多,向量一泛搜就偏。
解决:检索词写具体一点,CLI 试过这两句差别很大:
在这里插入图片描述

# 容易偏
memory search "检查项目 叶片"
# Top1 比较稳
memory search "doc_type:checklist 检查项目"
memory search "source_file:叶片设备见证情况表"

坑 7:PDF 用 Word 打开,正文挤成一行

现象:电子发票能抽出字,但购销方两列糊在一起,中间还有怪字符。
原因:PDF 版式丢了,直接 Content.Text 不行。
解决:改用 Word 的表格读单元格,发票只输出 facts_only 几行字段,不保留大段原文。
在这里插入图片描述

坑 8:发票日期写成 2615-20-00

现象:文件名里明明有 20260302,md 里日期却离谱。
原因:正则 _(\d{8}) 先匹配到发票号里的 8 位数字了。
解决:改成匹配文件名末尾:_(\d{8})\d*\.pdf$

小结

D3 对我来说主要是三件事:xlsx 和 PDF 也能进库了;md 带上设备/文档类型,检索没那么瞎;新增文件一条命令跑完,不用手动三步。

当然还不完美:扫描件 PDF 没碰;泛问见证表还是会混;浏览器里偶尔出现「工具返回对了、最终回答写歪了」——这个我打算放下一阶段,专门做来源引用和禁止改写。
其实cli返回的是对的,但是openClaw回答歪掉了

后续计划

  • 对话回答固定带文件名出处
  • raw 目录监控,新文件自动 ingest
  • 扫描 PDF 走 OCR 管道(还没开始)
Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐