官网 · 微信公众号
Important
周报已暂停更新。 本仓库代码、历史往期与站点归档仍保留,供查阅与复用。
基于 PubPeer(pubpeer.com)公开评论,抓取存在作者与打假人激烈交锋的论文,多维度打分排序,由大模型生成周报;流水线提供 MCP server 与 subagent 提示词(src/agent/)。
学术打假是维护科研诚信的重要防线。PubPeer 是全球最大的学术评论平台之一,评论区常上演作者申辩与质疑者对线的交锋。本系统:
- 自动监控 PubPeer 高关注论文的评论动态
- 智能打分 筛选值得报道的「激烈交锋」案例
- 周报化 由大模型生成 HelloGitHub 式周报
- Agent 化 流水线封装为 MCP server + subagent
capture(每日捕获 feed)→ revisit(≥7 天后回访评论线程)→ rank(两阶段打分选优)
→ pick(每类选篇打包)→ material(图材合并)→ LLM 生成周报
→ 手动粘贴发布公众号 → 更新 site.json(官网)
前置:Python 3 环境(conda activate pubecosphere);安装项目依赖(pip install -e .,src 布局可编辑安装,python -m 命令依赖它);配置 API 密钥(见「LLM 配置」)。
# 爬虫
python -m crawler.crawl --db data/pubpeer.db capture # 每日捕获 feed
python -m crawler.crawl --db data/pubpeer.db revisit --limit 50 # 回访
# 生成
ISSUE=n bash modules/weekly/run_issue.sh # 一键跑一期全流程脚本流程(数据由 cron 爬虫供给,脚本默认不跑爬虫):capture/revisit(可选) → rank → pick → material → generate/assemble → md2html → polish_html → inline_images(base64)。
常用环境变量(完整见 modules/weekly/run_issue.sh 头部注释):
| 变量 | 默认 | 说明 |
|---|---|---|
ISSUE |
1 |
期号 |
WINDOW |
"10 3" |
回访/打分相对窗口(天) |
WINDOW_FIELD |
captured_at |
打分日期基准字段 |
MIN_SCORE |
0.50 |
pick 选稿门槛 |
RUN_CAPTURE |
0 |
1 = 先跑每日 capture(默认 0:capture 是每日 cron 操作) |
RUN_REVISIT |
0 |
1 = 先跑回访 revisit(默认 0:数据由长期 cron 爬虫供给,脚本只管生成) |
DRY_RUN |
0 |
1 = 只预览 pick |
每期产物在 output/issue/<期号>/:score/(打分报告)、pub/ + manifest.*(素材与清单;图材合并图与结构化素材 md 写回 pub/<pid>_files/)、weekly/(周报成品 + *-base64.html 微信粘贴用)。不用脚本时各步骤的单条命令见 modules/weekly/run_issue.sh 头注释与 agent/README.md。
python -m writer generate用同一个模型完成提取 + 写稿(纯文本,图片描述来自评论者配图时的原话)。python -m llm md2html/python -m llm.inline_images是两条产品线共用的渲染工具。
提示词见 modules/weekly/prompts/。
密钥只走环境变量 / 仓库根 .env:
cp .env.example .env # 填入 PUBECOSPHERE_LLM_API_KEY=sk-…单模型路径变量:PUBECOSPHERE_LLM_MODEL(默认 deepseek-v4-flash)、PUBECOSPHERE_LLM_MAX_TOKENS(默认顶满模型上限)。
同一套 CLI 与写稿提示词,两种挂载形态:MCP server(17 个确定性工具,供定时/无头客户端)与 subagent 系统提示词(交互式 agent,全流程编排 + 写稿一体)。确定性步骤走 CLI/MCP 工具,写稿默认由 subagent 本体按 modules/weekly/prompts/ 提示词完成,「走 API」时用 writer generate / pubai4s_run。
前提:一次 pip install -e . 装齐全部包(含 modules/ai4s 的推文流水线,无需单独安装);cd src/vendor/md2html-cli && npx -y bun install(首次联网拉传递依赖一次);.env 配 PUBECOSPHERE_LLM_API_KEY(仅「走 API」模式需要)。
MCP 挂载(客户端的 MCP 配置里添加,必须绝对路径启动脚本):
{
"mcpServers": {
"pubecosphere": {
"command": "bash",
"args": ["/abs/path/to/PubEcosphere/src/agent/mcp.sh"]
}
}
}客户端支持 MCP 就直接用(无需第三方 adapter):把上面这段放进客户端的 MCP 配置文件即可;部分客户端首次使用需信任项目,并可用 toolExposure 之类配置决定哪些工具直接暴露给模型。
Subagent 挂载:把对应文件内容作为 subagent 的系统提示词加载,工作目录指向仓库根,授予 Bash / Read / Write / Edit / Glob / Grep 权限:
src/agent/pubecosphere-weekly.md— 周报全流程:status 查询 → rank 打分 → pick 选稿(先 dry-run 等人工确认)→ 图材 → 写稿 → 排版渲染;src/agent/pubai4s-post.md— AI4S 项目推文:fetch 抓取 → 材料提取 → 写稿 → 渲染 base64 成品 → 官网归档。
agent 上手路径(三步,不用先读完全文):
# 1) 自检:提示词 / 离线自测 / 转换器 / 状态机 / 数据库可读,五项全 PASS
python -c "from agent.tools import run_tool; print(run_tool('preflight', {}).text)"
# 2) 问状态机:当前走到哪、下一步该跑什么命令(next_cmd 可直接复制执行)
python -m scoring.pipeline status --db data/pubpeer.db --issue <N>
# 3) 按 next_cmd 走,跑完再问一次 status,next_cmd 自动前移pick 先 dry-run 给人工批准,草稿生成后人工审核再发布。只读命令(status / coverage)在库缺失时干净退出 1 并给一行原因,不会静默建出空库。工具清单与两形态分工详见 agent/README.md。
https://piwir.github.io/PubEcosphere/ (Vue 3 + Vite,GitHub Actions 自动部署):展示当前期号与公众号入口,另有往期归档与项目介绍。
站点数据由单文件 src/site/src/data/site.json 维护:每期生成结束时自动归档(python -m sitejson sync --issue N,写 currentIssue / issueDate / window + issues[] 归档条目,公众号链接除外)。发布后只需在 issues[] 里补上公众号链接并重跑同一条命令(首页 CTA 由它派生),再 push,Actions 自动重新部署:
currentIssue/issueDate/window→ 新一期(自动写入);issues数组头部加一条{ "issue": N, "date": "YYYY-MM-DD", "wechatUrl": "…", "summary": "一句话摘要" }(自动写入,wechatUrl留空);- 发布后在
issues[]条目里补wechatUrl→python -m sitejson sync --issue N同步wechat.url/wechat.label(链接未发布时首页显示「即将发布」占位)。
AI4S 推文归档(官网 AI4S 页)同理,但走单独命令,只动 ai4s.posts:推文渲染后跑
python -m sitejson sync-ai4s --dir output/PubAI4S/<owner>-<repo>(repo / 项目名 / 摘要 / 日期从 post.md 派生,按 repo 去重、幂等);
发布后在 ai4s.posts[].url 补公众号链接再跑一次,页面即由「即将发布」变为可点阅读。
本地开发与换图说明见 site/README.md。
- 中科院分区表 2025(大类/小类/分区/Top):
data/cas2025.csv,源自 hitfyd/ShowJCR 整理的中科院文献情报中心分区表。 - JCR 影响因子 2025:
data/jcr2025.csv,同源仓库(JCR2025-UTF8.csv)。 - CCF 推荐目录 2026 / 计算领域高质量期刊 T 分级:
data/ccf2026.csv/data/ccft2025.csv,同源仓库。 - 国际期刊预警名单 2025:
data/journal_alert.csv,同源仓库(GJQKYJMD2025.csv)。 - PubPeer 数据:官方
/api/recentfeed + 文章页 +/v3/publications(DOI 反馈摘要)。 - DOI 解析:CrossRef API(
api.crossref.org,按 ISSN 过滤 + 容器期刊名校验)。 - 以上数据文件均在
data/。 data/*.csv(分区表/JCR/CCF/预警)随仓库提交,派生自 hitfyd/ShowJCR(GPLv3);原数据版权归中科院文献情报中心 / Clarivate / CCF 等来源方,不属本项目 MIT 代码。自行下载使用需遵循 ShowJCR 及原始数据条款。
周报 md 转微信兼容 HTML 使用仓库内 vendored 转换器(src/vendor/md2html/ 包 + src/vendor/md2html-cli/ 薄 CLI,经裁剪:去掉 mermaid,bun 默认经 npx -y bun 启动),不依赖任何外部 skill。该转换器派生自 JimLiu/baoyu-skills(baoyu-md,MIT License),License 保留于 src/vendor/md2html/src/LICENSE。
PubEcosphere/
├── src/ # 通用层 + 官网 + agent 接口
│ ├── core/ # 通用工具(期号派生/时间/打假人名单/展示/DB/提示词骨架)
│ ├── llm/ # 通用 LLM 客户端 + md→html / 图片内联渲染
│ ├── agent/ # MCP server + 两份 subagent 提示词
│ ├── site/ # 官网前端
│ ├── sitejson/ # 官网归档
│ ├── vendor/ # md→html 转换器
│ └── repopath.py # 仓库根定位
├── modules/
│ ├── weekly/ # 周报产品线:crawler / scoring / writer + prompts + run_issue.sh
│ └── ai4s/ # 推文产品线:pubai4s + prompts
├── pyproject.toml # 打包配置
├── images/ # 项目素材
├── data/ # 运行数据
├── output/ # 输出周报
└── docs/ # 本地私有文档(gitignored)
| 文档 | 内容 |
|---|---|
modules/weekly/prompts/ |
周报文本提取 / 写稿 两套提示词 |
src/agent/README.md |
MCP 工具 + subagent 提示词说明 |
src/site/README.md |
网站说明 |
- 本项目仅供学术诚信研究与交流使用,所有数据来源于 PubPeer 公开评论。
- 本项目不对因使用本系统造成的任何后果负责。
本仓库代码以 MIT License 开源(见 LICENSE)。vendored 转换器 src/vendor/md2html/ 派生自 JimLiu/baoyu-skills(baoyu-md,MIT),其 License 保留于 src/vendor/md2html/src/LICENSE。外部数据版权归各自来源方:data/*.csv 派生自 hitfyd/ShowJCR(GPLv3,原数据归中科院文献情报中心 / Clarivate / CCF 等),数据文件不属本项目 MIT 代码;PubPeer / CrossRef 数据归对应平台。
