本工具是一个基于 GitHub Actions 的全自动文献监测系统。它旨在解决科研工作中的信息筛选效率问题,功能逻辑如下:
1. 抓取:定时从指定的期刊 RSS 源获取最新发表的论文。
2. 筛选:根据预设的关键词逻辑(支持 AND 组合)对标题和摘要进行匹配。
3. AI总结:借助AI减轻手动翻阅订阅的负担,现在只需打开汇总网页扫一眼。
4. 分发:将命中的论文重组为标准化的 RSS 订阅源,供 Zotero 等阅读器订阅,如果你是Zotero用户,可能会对插件版感兴趣。
Keyword A AND Keyword B 的组合逻辑检索。filtered_feed.xml ai_summary_feed.xml ai_summary.html ai_summary_state.json 文件(清除示例数据,可选)。提供两种配置方式,涉及未发表 Idea 或敏感方向建议使用方式 B。
直接编辑仓库中的以下文件:
* journals.dat:填入期刊 RSS 链接,一行一个。
* keywords.dat:填入筛选关键词,一行一个。
* 示例:Perovskite AND Stability
RSS_JOURNALS | Secret: 填入期刊链接(换行分隔)。RSS_KEYWORDS | Secret: 填入关键词(换行分隔)。AI 总结默认不强制启用。只有当以下必需 Secrets 都存在时,ai_summary.py 才会在 GitHub Actions 中运行;否则会跳过,不影响普通 RSS。
Name: AI_API_CONFIG | Secret: 按顺序填写三行,分别是 Base URL、API Key、模型名:
text
https://api.openai.com/v1
sk-***
gpt-4.1-mini
Name: AI_SUMMARY_PROMPT | Secret: 你的研究方向,建议按重要性排序分行填写,可以是关键词、短句或者一句话。
非敏感参数在 paper_feed_config.json 中修改,无需删除或新增 GitHub Actions 变量:
{
"rss": {
"fetch_interval_hours": 8
},
"ai_summary": {
"enabled": true,
"interval_hours": 24,
"max_candidates": 100,
"screening_batch_size": 10,
"requests_per_minute": 5,
"max_output_tokens": 0,
"max_prompt_title_chars": 0,
"max_prompt_abstract_chars": 0,
"retry_attempts_per_round": 3,
"retry_rounds": 2,
"retry_sleep_seconds": 600
}
}
其中:
max_candidates 每次生成html文件使用多少篇未使用的文献,没有总结过的会留到下次;
screening_batch_size 单次发送多少篇文献给AI总结,太多了考验AI上下文,可能会丢文献,太少了请求次数过多;
requests_per_minute 是 AI API 请求速率限制,默认 5,即相邻两次请求至少间隔约 12 秒;
max_output_tokens、max_prompt_title_chars、max_prompt_abstract_chars 用于避免输入输出过长、生成时间过久导致网关超时,默认为0,表示不限制。
AI 总结会生成:
ai_summary_feed.xml:AI 总结订阅源。ai_summary.html:最新一期 AI 总结 HTML 页面。ai_summary_state.json:已总结文献和上次成功时间,用于避免重复提交给 AI。Deploy from a branch。main 分支的 /(root) 目录。https://{你的GitHub用户名}.github.io/{仓库名}/filtered_feed.xml
若启用了 AI 总结,AI 订阅链接为:
https://{你的GitHub用户名}.github.io/{仓库名}/ai_summary_feed.xml
当然你也可以直接在浏览器访问:
https://{你的GitHub用户名}.github.io/{仓库名}/ai_summary.html文件 -> 新建文献库 -> 新建订阅 -> 从网址。fetch_interval_hours 相同或更短,以匹配后端的更新频率。Zotero 列表中的「出版物」列默认显示期刊的正式缩写(如 JACS、PRB、Nat. Commun.),标题列也会自动去除来源标注前缀(如 [Journal of the American Chemical Society: Latest Articles (ACS Publications)] [ASAP])。
此功能由 journal_map.py 实现,无需修改主程序即可扩展。
在 journal_map.py 的 JOURNAL_MAP 列表末尾添加一条记录:
{"prefix": "RSS 标题中方括号内的原始文字", "abbr": "期刊标准缩写"},
如何获取 prefix?
运行一次后,在生成的 filtered_feed.xml 中找任意一条该期刊的条目,<author> 标签内的文字即为对应的 prefix(在映射生效前,author 字段存储的就是 RSS 频道标题原文)。
示例:
# 在 JOURNAL_MAP 列表末尾追加:
{"prefix": "ACS Catalysis: Latest Articles (ACS Publications)", "abbr": "ACS Catal."},
{"prefix": "Wiley: Chemistry of Materials: Table of Contents", "abbr": "Chem. Mater."},
提交更改后,下次 GitHub Actions 运行时自动生效。
keywords.dat 是否过于宽泛;若漏掉重要论文,请检查是否拼写错误或逻辑过严。https://linux.do/
$ claude mcp add paper-feed \
-- python -m otcore.mcp_server <graph>