当 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 设置中:

  1. 编辑 → 设置 → 同步
  2. 文件同步 → 选择 WebDAV
  3. URL:https://dav.jianguoyun.com/dav/
  4. 用户名:你的坚果云邮箱
  5. 密码:坚果云应用密码(不是登录密码!需在坚果云网页版生成)

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

九、扩展思路

这个工作流还有很多可以扩展的方向:

  1. LLM 自动摘要:新文献入库后,自动调用 LLM 生成中文摘要和关键词,存入知识库
  2. RAG 知识库:将 Markdown 文件接入 RAG 系统(如 LangChain、LlamaIndex),实现"问文献"功能
  3. 标签自动分类:根据摘要内容自动打标签(如方法类、应用类、综述类),便于检索
  4. 日报推送:每天将新增文献汇总为日报,通过 Telegram / 微信推送
  5. 论文写作辅助:在知识库中搜索相关文献,自动生成参考文献列表和引文
  6. 跨库联动:同时管理 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

如有问题欢迎评论区交流~ 🚀

Logo

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

更多推荐