Hermes Agent + OpenClaw + Zotero 构建自动化知识库工作流(完整实战)
当 AI Agent 开始打理你的文献库——一个研究者的效率革命。从数据迁移到自动同步,从CLI配置到定时调度,全程记录踩坑与解决方案。
一、写在前面
作为研究生/科研人员,你是不是也有这样的场景:
- Zotero 里攒了几百篇文献,但每次写论文时总想不起来某篇具体在哪
- 每天刷 arXiv 加新文献,但没时间整理归档
- 想做一个个人知识库,但手动搬运元数据太痛苦
本文分享一套 全自动的文献知识库构建方案,让你彻底告别手动管理:
Zotero(文献管理)
↕ 自动同步
Hermes Agent(调度中控)
↕ 脚本执行
OpenClaw(自动化助手)
↓
知识库(Markdown 结构化存储)
二、环境概览
我的系统环境:
| 项目 | 配置 |
|---|---|
| 系统 | Ubuntu 22.04 LTS |
| 系统盘 | 60GB SSD(sda3) |
| 数据盘 | 200GB HDD(sdb1, 挂载 /mnt/data) |
| Zotero 版本 | 9.0.4-1 |
| Hermes Agent | 本地运行 |
| OpenClaw | Node.js 24.17(nvm 管理) |
| Python | 3.10.12 |
| 数据库 | 293 篇文献(1.4K 含附件) |
前置条件:本文假设你已安装 Zotero 桌面端、Hermes Agent 和 OpenClaw。如果尚未安装,请先参考各项目的官方文档完成基础安装。
三、Step 1:迁移 Zotero 数据到非系统盘
为什么要迁移?系统盘只有 60GB,而 Zotero 的 PDF 附件、索引会持续膨胀。迁移到 200GB 的数据盘可以一劳永逸。
3.1 确认当前数据位置
打开 Zotero → 编辑 → 设置 → 高级 → 文件和文件夹,看到"数据存储位置"是默认的 ~/Zotero/。或者直接看配置文件:
grep "extensions.zotero.dataDir" ~/.zotero/zotero/*.default/prefs.js
# 输出:/home/chester/Zotero
3.2 停止 Zotero + 复制数据
数据迁移需要在 Zotero 关闭状态下进行,保证数据库一致性:
# 停止 Zotero
kill -TERM $(ps aux | grep zotero-bin | grep -v grep | awk '{print $2}')
# 创建目标目录
mkdir -p /mnt/data/Zotero_Library
# 完整复制(推荐 rsync,支持断点续传)
rsync -avh --progress ~/Zotero/ /mnt/data/Zotero_Library/
3.3 修改配置指向
编辑 ~/.zotero/zotero/*.default/prefs.js,将 extensions.zotero.dataDir 改为新路径:
user_pref("extensions.zotero.dataDir", "/mnt/data/Zotero_Library");
3.4 验证迁移
重启 Zotero 后,检查 API 是否正常返回数据:
# Zotero 内置 API 监听端口 23119
ss -tlnp | grep 23119
# 输出:LISTEN 127.0.0.1:23119
# 查询文献数量
curl -sI "http://127.0.0.1:23119/api/users/0/items?limit=1" | grep Total-Results
# 输出:Total-Results: 1444 ✅
迁移要点:
- 迁移前 必须关闭 Zotero,否则数据库可能损坏
- 使用
rsync而非cp,支持断点续传,大文件迁移更安全 - 迁移完成后,原目录
~/Zotero/可作为备份保留一段时间
四、Step 2:配置 Zotero 自动同步
4.1 坚果云 WebDAV 配置
Zotero 自带的免费同步空间只有 300MB,有 PDF 附件根本不够用。我使用的是 坚果云 WebDAV(免费,不限速):
在 Zotero 设置中:
- 编辑 → 设置 → 同步
- 文件同步 → 选择 WebDAV
- URL:
https://dav.jianguoyun.com/dav/ - 用户名:你的坚果云邮箱
- 密码:坚果云应用密码(不是登录密码!需在坚果云网页版生成)
4.2 启用自动同步
在 prefs.js 中添加自动同步配置:
user_pref("extensions.zotero.sync.autoSync", true);
user_pref("extensions.zotero.sync.autoSyncDelay", 900); // 15分钟
user_pref("extensions.zotero.sync.fulltext.enabled", true);
⚠️ 注意:Zotero 启动时会从数据库读取配置并覆写 prefs.js。建议同时在 GUI 中确认自动同步已勾选(编辑 → 设置 → 同步 → 勾选"自动同步")。
4.3 验证本地 API
Zotero 的本地 HTTP API 非常强大,所有 Agent 都通过它来读写数据:
http://localhost:23119/api/users/0/items
支持 RESTful 查询、分页、排序。默认已经开启(httpServer.localAPI.enabled = true),无需额外配置。
五、Step 3:安装 pyzotero-cli + 配置 OpenClaw 技能
5.1 安装 pyzotero-cli
pip install pyzotero-cli -U
zot --version
# 输出:1.0.0
5.2 配置本地模式
pyzotero-cli 支持两种模式:
| 模式 | 连接方式 | 速率限制 | 读写权限 |
|---|---|---|---|
| Web API 模式 | zotero.org | 有 | 读写 |
| 本地模式(推荐) | localhost:23119 | 无 | 只读 |
推荐使用本地模式,配置方法:
zot configure set --profile default library_id 12519867
zot configure set --profile default library_type user
zot configure set --profile default local true
验证连接:
zot --local items list --top --limit 3 --output table
成功的话会看到类似输出:
| Title | Key | Type |
| CA-LDP: Community-aware.. | ABC123 | journalArticle |
| Optimal Privacy-Utility.. | DEF456 | preprint |
| Personalized Privacy-P.. | GHI789 | journalArticle |
5.3 创建 OpenClaw Zotero 技能
在 OpenClaw 的 workspace 中创建技能文件 skills/zotero/SKILL.md,让 Agent 知道如何操作 Zotero:
# Zotero 文献管理技能
## 可用命令
zot --local items list --top --sort=dateAdded --direction=desc --limit 20
zot --local items get <ITEM_KEY>
zot --local collections list
zot --local items list --top -q="differential privacy"
这样 OpenClaw Agent 就能通过自然语言指令("帮我查一下最近文献")来操作 Zotero 了。
六、Step 4:创建自动化知识库同步脚本
6.1 同步脚本核心逻辑
# 伪代码
1. zot --local items list --top --sort=dateAdded --direction=desc --limit=50
2. 筛选 dateAdded >= 当前时间 - 24h 的条目
3. 提取:title, creators, abstract, DOI, publication, tags, date
4. 格式化为 Markdown 文件
5. 保存到 ~/knowledge_base/zotero/YYYY-MM-DD-title.md
6. 更新索引文件 ~/knowledge_base/README.md
6.2 完整的脚本实现
我写了一个完整的 Python 脚本 ~/.hermes/scripts/zotero-kb-sync.py(约 240 行),核心功能:
- 自动分页获取所有顶级文献(避免 limit 限制)
- 批量筛选最近 24 小时新增
- 提取元数据并格式化为标准 Markdown
- 增量保存(已存在则跳过)
- 自动维护索引
生成的 Markdown 知识库条目格式:
---
source: zotero
key: ABC123
item_type: journalArticle
added: 2026-06-15
tags: [差分隐私, 图神经网络]
publication_year: 2025
---
# CA-LDP: Community-aware local differential privacy for dynamic graphs
**作者:** Liang, Zongwen; Xue, Cheston; ...
**期刊:** Symmetry, Vol.18, No.2, pp.1-20
**DOI:** [10.3390/sym18020123](https://doi.org/10.3390/sym18020123)
## 摘要
This paper proposes CA-LDP, a community-aware local differential privacy...
6.3 创建 Hermes Cron 定时任务
使用 Hermes 的 cron 功能,设置每日 08:00 自动执行:
hermes cron create "0 8 * * *" \
--name "Zotero 知识库同步" \
--script zotero-kb-sync.py \
--no-agent
关键词说明:
| 参数 | 含义 |
|---|---|
0 8 * * * |
每天 08:00 执行(cron 表达式) |
--name |
任务名称,用于标识 |
--script |
执行的脚本路径(相对 ~/.hermes/scripts/) |
--no-agent |
纯脚本模式,不需要 LLM 参与 |
关于 no_agent 模式:当脚本已经包含完整逻辑时,不需要 LLM 参与,直接让调度器运行脚本并传递 stdout 即可。这比用 LLM 驱动的 cron 任务更轻量、更可靠——不消耗 API token,也不会因为 LLM 输出异常而失败。
6.4 一次性导入历史文献
对于已有的 293 篇文献,我还写了一个一次性导入脚本 ~/.hermes/scripts/zotero-kb-import-all.py,将所有历史文献一次性导入知识库:
python3 ~/.hermes/scripts/zotero-kb-import-all.py
# 输出:📚 共获取 300 篇顶级文献
# 输出:📊 总计: 293 篇文献
脚本会自动分页遍历所有文献,为每篇生成独立的 Markdown 文件,并构建完整的索引页。
七、验证与效果
7.1 验证清单
✅ Zotero 数据目录:/mnt/data/Zotero_Library(迁移完成)
✅ Zotero 自动同步:15分钟间隔 + WebDAV
✅ pyzotero-cli:v1.0.0,本地模式可用
✅ zot --local 命令:可查询 1400+ 条文献
✅ Hermes cron 任务:每日 08:00 执行
✅ 知识库:293 篇文献已结构化存储
7.2 最终工作流
[研究者]
│ 添加新文献到 Zotero
▼
[Zotero 桌面端]
│ 自动同步到坚果云 WebDAV
│ 本地 API(localhost:23119)开放
▼
[Hermes Cron] 每日 08:00
│ 触发 zotero-kb-sync.py
▼
[Python 脚本]
│ zot --local 查询新增文献
│ 提取标题/作者/摘要/DOI
│ 格式化为 Markdown
▼
[知识库 ~/knowledge_base/]
│ zotero/2026-06-15-xxx.md
│ README.md(索引)
▼
[RAG 检索 / LLM 问答 / 论文写作辅助]
八、踩坑记录
⚠️ prefs.js 写入后被 Zotero 覆写
Zotero 启动时会从数据库读取配置并覆写 prefs.js。因此直接编辑 prefs.js 添加 sync.autoSync 可能不生效。最佳做法是在 GUI 中设置(编辑 → 设置 → 同步)。
⚠️ zot 命令参数差异
pyzotero-cli v1.0.0 的参数名与旧版文档有差异,踩坑记录:
| 你以为的参数 | 实际参数 | 说明 |
|---|---|---|
--order |
--sort |
排序字段 |
--sort(排序方向) |
--direction |
asc / desc |
不加 --top |
会包含子节点(notes、附件) | 查询顶级文献必须加 |
--output json |
默认就是 JSON | 可省略 |
⚠️ 本地 API 是只读的
通过 http://localhost:23119/api/ 的本地 API 只能读取,不能写入/修改文献。如果需要增删改,需使用 Zotero Web API(需要 API Key)。
⚠️ 端口 23119 权限
Zotero 的本地 API 默认只监听 127.0.0.1,不会暴露到局域网,安全性有保障。无需额外防火墙配置。
⚠️ 非系统盘权限
迁移到 /mnt/data/ 等非系统目录时,确保目录属于当前用户:
sudo chown -R $USER:$USER /mnt/data/Zotero_Library
九、扩展思路
这个工作流还有很多可以扩展的方向:
- LLM 自动摘要:新文献入库后,自动调用 LLM 生成中文摘要和关键词,存入知识库
- RAG 知识库:将 Markdown 文件接入 RAG 系统(如 LangChain、LlamaIndex),实现"问文献"功能
- 标签自动分类:根据摘要内容自动打标签(如方法类、应用类、综述类),便于检索
- 日报推送:每天将新增文献汇总为日报,通过 Telegram / 微信推送
- 论文写作辅助:在知识库中搜索相关文献,自动生成参考文献列表和引文
- 跨库联动:同时管理 Zotero + EndNote + Mendeley 多个文献库
十、总结
一套完整的 Zotero + AI Agent 知识库工作流,核心优势:
- 数据安全:迁移到数据盘,坚果云 WebDAV 双重备份
- 自动同步:Zotero 自动同步 + Agent 定时拉取,双重保障
- 结构化存储:Markdown 格式,便于检索和二次处理(Git 版本控制、全文搜索、RAG 检索)
- 低维护:全自动化,无需人工干预——只要像往常一样在 Zotero 里添加文献即可
- 可扩展:支持接入 LLM、RAG、通知推送、论文写作等多场景
整套系统搭建完成后,你只需要做一件事:像往常一样在 Zotero 里添加文献,剩下的一切都交给 Agent。
本文涉及的代码和配置已保存为 Hermes Skill(
zotero-kb),可在新环境中一键复用。技术栈:Hermes Agent + OpenClaw + Zotero + pyzotero-cli + Ubuntu Linux
如有问题欢迎评论区交流~ 🚀
更多推荐


所有评论(0)