Mac Mini Knowledge Base + RAG Setup

在 Mac Mini 上一键部署本地知识库与 RAG 搜索系统,支持文档自动解析与飞书推送。

已扫描
适合谁
需要本地化知识管理的开发者、使用 Mac Mini 进行内容整理的办公人员
不适合谁
无 Mac 设备的用户、不熟悉命令行操作的初学者
国内可用性
需网络配置。可能需要网络配置或第三方服务可访问。
安装难度
新手友好(★☆☆)。基于终端操作、依赖、API Key 和本地环境要求的初步判断。

安装与下载

openclaw skills install @seairteng/macmini-knowledge-base

Skill 说明

命令、参数、文件名以原文为准

Knowledge Base Setup

在 Mac Mini 上快速搭建本地知识库 + RAG 搜索系统。

核心功能(v2.0)

  • kreuzberg 统一提取层:PDF / DOCX / XLSX / PPTX / MD / 图片 OCR 全自动路由
  • antiword 极速专线:.doc 文件专用提取,成功率 85%,169MB 文件 0.02 秒完成
  • 智能兜底:antiword 失败自动走 soffice 转换,60 秒硬超时无误判
  • 自动分类:关键词匹配驱动,中英文双语标签
  • 定时任务:每天 23:00 分析新文档,08:00 发送摘要到飞书

快速开始

一键安装

cd ~/.openclaw/workspace/skills/knowledge-base-setup/scripts
bash setup.sh <飞书用户ID>

手动分步安装

Step 1: 系统依赖

brew install antiword tesseract pandoc

Step 2: Python 依赖

pip3 install kreuzberg pytesseract pymupdf docx openpyxl python-pptx

Step 3: Ollama + embedding 模型

# 安装 Ollama: https://ollama.com/download
ollama pull nomic-embed-text

Step 4: 创建目录结构

mkdir -p ~/.openclaw/workspace/knowledge/.analysis/summaries/archives
mkdir -p ~/.openclaw/workspace/knowledge/temp_docs
touch ~/.openclaw/workspace/knowledge/文章目录/文章目录.md

Step 5: 部署脚本

cp ~/.openclaw/workspace/skills/knowledge-base-setup/scripts/*.py \
   ~/.openclaw/workspace/knowledge/.analysis/
chmod +x ~/.openclaw/workspace/knowledge/.analysis/*.py

Step 6: 配置 OpenClaw

编辑 ~/.openclaw/openclaw.json,加入:

{
  "models": {
    "providers": {
      "ollama": {
        "baseUrl": "http://127.0.0.1:11434",
        "api": "ollama",
        "models": [
          {"id": "nomic-embed-text", "name": "Nomic Embed Text"}
        ]
      }
    }
  },
  "agents": {
    "defaults": {
      "memorySearch": {
        "provider": "ollama",
        "model": "nomic-embed-text"
      }
    }
  }
}

确保 tools 区块有:

"tools": {
    "alsoAllow": ["exec", "process"]
}

然后重启:openclaw gateway restart

Step 7: 注册定时任务

# 23:00 分析新文档
openclaw cron add \
  --name "23:00分析新文档" \
  --cron "0 23 * * *" \
  --tz "Asia/Shanghai" \
  --session isolated \
  --timeout-seconds 600 \
  --message "cd ~/.openclaw/workspace/knowledge/.analysis && python3 run_analysis.py && python3 generate_catalog.py" \
  --announce --channel feishu --to "user:<飞书用户ID>"

# 08:00 发送文档摘要
openclaw cron add \
  --name "08:00发送文档摘要" \
  --cron "0 8 * * *" \
  --tz "Asia/Shanghai" \
  --session isolated \
  --timeout-seconds 120 \
  --message "读取 summaries/ 目录发送摘要到飞书" \
  --announce --channel feishu --to "user:<飞书用户ID>"

文档解析架构(v2.0)

架构图

                    ┌──────────────────────────────────────┐
                    │         kreuzberg 统一提取层           │
                    │  (pypdfium2 / python-calamine / pandoc) │
                    └───┬────────────────────────────────┬───┘
                        │                              │
                自动判断 │                              │
                        ▼                              ▼
              ┌─────────────────┐           ┌─────────────────────┐
              │  kreuzberg 直提  │           │  antiword 极速专线  │
              │ PDF/DOCX/XLSX/  │           │   (.doc 文件专用)    │
              │ PPTX/MD/图片OCR │           │   成功率 85%,<1秒   │
              └─────────────────┘           └─────────────────────┘
                        │                              │
                        │         ┌──────────────────────────────┐
                        │         │     soffice 兜底转换          │
                        │         │ (.doc/.xls/.ppt antiword失败) │
                        │         │  60秒硬超时(消除误判watchdog)│
                        │         └──────────────────────────────┘
                        ▼                              │
              ┌──────────────────────────────────────────────┐
              │              文本输出(content)              │
              │  → summaries/ 摘要文件 → generate_catalog.py  │
              └──────────────────────────────────────────────┘

文件类型 × 提取方式

格式主方案依赖成功率单文件速度
PDFkreuzberg (pypdfium2)~100%0.05-0.7s
DOCXkreuzberg + pandocpandoc 3.9+100%0.12-3s
XLSXkreuzberg (python-calamine)100%0.1-0.5s
PPTXkreuzberg + pandocpandoc 3.9+100%0.02-0.2s
MDkreuzberg + pandocpandoc 3.9+100%<0.01s
.docantiword 优先antiword85%,<1秒<0.02s
.doc(失败)soffice 兜底LibreOffice~15%2-21s
.xlssoffice → XLSXLibreOffice~95%2-10s
.pptsoffice → PPTXLibreOffice~95%2-10s
图片kreuzberg 内置 OCRtesseract~90%3-10s

antiword 极速专线

# 实测数据:
# 169MB 超大文件 → 26万字符,0.02秒完成
# 正常 .doc(0.1-15MB)→ <1秒
# 成功率 85%,覆盖绝大多数 .doc 文件
result = subprocess.run(['antiword', filepath], capture_output=True, timeout=10)

kreuzberg 统一提取层

kreuzberg 是专业的非结构化文档文本提取库(支持 20+ 格式),内部自动路由:

  • PDF → pypdfium2
  • XLSX → python-calamine
  • DOCX/PPTX/MD → pandoc
  • 图片 → 内置 OCR(tesseract)

关键词库(中英双语)

中文(47个): 房产、房价、房地产、居民、消费、股市、经济、政策、利率、通胀、人民币、A股、美联储、PBOC、GDP、股票、资产、投资、债券、银行、PPI、CPI、PMI、M2、就业、失业、汽车、新能源、AI 等

英文(70+个): property、real estate、GDP、inflation、CPI、PPI、PMI、PBOC、Fed、consumer、economy、growth、housing、stock market、EV、AI 等

标签输出语言: 自动判断——英文内容匹配英文关键词输出英文标签,中文内容匹配中文关键词输出中文标签

定时任务兼容性

任务ID调用方式结论
23:00分析新文档f3536e18绝对路径 python3 run_analysis.py✅ 无需修改
07:00生成财经早报b741c6d5Node.js 脚本❌ 不相关
08:00发送财经早报a7cbaacc读取文件发送❌ 不相关
09:00发送文档摘要89b4cf75读取 summaries 目录❌ 不相关

迁移到新电脑

  1. 复制整个目录:
   scp -r ~/.openclaw/workspace/knowledge user@new-mac:~/.openclaw/workspace/
  1. 在新电脑运行 bash setup.sh <飞书用户ID>
  2. 重新注册定时任务(Job ID 会变)

避坑指南

问题原因解决
LibreOffice 超时watchdog 误判大文件为卡死v2.0 移除 watchdog,60秒硬超时
.doc 提取慢统一走 LibreOfficeantiword 专线,169MB 文件 0.02秒
DOCX/PPTX 处理失败pandoc 未安装brew install pandoc
PDF 提取乱码自定义字体无 ToUnicodekreuzberg(pypdfium2) + tesseract OCR
飞书无 exec 工具tools 策略限制添加 alsoAllow: [exec, process]
BGE-M3 卡顿16GB 内存不足继续用 nomic-embed-text

关键路径

内容路径
Skill 目录~/.openclaw/workspace/skills/knowledge-base-setup/
知识库~/.openclaw/workspace/knowledge/
分析脚本~/.openclaw/workspace/knowledge/.analysis/
目录缓存~/.openclaw/workspace/knowledge/.analysis/.catalog_cache.json
摘要输出~/.openclaw/workspace/knowledge/.analysis/summaries/
文章目录~/.openclaw/workspace/knowledge/文章目录/文章目录.md
OpenClaw 配置~/.openclaw/openclaw.json

版本历史

版本日期更新内容
1.0.02026-05-10初始版本,PyMuPDF + LibreOffice 链路
1.1.02026-05-13三步 PDF 处理,关键词库,双语标签
1.2.02026-05-21分批处理优化,280秒断点
1.2.12026-05-22utils.py 共享模块重构,LibreOffice 熔断机制
1.3.02026-05-28kreuzberg 统一提取层 + antiword 专线 + pandoc
S
@seairteng

已收录 1 个 Skill

相关推荐