mcpField
P
paper-preflight

paper-preflight

本地服务
github.com/amos689科研与教育1272 周前更新

关于 paper-preflight

paper-preflight 是面向论文作者的参考文献核验工具,可检查多种文稿与书目格式,并通过学术及软件数据源验证引用。它不使用 LLM 作出判定,不确定时会明确标示原因。

主要功能

  1. 01检查多种论文与书目格式
  2. 02比对引用的真实书目记录
  3. 03识别撤稿及预印本正式发表
  4. 04检查 DOI、作者、标题和年份
  5. 05输出带规则编号的核验报告

适用场景

  1. 01投稿前核验 LaTeX 或 Word 论文
  2. 02检查独立 BibTeX 或 RIS 书目
  3. 03查找失效 DOI 与错误元数据

MCP 相关

可选安装 MCP 服务,为编码 Agent 提供论文参考文献核验能力。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"amos689-paper-preflight": {
"command": "uvx",
"args": [
"paper-preflight"
]
}
}
}
启动命令uvx paper-preflight

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypipaper-preflight1.0.0

工具

5

收录的工具列表 · 更新于 2 周前

参数类型必填说明
langenum否消息语言:英语或中文。en | zh
pathstring否LaTeX 项目文件夹或 .tex 文件、Markdown、Quarto 或 Typst 文稿(.md、.qmd、.typ)、Word 文稿(.docx),或参考文献列表(.bib、.bbl、.json、.ris、.yml、.txt、.pdf),路径相对于工作区根目录(默认值:根目录本身)。
offsetinteger否从哪条检查结果开始:先用 0,然后使用 `next_offset`。
offlineboolean否true:仅使用本地缓存作答,绝不访问网络(尚未缓存的参考文献将返回为未核验)。
include_infoboolean否同时返回信息类检查结果(建议),而不仅仅是错误。
max_findingsinteger否本次调用返回的检查结果数量(至少为 1)。

详细介绍

paper-preflight

提交前,使用真实的学术记录核查论文中的每一条引用。
不靠大模型猜测,不做不实指控。

CI PyPI 版本 MIT 许可证 Glama 上的 paper-preflight MCP 服务

Python 3.11 至 3.14 输入格式:LaTeX、Word、Markdown 和 PDF 对照六个学术数据库核查 判定不使用大模型 只读 MCP 工具

已在 Windows、Linux 和 macOS 上测试 支持英语和简体中文

English · 简体中文 · 快速开始 · 用户指南 · 发布版本 · 反馈

paper-preflight 检查示例论文:错误包括未定义的引用键、属于另一篇论文的 DOI、没有任何来源收录的参考文献、已撤稿论文和重复条目键;警告包括已发表的预印本、同一作品的两个条目、错误年份和经过 LaTeX 转义的 DOI

语言模型会编造参考文献,而复制粘贴的 BibTeX 往往带有错误的年份、作者和失效的 DOI。paper-preflight 会读取你的论文(LaTeX、Word、Markdown、Typst、PDF 或纯参考文献列表),并针对每一篇引用的作品查询 Crossref、dblp、arXiv、DataCite、PubMed 和 OpenAlex;如果你有免费密钥,也会查询 Semantic Scholar;对于没有 DOI 的书籍,会查询 Open Library;对于软件、模型和数据集,则会查询 GitHub、PyPI、CRAN、Hugging Face 和 OpenML:

  • 这篇作品是否存在?
  • 它是否与你写的内容相符?
  • 它是否已被撤稿?
  • 你引用的预印本之后是否已经发表?

每项发现都有记录作为依据,或者依据是所有可能收录该作品的来源都回答了“否”。无法判断时,它会说明“无法确定”并解释原因,而不是猜测。判定过程不涉及任何语言模型。

状态:1.0。 在发布前留出的三周真实 arXiv 论文上,每 100 条参考文献仅有 0.79 条误报,同时发现了 409 个真实问题(准确率)。 规则 ID、JSON 报告、设置、命令和 Python API 在整个 1.x 版本系列中保持不变 (稳定内容)。我们最希望听到的是误报问题:请提交 issue。

快速开始

使用 uv 无需安装任何内容:

uvx paper-preflight check path/to/paper

path/to/paper 是项目文件夹、主 .tex 文件或 .bib 文件。要永久安装它 (Python 3.11 或更高版本):

pip install paper-preflight
附加组件提供功能安装命令
pdf读取 PDF 的参考文献列表pip install "paper-preflight[pdf]"
mcp面向编码 Agent 的 MCP 服务pip install "paper-preflight[mcp]"
support实验性的证据查找器及其本地模型pip install "paper-preflight[support]"

仓库的演示论文引用了 11 篇作品,其中几篇是故意写错的。上方动画展示了运行 paper-preflight check examples/demo-paper 并核对实时来源的真实过程。其中,正确的 NeurIPS 论文通过 dblp 得到验证,尽管 Crossref 中只有它的伪造副本;没有标识符的书籍由 Open Library 确认;而尚不支持其文字体系的中文书籍,结果是“无法确定”,而不是“未找到”。

同一次运行的文本形式
$ paper-preflight check examples/demo-paper
paper-preflight 1.0.0 · main.tex · 12 entries, 12 cited keys

error   CIT001 main.tex:31
    Citation key 'nonexistent2023' is not defined in any bibliography file (1 use(s)).
error   REF001 refs.bib:43
    The doi of 'devlin2019bert' (10.1109/cvpr.2016.90) resolves to a different work in Crossref: "Deep Residual Learning for Image Recognition" (He et al., 2016).
error   REF003 refs.bib:66
    'lindqvist2024quantum' was not found in Crossref, dblp and Semantic Scholar, and every source responded. Check that the work exists and that its title is correct.
error   REF004 refs.bib:73
    'wakefield1998ileal' has been retracted (reported by Crossref, OpenAlex). Cite it only if the text discusses the retraction.
error   CIT002 refs.bib:128
    Entry key 'kingma2015adam' is already defined at line 47; BibTeX ignores this one.
warning REF015 refs.bib:31
    'he2015residual' cites a preprint that has been published in CVPR (2016), DOI 10.1109/cvpr.2016.90. Cite the published version and keep the eprint field.
warning CIT004 refs.bib:37
    Entries 'devlin2019bert' and 'he2016deep' look like the same work (same DOI).
warning REF013 refs.bib:51
    'kingma2015adam' gives the year 2016, but dblp records 2014, 2015.
warning REF017 refs.bib:112
    The doi of 'tacl2019example' contains LaTeX escapes: '10.1162/tacl\_a\_00276'. Write it as: 10.1162/tacl_a_00276
info    REF005 refs.bib:73
    'wakefield1998ileal' has a published correction (reported by Crossref).
info    REF090 refs.bib:95
    'zhou2016ml' could not be verified: non-Latin titles are not supported yet; grey literature without an identifier (book, report, software, web page).
info    CIT003 refs.bib:116
    Entry 'lecun1998gradient' is never cited.

References: 7 verified · 1 metadata mismatch · 1 identifier conflict · 1 not found · 1 cannot determine
5 error(s) · 4 warning(s) · 3 info

可读取的内容

输入内容命令
LaTeX 项目:项目文件夹、主 .tex 文件或 .bib 文件;对于许多 arXiv 来源那样只提供已编译 .bbl 文件的项目,则从该文件读取(只检查,不会修改)paper-preflight check path/to/paper
Word 手稿:由 Zotero、Mendeley 或 EndNote 插入的引文、Word 自带的来源,或手动输入的参考文献列表paper-preflight check paper.docx
Markdown、Quarto 或 R Markdown:根据其参考文献核对 [@key]paper-preflight check paper.qmd
Typst:根据 #bibliography(...)、.bib 或 Hayagriva .yml 核对 @keypaper-preflight check paper.typ
独立的参考文献文件:BibTeX、CSL-JSON(.json)、RIS(.ris)或 YAML(.yml)paper-preflight check refs.ris
纯文本参考文献列表,支持常见格式(APA、IEEE、ACM、Nature、Vancouver、Springer、Elsevier、MDPI、GOST、Chicago、MLA)paper-preflight check references.txt,或使用 - 从标准输入读取
只有 PDF(需安装 pdf 附加组件)paper-preflight check paper.pdf
任意 arXiv 论文:将其源文件下载到临时文件夹,检查后删除paper-preflight check arxiv:2607.06922

各类输入能提供和不能提供的信息详见:docs/inputs.md。

检查内容

每条参考文献都会得到一个判定:

判定含义
verified找到了相关作品的记录,且与条目一致
metadata mismatch找到了相关作品,但条目中的信息与之不符;检查结果会指出具体字段
identifier conflict条目中的 DOI 或 arXiv ID 属于另一部作品
not found所有可能收录该作品的来源都已响应,但均未找到该作品
cannot determine无法作出判定,报告会说明原因

检查结果会指出具体问题:

规则检查结果
REF001DOI 或 arXiv ID 指向了另一篇论文
REF002DOI 或 arXiv ID 不存在
REF003所有来源都已响应,但均未找到该作品
REF004 · REF005该作品已撤稿,或有关注声明或更正
REF010–REF014作者、标题、年份或发表场所与真实记录不符
REF015引用的预印本已正式发表
REF016注册库中有条目缺少的 DOI(可安全修正)
REF017标识符的写法会导致链接失效(10.1162/tacl\_a\_00276、…v1)
REF018引用的 arXiv 预印本已由作者撤回
REF019 · REF021链接的代码仓库、软件包或数据集不存在;链接的网页已失效,且没有存档副本
REF020预印本引用的发表场所未被任何期刊和会议目录收录
REF090无法判定,并始终说明原因(来源不可用、灰色文献等)
CIT001–CIT008引用键未定义、重复、未使用或近似重复;.bib 语法错误
TEX001–TEX004包含的文件缺失、不可读或相互包含;远程参考文献列表未经检查
RUN001 · RUN002 · CFG001因来源中断而未完成的运行;某来源代替另一来源作出响应;未起作用的抑制注释

每条规则都有说明页面:介绍检查内容、可能出现误判的情况,以及应采取的措施。在终端中运行 paper-preflight explain REF003 即可查看说明。

准确度如何?

以下是基于实时来源得出的四项测量结果:

测量对象结果
真实论文:从三周的 arXiv 论文中留出 60 篇供 1.0 使用,共 2,714 条参考文献;每项标记均经过人工审查每 100 条参考文献中有 0.79 次误报(每三篇论文出现一次),实际问题共 409 个
通过同行评审的幻觉:GPTZero 在 NeurIPS 2025 和 ICLR 2026 论文中发现的 151 个问题标记 142 个(94%),9 个无法判定,没有一条被判定为 verified
HALLMARK,一个公开基准:开发期间从未使用过的 831 个条目任意问题:精确率 98.5%,召回率 93.5%,假阳性率 1.9%
与另外五种工具对比:一项已发表研究中由人工标注的 104 条参考文献精确率 72.5%,其他工具为 31–51%,召回率为 87.9%

优先保证精确率:只有存在正面证据时,才会将参考文献判定为伪造;查询未得到答复或结果含糊时,会报告为“cannot determine”,绝不会报告为“not found”。评测工具和每次运行的摘要都在 evals/ 中。

真实论文

每周从 arXiv(cs、stat、q-bio、quant-ph 和 astro-ph)中机械地选取 20 篇论文。对于 1.0,三周此前从未使用过的数据在变更前一并提交并测量,且每周都在同一份代码上运行一次。门槛是每周每 100 条参考文献最多 1.5 个误报,平均最多 1.0 个。上方列出的是较近、误报率低于 1.0 的各周;每周都使用当时的版本运行一次。所有测量过的周(包括误报率高于 1.0 的周)都列在 evals/README.md 中。

论文首次提交日期版本参考文献标记数实际问题误报不明确每 100 条参考文献的误报数
2026-10-07..131.0 candidate, 1st try9918176410.4
2026-09-30..10-060.7.01,0148979730.7
2026-09-23..290.6.07864842600.8
2026-06-24..300.8.01,1271431321010.9
2026-05-13..191.0 candidate, 1st try1,008133123820.8
2026-05-06..121.0 candidate, 2nd try950133126700.7
2026-04-08..141.0 candidate, 3rd try1,088194181760.6
2026-04-01..071.0 candidate, 3rd try7638680600.8
2026-03-25..311.0.0809220209831.0
2026-03-18..241.0.01,007110105500.5
2026-03-11..171.0.089810495810.9
三个 1.0.0 周合计1.0.02,7144344092140.79
  • **409 个实际问题:**220 篇已发表的预印本,149 个会导致链接失效的标识符,30 条作者、标题或年份错误的记录(NeurIPS 2025 论文标注为 2026 年、虚构的共同作者,以及 BibTeX 误读的作者字段),以及 10 篇所引内容并不存在的作品:5 篇无处可查,3 个标识符不存在,2 个标识符属于其他作品。少数论文的参考文献列表大部分是编造的(医学影像、LLM)。
  • **21 个误报:**注册机构自身的错误(标题被截断或拼写错误、名称乱码、符号遗漏)5 个;署名为其制作者的团体自行提出的问题,以及 Zotero 的“N other authors”占位符 6 个;没有索引收录的作品或后来改过标题的作品 3 个;用会议论文代替期刊版本进行比对 2 个;APA 在标题后添加的 [software] 和 [dataset] 标签 2 个;其他 3 个。发现判定错误时说明了该怎么做。
  • **门槛经过四次尝试才达标。**前三次的平均误报率分别为每 100 条参考文献 1.08、1.24 和 1.28 个,且每次都有一周超过 1.5 个;每次尝试发现的误报都在下一次尝试前修复,并使用新的周数据进行测试。首个版本 0.1.0 的测量结果为 4.5。此后测量过的每一周都列在 evals/README.md 中。
通过同行评审的幻觉内容

GPTZero 发布了在 NeurIPS 2025 论文和 ICLR 2026 投稿中发现的 151 条幻觉参考文献,每条都经其员工确认。 将论文中的内容原样粘贴为纯文本后,结果如下:

参考文献标记无法确定已验证
151142 (94%)90
  • **其中没有一条得到验证。**剩下的 9 条未能判定,包括网页和博客文章、没有任何来源索引的研讨会论文、作者信息为虚构内容且有多篇作品共用同一标题的真实标题,以及两条乱码严重、无法搜索的参考文献。每条及其原因都列在 evals/results/gptzero.md 中。
  • 这些内容是 GPTZero 自己的工具发现的,因此属于搜索能够找到的幻觉内容;对各种幻觉的召回率都更低(见下文 HALLMARK)。
HALLMARK

HALLMARK(v1.2.3)是一个包含真实和虚构 BibTeX 条目的公开基准测试。伪造统计标识符错误、找不到对应作品且没有共同作者的情况;任何问题还统计作者、标题、年份或发表 venue 错误的情况。

SplitModePrecisionRecallFalse-positive rateCoverage
test_public: 831 entries, never used during developmentAny issue98.5%93.5%1.9%97.7%
Fabrication99.0%50.2%0.6%97.7%
dev_public: 1,119 entries, used during developmentAny issue97.7%94.3%2.1%98.9%
Fabrication98.2%53.7%1.0%98.9%

test_public 使用 1.0.0 运行,dev_public 使用 0.8.0 运行;没有针对 test_public 调整规则。

  • 大多数误报都来自有争议的标签。 我们手动检查了 dev_public 中所有被标记为 VALID 的条目:剩下的 11 条都不是正确引用(DOI 属于其他论文、作者列表中列出了并未撰写该论文的人、年份偏移、标题被截断)。排除这些条目后,两种模式的精确率都达到 100%。列表中的每项都附有一个通过一次查询即可确认的原因:evals/hallmark_disputed.toml。
  • 仍会漏掉的情况: 末尾被截短的作者列表,或仅与预印本核对、而其后续版本新增了作者的情况(会在 info 中注明),以及借用多个真实作品共用标题的虚构条目。各类幻觉的细分情况见 evals/results/。
与其他工具对比

Badalova & Mayr(2026)手动检查了 104 条参考文献,并公布了五种工具的标记结果。对同一批参考文献使用其标签,结果如下:

ToolPrecision [95% CI]RecallFalse flags per 100 correct references
CheckIfExist47.7% [36.0%, 59.6%]93.9%47.9
HalluCiteChecker47.4% [32.5%, 62.7%]54.5%28.2
Hallucinator50.9% [38.3%, 63.4%]87.9%39.4
HalRef31.2% [21.9%, 42.2%]72.7%74.6
RefChecker47.1% [35.7%, 58.8%]97.0%50.7
paper-preflight72.5% [57.2%, 83.9%]87.9%15.5

样本较小,因此置信区间较宽。该研究在作品存在时就将参考文献标为正确,因此 paper-preflight 的五条“错误”标记中,有五条指出的是真实错误(作者错误、DOI 无效)。本次数据中发现的两种误报原因已在上述运行之前修复(首次运行的精确率为 62.8%);请参阅 evals/results/badalova-mayr.md。

限制

  • 使用拉丁字母以外文字的标题(中文、日文、西里尔文等)目前会标记为“无法确定”;以译成英文的标题引用的中文作品也是如此,因为开放索引很少收录这类作品。
  • 没有标识符的灰色文献(报告、论文、手册、标准)通常会标记为“无法确定”:开放注册库收录的此类内容很少。图书会查询 Open Library,软件会查询 GitHub、PyPI 和 CRAN,模型和数据集会查询 Hugging Face 和 OpenML。
  • 网页永远不会被判定为真或假。 如果链接页面已失效,且没有存档副本,则会报告(REF021)。
  • 开放索引均未收录的作品,如果目录也不认识其发表渠道,会标记为“无法确定”;但如果发表渠道为目录所知,则可能会报告为未找到:采取行动前,请先阅读 REF003 的页面,了解这一发现。
  • 无法捕获的情况: 虚构的参考文献借用了多部作品共用的真实标题;作者列表在末尾被截短(这是信息项);以及引用真实论文来支持该论文并未提出的主张(只有实验性的 support 会读取主张)。
  • 首次运行需要网络:冷缓存时,每条参考文献约需 0.4 秒,因此一篇有 50 条参考文献的论文约需 20 秒。结果会缓存,--offline 可使用缓存运行。如果某个数据源不可用,且没有其他来源可提供答案,则本次运行会标记为不完整(退出代码 2),绝不会标记为“无问题”。

获取已验证的 BibTeX

与其凭记忆编写条目,不如按 DOI、arXiv ID 或标题查询。每个字段都来自注册记录,条目上方的注释会注明该记录:

paper-preflight bib fetch 1810.04805
% Verified with paper-preflight against dblp (conf/naacl/DevlinCLT19), 2026-10-03
@inproceedings{devlin2019bert,
  title         = {{BERT:} Pre-training of Deep Bidirectional Transformers for Language Understanding},
  author        = {Devlin, Jacob and Chang, Ming-Wei and Lee, Kenton and Toutanova, Kristina},
  booktitle     = {NAACL-HLT (1)},
  year          = {2019},
  doi           = {10.18653/v1/n19-1423},
  eprint        = {1810.04805},
  archivePrefix = {arXiv},
}
  • 预印本: 已发表的 arXiv 预印本会返回其已发表版本,并保留其 eprint(要获取预印本本身,请使用 --prefer preprint)。
  • 标题: 如果有多部作品匹配,使用 --title(必要时加上 --author/--year)会列出候选项,而不是自行选择。
  • 撤稿: 已撤稿的作品会附带警告。
  • 脚本和 Agent: 使用 --format json。

修复参考文献表

bib fix 会根据已验证的记录,将检查结果转换为对 .bib 文件的修改。它会打印差异;只有添加 --apply 后才会进行修改:

paper-preflight bib fix path/to/paper --level unsafe
--- a/refs.bib
+++ b/refs.bib
@@ -48,7 +47,7 @@
   title     = {Adam: A Method for Stochastic Optimization},
   author    = {Kingma, Diederik P. and Ba, Jimmy},
   booktitle = {International Conference on Learning Representations (ICLR)},
-  year      = {2016},
+  year      = {2015},
 }
  • --level safe(默认值)只会修复不会改变所引用作品的内容:会导致链接失效的标识符,以及注册库中有但条目中缺失的 DOI。
  • --level unsafe 还会根据记录重写作者、标题、年份和发表渠道;删除指向其他作品的标识符;并将预印本改为引用其已发表版本(条目类型、发表渠道、年份、卷号、页码和 DOI;保留 eprint)。请先检查差异。
  • 只会修改受影响的字段;注释、格式、换行符和编码都会保留。对于无人能找到的参考文献,绝不会进行“修复”:只有你能判断原本指的是什么。

选项和退出代码

选项效果
--format json / --format sarif输出机器可读格式(SARIF 可用于 GitHub 代码扫描);-o 将其写入文件
--fail-on warning警告也会使本次运行失败(默认值为错误;never 表示两者都不触发失败)
--offline不访问网络;仅使用本地缓存中已有的答案
--refresh重新查询每个来源,而不使用缓存的答案(例如修正内容之后)
--recheck立即重新搜索之前因太新而未能编入索引的参考文献(否则每天搜索一次)
--details列出每一项发现;默认情况下,适用于多条记录的建议(已发布的预印本、可用的 DOI)只占一行
--hide-info不显示信息项
--lang zh使用中文消息(也会根据你的区域设置自动选择)
退出代码含义
0未发现达到或超过 --fail-on 阈值的问题
1存在阻止性问题
2不存在阻止性问题,但有一个来源不可用,且没有其他来源能够提供答案,因此论文暂时不能判定为无问题
3用法错误
4内部错误(请报告)

JSON 报告遵循已发布的 JSON Schema (schema_version 1.0):可以添加字段,但在 1.x 中不会删除字段或更改字段含义。 所有选项、缓存及其有效期:docs/configuration.md。

项目设置

对于整个项目,可将设置写入论文旁边的 paper-preflight.toml(或其上层文件夹中,直到仓库根目录),也可写入 pyproject.toml 的 [tool.paper-preflight] 中:

ignore-rules = ["REF016"]                  # never report these rules
ignore-keys = ["internal2024*"]            # nor anything about these entries
severity = { REF015 = "info" }             # report published preprints as infos
disable-sources = ["s2"]                   # optional sources only
fail-on = "warning"                        # as --fail-on; the command line wins

也可以使用 check --config <path> 指定文件。可选来源包括 s2、openlibrary、 github、pypi、cran、huggingface、openml、web(网页链接)和 wayback; 用于判断参考文献的注册库无法关闭。文件中的错误(未知规则或设置)会被视为错误,不会被静默忽略。JSON 报告会在 run.notes 中注明该文件,MCP 服务也会读取它。

忽略已核查的问题

在条目正上方添加注释,即可忽略适用于该条目的规则;也可以附上原因:

% preflight: ignore[REF003] reason="internal technical report, not indexed anywhere"
@techreport{lab2024internal,
  ...
}

判定结果仍会保留在 JSON 报告中;只有问题会被移除。若某条抑制规则没有忽略任何问题,系统会将其报告为 CFG001(信息),以免过时的注释不断累积(对于参考文献规则,只有在完整的在线运行后才会报告,因为离线答案和服务中断可能导致规则未运行)。

使用免费凭据获得更好的结果

paper-preflight 无需任何账户即可使用。以下可选环境变量可提升速度并增加结果完整性;其值绝不会被打印或记录。

变量效果
PAPER_PREFLIGHT_EMAIL使用 Crossref 的礼貌请求池:查询更快、更可靠
OPENALEX_API_KEY提高 OpenAlex 的额度,用于撤稿检查
S2_API_KEY将 Semantic Scholar 作为备用来源,用于查找其他来源均未找到的参考文献
GITHUB_TOKEN提高 GitHub 的请求额度(每小时 5,000 次,而非 60 次),用于查询仓库参考文献
NCBI_API_KEY提高 PubMed 的请求额度(每秒 10 次,而非 3 次),用于查询 PMID 和 PMCID

paper-preflight doctor 会显示哪些变量已设置,以及每个来源当前是否可正常响应。

在工作流中使用

**Claude Code:**安装插件。该插件捆绑了一个 MCP 服务和一个技能,让 Claude 在认定论文完成前检查参考文献,只修正已证实的错误,绝不编造参考文献。

claude plugin marketplace add amos689/paper-preflight
claude plugin install paper-preflight@paper-preflight

**Codex、Gemini CLI、Copilot、Cursor 和其他 Agent:**安装同一个技能(也可以运行 gh skill install amos689/paper-preflight paper-preflight)。未配置 MCP 服务时,它会运行 CLI:

npx skills add amos689/paper-preflight

**MCP 客户端(Codex、Cursor、VS Code、……):**运行 paper-preflight mcp(mcp extra)。这些工具是只读的,且仅限于你的工作区;请参阅 docs/mcp.md。

GitHub Actions:uses: amos689/paper-preflight@main 会在每次推送时检查论文,并将报告放入作业摘要,还可选择启用代码扫描警报;请参阅 docs/github-action.md。

**pre-commit:**每次提交时,仅需数秒即可检查引用键和缓存的判定结果;请参阅 docs/pre-commit.md。

Python:

import paper_preflight

report = paper_preflight.check_paper("paper/")
for ref in report.references:
    print(ref.key, ref.verdict, [f.rule for f in ref.findings])

结果是普通的冻结数据类;请参阅 docs/python-api.md。

实验性功能:查找每条引文对应的原文段落

support 会在每篇被引作品中查找能够支持引用句中论断的段落。它会读取作品文本(arXiv 源文件、开放获取的全文或 PDF,否则读取摘要),并使用一个小型本地模型(HHEM-2.1-open,0.4 GB)为与论断最相关的段落评分。需要安装 support extra。

paper-preflight support path/to/paper --download-model --all

--download-model 会下载模型权重,此操作只需执行一次;--all 还会列出已确认的引文及其引文原句。arxiv:<id> 也可用作目标,与 check 的用法相同。

  • 它会给出什么结果:“confirmed”(已确认),并逐字引用原文段落;或“could not confirm”(无法确认),并说明原因(没有文本、只有摘要,或没有足够相关的段落)。
  • **它绝不会判定引文错误。**在包含 298 条引文的黄金集上,其确认结果中有 93% 是正确的[95% 置信区间:82%–98%];但它只确认约六分之一的真实引文,而低分指向错误引文的情况不到一半。黄金集的标签由 AI 模型而非专家生成;请参阅 evals/results/support.md。
  • **或者让你的 Agent 来判断。**MCP 工具 preflight_cited_passages 会返回每项论断及其引用作品中最相关的段落,让 Agent 按照相同规则进行判断,无需使用该模型。在黄金集的 100 条引文中,Claude Agent 依据这些内容确认了 39% 的真实引文,而 HHEM 的比例为 9%;其确认结果至少都得到了部分支持(标签来自同一模型系列)。
  • **哪些信息会离开你的设备:**仅发送被引作品的标识符以获取其文本;论断在本地评分。

工作原理

  1. 以源文件为准。 它按照 LaTeX 的处理方式读取 LaTeX 项目:遵循注释、\iffalse 块和 \includeonly,在 .aux 文件较新时使用它们;如果有重复的键,则采用第一个定义, 与 BibTeX 的行为一致。
  2. 优先按标识符路由。 DOI 会发送到其注册机构(doi.org 会指出具体机构: Crossref、DataCite 等)。arXiv ID 会发送到 arXiv,并以 DataCite 作为备用;PMID 和 PMCID 会发送到 PubMed,后者也会标记已撤稿的文章。没有标识符的条目会按标题在 dblp 和 Crossref 中搜索;搜索 dblp 时使用其 SPARQL 端点,因为其搜索 API 有机器人验证。 查询哪些来源、如何礼貌地查询: docs/sources.md。
  3. 逐字段匹配并设有保护条件。 比对标题(包括较早版本的 arXiv 标题)、作者 (可容忍 Reiß/Reis 之类的转写差异)、年份和出版物。只有在这些信息足够一致,且没有 其他同样匹配的作品时,才会采用搜索结果;已知的虚假 DOI 副本会被跳过。
  4. 每条参考文献只给出一个判定,具体见检查内容。“未找到”需要 每个必需来源都回答“没有”。
  5. 在本地缓存。 结果保存在 SQLite 文件中,因此重新运行速度很快,且支持 --offline。
设计原则
  • 确认属实,否则不作判断。 遇到速率限制、服务中断或作品未被编入索引时,会给出“无法 确定”,绝不会判为“未找到”。
  • 判定不使用 LLM。 每个判定都来自记录和固定规则,因此相同的记录会得出相同的报告。
  • 措辞中立。 结果只陈述观察到的情况(“在 Crossref、dblp 和 Semantic Scholar 中 未找到,且所有来源均已响应”),绝不指责任何人。
  • 优先本地处理,不收集遥测数据。 只有被引用作品的元数据(DOI、标题、作者)会发送到 上述公共学术 API。你的稿件绝不会离开你的设备。
它永远不会做的事

帮助规避抄袭检测或 AI 文本检测,抓取需要付费或受机器人防护的网站,凭记忆推荐或“补全” 参考文献,或点名羞辱作者。

路线图

  • 下一步:中文文献引用,在发布任何内容前,先用留出的论文进行评估。
  • 减少仍无法判定的参考文献,尤其是没有标识符的灰色文献(报告、论文、手册)。

各版本带来的变化见更新日志;日常进展见 docs/PROGRESS.md(中文)。

贡献

附有可复现 .bib 条目的错误报告最有价值,尤其是误报。请参阅 CONTRIBUTING.md;安全问题请参阅: SECURITY.md。

许可证

MIT。改编代码请参阅 THIRD_PARTY_NOTICES.md。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。