利用 zotero-arxiv-daily 获取最相关每日文献
引言
对每一个研究人员来说,获取并阅读最新文献都是必要的,但是很难有人能坚持并有足够的时间去筛选和整理这些信息。但是借助一些方便的工具可以帮我们完成这项重复性劳动。
zotero-arxiv-daily 是一个基于 arxiv 网站、zotero 文献库和 llm 的自动化工具。其中,arxiv 是一个开放的学术论文预印本库,zotero 是一个强大的文献管理工具 (被用于判断与研究者本人相关性) 。
简单的说,zotero-arxiv-daily 可以根据用户的 zotero 文献库,自动推荐与用户兴趣相关的最新 arxiv 论文,并将其发送到邮箱中。
效果展示
过程
我将过程分为三步,一是配置到 github actions 完成自动发送,二是修改部分文件以适配自己的需求,三是使用 keepalive workflow 保活。
如果就是简简单单能用就行光第一步就足够了。
基础配置使用
这一部分的要点是配置好 github actions, 需要注意的点是获取 zotero 的 apikey 和 llm 的 apikey。
这里使用的最简单的方法也就是 github actions, 优点是免费文档。如官方文档所述,需要三步,一是 fork 代码仓库,二是配置 secrets,三是配置 workflow。
需要的 secrets 如下:
- ARXIV_QUERY: 目标 arxiv 论文的类别。使用 + 连接多个类别。
- ZOTERO_ID: zotero 的用户 ID,可以在 zotero 的设置中找到。
- ZOTERO_KEY: zotero 的 API key,可以在 zotero 的网页设置 - 安全中生成。
- RECEIVER: 接收文献的邮箱地址。
- SENDER: 发送文献的邮箱地址。
- SENDER_PASSWORD: 发送邮箱的密码/认证码,gmail 等是密码,qq 等是邮箱认证码 (可在设置中 SMTP 部分找到,注意只有生成的时候显示一次,自己保留好可以一直用)。
- SMTP_PORT: SMTP 端口号。
- SMTP_SERVER: SMTP 服务器地址。
- USE_LLM_API: 是否使用 LLM API。
- OPENAI_API_BASE: OpenAI API 基础地址。
- OPENAI_API_KEY: OpenAI API 密钥。
- MODEL_NAME: LLM 模型名称。
官方推荐使用 SiliconFlow 的模型,这是一个开源模型聚合平台,推荐的模式是Qwen/Qwen2.5-7B-Instruct
, 因为这个模型的免费性能好而且输入参数是标准的,后面将讲一下不标准的输入应该怎么办。
如果使用 SiliconFlow 的话这几个参数示例是这样的:
- OPENAI_API_BASE: https://api.siliconflow.cn/v1
- OPENAI_API_KEY: OpenAI API 密钥。
- MODEL_NAME: Qwen/Qwen2.5-7B-Instruct
温馨提示,一般 OPENAI_API_BASE 后面不带 chat/completions, 而是以 v1 结尾,注意不是v1/
而是v1
。
但是不知道从什么时候开始我老是登不上 SiliconFlow 的官网,所以我更喜欢魔搭的模型,魔搭的模型是免费的,每天有 2000 次调用限制,
这是魔搭可以使用的免费模型列表:
修改部分文件以适配自己的需求
注意,如果使用魔搭,有些模型比如 Qwen/Qwen3-235B-A22B 的输入参数是非标准的,所以需要修改代码。
如果 fork 我修改后的库而不是官方库不用修改直接使用。
关键在于添加 extra_body 的 enable_thinking 部分和调整 stream 的输入参数。
参考官方文档:
1 | ### 上文 |
使用 keepalive workflow 保活
GitHub Actions 为了防止资源滥用,有一个限制:如果一个代码仓库在 60 天 内没有任何 push (推送) 操作,GitHub 会自动禁用该仓库所有的计划任务 (scheduled workflows)。对于像 zotero-arxiv-daily 这样依赖定时运行(例如每天运行一次)的项目来说,这无疑是太繁复的。
很多用户可能只是“一次配置,永久使用”,并不会频繁去修改代码。为了解决这个问题,我们可以使用一个现成的、广受欢迎的 Action:gautamkrishnar/keepalive-workflow。这个 Action 会在指定的时间(例如每周一次)自动向你的仓库推送一个微小的、无冲突的变更,从而保持仓库的活跃状态,它的唯一目的就是定期对仓库进行一次无意义的写入操作,模拟人工更新,从而重置 60 天的计时器。
创建新的 Workflow 文件
在你的项目仓库中,进入 .github/workflows/ 目录,创建一个新的 YAML 文件,例如 keepalive.yml。
编辑 Workflow 文件
将以下内容粘贴到 keepalive.yml 文件中:
1 | name: Keep Repo Alive (Manual) |
如果按 ai 给的默认方案走会,遇到一个权限问题,然后会让你生成一个 pat token 来给予权限然后使用$调用,但是实际上你只需要在 permissions 中添加 contents: write 即可。
1 | permissions: |
结论
我对阅读的想法是”好读书不求甚解”, 特别对于研究来说,不必去追求每一步都完全读透,重要的是获取最新的信息和灵感。一是只有论文读的够多,才能读懂,而不是对着一篇精读就能全部读懂。二是论文都是别人的研究,而不是自己的研究,要从中汲取养分而不是生搬硬套。
因此,我认为利用 zotero-arxiv-daily 这样的工具可以帮助我们提高水平,节省时间和精力。哪怕一天能读一篇摘要呢?