自动化工具 活跃维护

zotero-arxiv-daily

TideDra/zotero-arxiv-daily

根据你的 Zotero 库每天推荐你感兴趣的新 arxiv 论文。

6091
Stars 标星
5310
Forks 分支
47
Watchers 关注
62
Open Issues
Python
主要语言
AGPL-3.0
开源协议
3.7 MB
仓库大小
25 天前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:TideDra/zotero-arxiv-daily
git clone https://github.com/TideDra/zotero-arxiv-daily.git
git clone git@github.com:TideDra/zotero-arxiv-daily.git
README.md main

英文原文正文为项目原始 README(英文),本站后续会翻译为中文,当前仅剔除图片与无关章节并统一排版。

Zotero-arXiv-每日

[]()

根据你的 Zotero 库每日推荐你感兴趣的新 arxiv 论文。

[!重要]
请关注此仓库,并在上游有任何更新时及时合并你分叉的仓库,以便享受新功能并修复发现的错误。

🧐 关于

仅需 fork(并收藏)此仓库,即可跟踪你感兴趣的新科学研究!😊

Zotero-arXiv-Daily 会根据你的 Zotero 库的内容,找到可能吸引你的 arXiv 论文,然后将结果发送到你的邮箱📮。它可以作为 Github Action 工作流部署,具有零成本、无需安装,以及仅需少量设置 Github Action 环境变量即可实现每日自动发送。

✨ 功能

  • 完全免费!所有计算都可以在 Github Action 运行器的本地配额内完成(适用于公共仓库)。
  • 为你生成 AI 摘要,让你快速了解目标论文。
  • 论文的机构信息已解析并展示。
  • PDF 和代码实现的链接(如有)将在邮件中展示。
  • 根据你近期的研究兴趣排序的相关论文列表。
  • 通过 fork 该仓库并在 Github Action 页面设置环境变量即可快速部署。
  • 支持使用 LLM API 生成论文摘要。
  • 使用一系列通配符模式忽略不需要的 Zotero 论文。
  • 支持从多个论文来源检索:
    • arxiv
    • biorxiv
    • medrxiv
    • chemrxiv

📷 截图

🚀 使用方法

快速开始

  1. Fork(并点赞😘)这个仓库。

  2. 设置 Github Action 环境变量。

以下是你需要设置的所有密钥。出于安全原因,一旦设置,它们对任何人(包括你自己)都是不可见的。

键 描述 示例
ZOTERO_ID 你的 Zotero 账户的用户 ID。用户 ID 不是你的用户名,而是一串数字。在这里获取你的 ID。你可以在此screenshot显示的位置找到它。 12345678
ZOTERO_KEY 一个具有读取权限的 Zotero API 密钥。在这里获取密钥。 AB5tZ877P2j7Sm2Mragq041H
SENDER 用于发送邮件的 SMTP 服务器的电子邮件账户。 abc@qq.com
SENDER_PASSWORD 发件人账户的密码。注意,这不一定是用来登录邮件客户端的密码,而是 SMTP 服务的认证码。请向你的邮件提供商询问。 abcdefghijklmn
RECEIVER 接收论文列表的电子邮箱地址。 abc@outlook.com
OPENAI_API_KEY 使用 API 访问 LLM 时的 API 密钥。你可以在 SiliconFlow 获取用于使用高级开源 LLM 的免费 API。 sk-xxx
OPENAI_API_BASE 使用 API 访问 LLM 时的 API URL。 https://api.siliconflow.cn/v1

然后你还应该为你的自定义配置设置一个公共变量 CUSTOM_CONFIG。将以下内容粘贴到 CUSTOM_CONFIG 变量的值中:

zotero:
  user_id: ${oc.env:ZOTERO_ID}
  api_key: ${oc.env:ZOTERO_KEY}
  include_path: null # Or e.g. ["2026/survey/**", "2026/reading-group/**"]

email:
  sender: ${oc.env:SENDER}
  receiver: ${oc.env:RECEIVER}
  smtp_server: smtp.qq.com
  smtp_port: 465
  sender_password: ${oc.env:SENDER_PASSWORD}

llm:
  api:
    key: ${oc.env:OPENAI_API_KEY}
    base_url: ${oc.env:OPENAI_API_BASE}
  api_mode: chat_completion # Or response to use the Responses API.
  generation_kwargs:
    model: gpt-4o-mini

source:
  arxiv:
    category: ["cs.AI","cs.CV","cs.LG","cs.CL"]
    include_cross_list: false # Set to true to include arXiv cross-list papers in these categories.

executor:
  debug: ${oc.env:DEBUG,null}
  source: ['arxiv']

如果你想包含交叉列出的论文,请设置 source.arxiv.include_cross_list: true。

[!注意]
${oc.env:XXX,yyy} 表示环境变量 XXX 的值。如果该变量未设置,将使用默认值 yyy。

这是完整的配置,??? 表示必须填写的值:

zotero:
  user_id: ??? # User ID of your Zotero account.
  api_key: ??? # An Zotero API key with read access.
  include_path: null # A list of glob patterns marking the Zotero collections that should be included. Example: ["2026/survey/**", "2026/reading-group/**"]

source:
  arxiv:
    category: null # The categories of target arxiv papers. Find the abbr of your research area from [here](https://arxiv.org/category_taxonomy). Example: ["cs.AI","cs.CV","cs.LG","cs.CL"]
    include_cross_list: false # Whether to include arXiv cross-list papers in subscribed categories. Example: true
  biorxiv:
    category: null # The categories of target biorxiv papers. Find categories from [here](https://www.biorxiv.org/). Example: ["biochemistry","animal behavior and cognition"]
  medrxiv:
    category: null # The categories of target medrxiv papers. Find categories from [here](https://www.medrxiv.org/) Example: ["psychiatry and clinical psychology", "neurology"]
  chemrxiv:
    include_new_versions: false # Whether to include revised versions (v2, v3, ...) of previously posted chemrxiv preprints in addition to new first postings. chemrxiv has no category filter: all new preprints (a few dozen per day) are retrieved via Crossref and left to the reranker. Example: true

email:
  sender: ??? # The email account of the SMTP server that sends you email. Example: abc@qq.com
  receiver: ??? # The email account that receives the paper list. Example: abc@outlook.com
  smtp_server: ??? # The SMTP server that sends the email. Ask your email provider (Gmail, QQ, Outlook, ...) for its SMTP server. Example: smtp.qq.com
  smtp_port: ??? # The port of SMTP server. Example: 465
  sender_password: ??? # The password of the sender account. Note that it's not necessarily the password for logging in the e-mail client, but the authentication code for SMTP service. Ask your email provider for this. Example: abcdefghijklmn

llm:
  api:
    key: ??? # API Key of your LLM API. Example: sk-xxx
    base_url: ??? # API URL of your LLM API. Example: https://api.openai.com/v1
  api_mode: chat_completion # The LLM API to use. Options: chat_completion or response.
  generation_kwargs:
  # Arguments for the selected LLM API.
    max_tokens: 16384
    model: ???
  language: English # Preferred language for the TL;DR. Example: English

reranker:
  local:
    model: jinaai/jina-embeddings-v5-text-nano # The Hugging Face model name of the local embedding model. Example: jinaai/jina-embeddings-v5-text-nano
    encode_kwargs:
    # The kwargs for the encode method of the local embedding model. Details see [here](https://www.sbert.net/docs/package_reference/SentenceTransformer.html#sentence_transformers.SentenceTransformer.encode)
      task: retrieval
      prompt_name: document
  api:
    key: null # API Key of your embedding model API. Example: sk-xxx
    base_url: null # API URL of your embedding model API. Example: https://api.openai.com/v1
    model: null # The model name of the embedding model. Example: text-embedding-3-large
    batch_size: null # The batch size for embedding API requests. Adjust to match your provider's limit. Example: 64

executor:
  debug: false # Whether to use debug mode. Example: true
  send_empty: false # Whether to send an empty email even if no new papers today. Example: true
  max_paper_num: 100 # The maximum number of the papers presented in the email. Example: 100
  source: ??? # The sources of papers to retrieve. Example: ['arxiv','biorxiv','medrxiv','chemrxiv']
  reranker: local # The reranker to use. Example: 'local' or 'api'

就这些!现在你可以通过手动触发来测试工作流:

[!注意]
测试工作流操作是主工作流(Send-emails-daily)的调试版本,无论日期如何,它总是会检索5篇arxiv论文。而主工作流将每天自动触发,并检索昨天发布的新论文。在周末和节假日不会有新的arxiv论文,在这种情况下,你可能会在主工作流的日志中看到“未找到新论文”。

然后在其完成后检查日志和接收者邮件。

默认情况下,主工作流每天在UTC时间22:00运行。你可以通过编辑工作流配置 .github/workflows/main.yml 来更改此时间。

本地运行

在 uv 支持下,如果已安装 uv,这个工作流可以轻松在你的本地设备上运行:

# set all the environment variables
# export ZOTERO_ID=xxxx
# ...
cd zotero-arxiv-daily
uv run main.py

🚀 与最新版本同步

这个项目正在积极开发中。你可以通过点击 Watch 关注这个仓库,以便在我们发布新版本时收到通知。

📖 工作原理

Zotero-arXiv-Daily 首先通过相应的 API 获取你 Zotero 库中的所有论文以及前一天发布的所有论文。然后它通过嵌入模型计算每篇论文摘要的嵌入向量。论文的得分是它与所有 Zotero 论文的加权平均相似度(新添加到库中的论文权重更高)。每篇论文的 TLDR 由 LLM 生成,基于 pymupdf4llm 提取的文本。

📌 限制

  • 推荐算法非常简单,可能无法准确反映您的兴趣。欢迎提出更好的想法来改进算法!
  • 较高的 MAX_PAPER_NUM 可能导致执行时间超过 Github Action 运行器的限制(公共仓库每次执行 6 小时,私人仓库每月 2000 分钟)。通常,公共仓库提供的配额对于个人使用来说肯定足够。如果您有特殊需求,可以在自己的服务器上部署工作流,或使用自托管的 Github Action 运行器,或者为超出的执行时间付费。

📃 许可证

根据 AGPLv3 许可证分发。详情见 LICENSE。

❤️ 致谢

☕ 请我喝咖啡

如果您觉得这个项目有帮助,欢迎通过微信或 ko-fi 赞助我。

🌟 星标历史

本站来源与版权声明
  • 本文标题:zotero-arxiv-daily - 根据你的 Zotero 库每天推荐你感兴趣的新 ar
  • 本文链接:https://www.cn121.com/automation/tidedra-zotero-arxiv-daily.html
  • 原项目:TideDra/zotero-arxiv-daily 版权归原作者 TideDra 及贡献者所有
  • 收录信息:本站于 2026-10-27 收录本项目,本页所列协议与仓库指标均为收录当时的状态;该日期之后原项目的版本更新与协议变更,本页不作同步。
  • 开源协议:收录时本项目采用 AGPL-3.0(查看 LICENSE 原文),本站转载其原始文档(未改动文字,仅剔除图片与无关章节);使用、修改、分发请以该仓库 LICENSE 原文为准。基于本页内容形成的衍生作品, 须同样以该协议发布。
  • 站点出处:本文首发于 OneTwoOne,收录自 GitHub 开源项目 TideDra/zotero-arxiv-daily。
  • 内容说明:本页正文为原项目 README 原文(英文),本站后续会翻译为中文(当前尚未译出,仅将二级标题译为中文,便于按栏目定位;标题原文可在下方原仓库中查看),仅剔除了图片与赞助等无关章节、并把相对链接改为绝对地址;页首简介为机器翻译自仓库描述。
  • 引用声明:商业转载、第三方聚合或 AI 检索训练引用时,请务必保留以上来源出处、本文永久链接,以及原项目的版权声明与许可信息。
  • 下架通道:若原项目此后变更或收紧了许可协议、或作者/权利人认为本站的收录方式(译文、排版适配、简介翻译等)超出其授权范围,请通过 xyd3302001@163.com 发送下架通知,并附上项目地址与本页链接。本站核实后将第一时间删除本页内容,或改为不复制原文的目录性收录;署名更正等其他要求可一并提出。