关于 paper-preflight
paper-preflight 是面向论文作者的参考文献核验工具,可检查多种文稿与书目格式,并通过学术及软件数据源验证引用。它不使用 LLM 作出判定,不确定时会明确标示原因。
主要功能
- 01检查多种论文与书目格式
- 02比对引用的真实书目记录
- 03识别撤稿及预印本正式发表
- 04检查 DOI、作者、标题和年份
- 05输出带规则编号的核验报告
适用场景
- 01投稿前核验 LaTeX 或 Word 论文
- 02检查独立 BibTeX 或 RIS 书目
- 03查找失效 DOI 与错误元数据
MCP 相关
可选安装 MCP 服务,为编码 Agent 提供论文参考文献核验能力。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
5收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| lang | enum | 否 | 消息语言:英语或中文。en | zh |
| path | string | 否 | LaTeX 项目文件夹或 .tex 文件、Markdown、Quarto 或 Typst 文稿(.md、.qmd、.typ)、Word 文稿(.docx),或参考文献列表(.bib、.bbl、.json、.ris、.yml、.txt、.pdf),路径相对于工作区根目录(默认值:根目录本身)。 |
| offset | integer | 否 | 从哪条检查结果开始:先用 0,然后使用 `next_offset`。 |
| offline | boolean | 否 | true:仅使用本地缓存作答,绝不访问网络(尚未缓存的参考文献将返回为未核验)。 |
| include_info | boolean | 否 | 同时返回信息类检查结果(建议),而不仅仅是错误。 |
| max_findings | integer | 否 | 本次调用返回的检查结果数量(至少为 1)。 |
详细介绍

语言模型会编造参考文献,而复制粘贴的 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 核对 @key | paper-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 | 无法作出判定,报告会说明原因 |
检查结果会指出具体问题:
| 规则 | 检查结果 |
|---|---|
| REF001 | DOI 或 arXiv ID 指向了另一篇论文 |
| REF002 | DOI 或 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..13 | 1.0 candidate, 1st try | 991 | 81 | 76 | 4 | 1 | 0.4 |
| 2026-09-30..10-06 | 0.7.0 | 1,014 | 89 | 79 | 7 | 3 | 0.7 |
| 2026-09-23..29 | 0.6.0 | 786 | 48 | 42 | 6 | 0 | 0.8 |
| 2026-06-24..30 | 0.8.0 | 1,127 | 143 | 132 | 10 | 1 | 0.9 |
| 2026-05-13..19 | 1.0 candidate, 1st try | 1,008 | 133 | 123 | 8 | 2 | 0.8 |
| 2026-05-06..12 | 1.0 candidate, 2nd try | 950 | 133 | 126 | 7 | 0 | 0.7 |
| 2026-04-08..14 | 1.0 candidate, 3rd try | 1,088 | 194 | 181 | 7 | 6 | 0.6 |
| 2026-04-01..07 | 1.0 candidate, 3rd try | 763 | 86 | 80 | 6 | 0 | 0.8 |
| 2026-03-25..31 | 1.0.0 | 809 | 220 | 209 | 8 | 3 | 1.0 |
| 2026-03-18..24 | 1.0.0 | 1,007 | 110 | 105 | 5 | 0 | 0.5 |
| 2026-03-11..17 | 1.0.0 | 898 | 104 | 95 | 8 | 1 | 0.9 |
| 三个 1.0.0 周合计 | 1.0.0 | 2,714 | 434 | 409 | 21 | 4 | 0.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 条幻觉参考文献,每条都经其员工确认。 将论文中的内容原样粘贴为纯文本后,结果如下:
| 参考文献 | 标记 | 无法确定 | 已验证 |
|---|---|---|---|
| 151 | 142 (94%) | 9 | 0 |
- **其中没有一条得到验证。**剩下的 9 条未能判定,包括网页和博客文章、没有任何来源索引的研讨会论文、作者信息为虚构内容且有多篇作品共用同一标题的真实标题,以及两条乱码严重、无法搜索的参考文献。每条及其原因都列在
evals/results/gptzero.md中。 - 这些内容是 GPTZero 自己的工具发现的,因此属于搜索能够找到的幻觉内容;对各种幻觉的召回率都更低(见下文 HALLMARK)。
HALLMARK
HALLMARK(v1.2.3)是一个包含真实和虚构 BibTeX 条目的公开基准测试。伪造统计标识符错误、找不到对应作品且没有共同作者的情况;任何问题还统计作者、标题、年份或发表 venue 错误的情况。
| Split | Mode | Precision | Recall | False-positive rate | Coverage |
|---|---|---|---|---|---|
test_public: 831 entries, never used during development | Any issue | 98.5% | 93.5% | 1.9% | 97.7% |
| Fabrication | 99.0% | 50.2% | 0.6% | 97.7% | |
dev_public: 1,119 entries, used during development | Any issue | 97.7% | 94.3% | 2.1% | 98.9% |
| Fabrication | 98.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 条参考文献,并公布了五种工具的标记结果。对同一批参考文献使用其标签,结果如下:
| Tool | Precision [95% CI] | Recall | False flags per 100 correct references |
|---|---|---|---|
| CheckIfExist | 47.7% [36.0%, 59.6%] | 93.9% | 47.9 |
| HalluCiteChecker | 47.4% [32.5%, 62.7%] | 54.5% | 28.2 |
| Hallucinator | 50.9% [38.3%, 63.4%] | 87.9% | 39.4 |
| HalRef | 31.2% [21.9%, 42.2%] | 72.7% | 74.6 |
| RefChecker | 47.1% [35.7%, 58.8%] | 97.0% | 50.7 |
| paper-preflight | 72.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%;其确认结果至少都得到了部分支持(标签来自同一模型系列)。 - **哪些信息会离开你的设备:**仅发送被引作品的标识符以获取其文本;论断在本地评分。
工作原理
- 以源文件为准。 它按照 LaTeX 的处理方式读取 LaTeX 项目:遵循注释、
\iffalse块和\includeonly,在.aux文件较新时使用它们;如果有重复的键,则采用第一个定义, 与 BibTeX 的行为一致。 - 优先按标识符路由。 DOI 会发送到其注册机构(doi.org 会指出具体机构: Crossref、DataCite 等)。arXiv ID 会发送到 arXiv,并以 DataCite 作为备用;PMID 和 PMCID 会发送到 PubMed,后者也会标记已撤稿的文章。没有标识符的条目会按标题在 dblp 和 Crossref 中搜索;搜索 dblp 时使用其 SPARQL 端点,因为其搜索 API 有机器人验证。 查询哪些来源、如何礼貌地查询: docs/sources.md。
- 逐字段匹配并设有保护条件。 比对标题(包括较早版本的 arXiv 标题)、作者 (可容忍 Reiß/Reis 之类的转写差异)、年份和出版物。只有在这些信息足够一致,且没有 其他同样匹配的作品时,才会采用搜索结果;已知的虚假 DOI 副本会被跳过。
- 每条参考文献只给出一个判定,具体见检查内容。“未找到”需要 每个必需来源都回答“没有”。
- 在本地缓存。 结果保存在 SQLite 文件中,因此重新运行速度很快,且支持
--offline。
设计原则
- 确认属实,否则不作判断。 遇到速率限制、服务中断或作品未被编入索引时,会给出“无法 确定”,绝不会判为“未找到”。
- 判定不使用 LLM。 每个判定都来自记录和固定规则,因此相同的记录会得出相同的报告。
- 措辞中立。 结果只陈述观察到的情况(“在 Crossref、dblp 和 Semantic Scholar 中 未找到,且所有来源均已响应”),绝不指责任何人。
- 优先本地处理,不收集遥测数据。 只有被引用作品的元数据(DOI、标题、作者)会发送到 上述公共学术 API。你的稿件绝不会离开你的设备。
它永远不会做的事
帮助规避抄袭检测或 AI 文本检测,抓取需要付费或受机器人防护的网站,凭记忆推荐或“补全” 参考文献,或点名羞辱作者。
路线图
- 下一步:中文文献引用,在发布任何内容前,先用留出的论文进行评估。
- 减少仍无法判定的参考文献,尤其是没有标识符的灰色文献(报告、论文、手册)。
各版本带来的变化见更新日志;日常进展见 docs/PROGRESS.md(中文)。
贡献
附有可复现 .bib 条目的错误报告最有价值,尤其是误报。请参阅
CONTRIBUTING.md;安全问题请参阅:
SECURITY.md。
许可证
MIT。改编代码请参阅 THIRD_PARTY_NOTICES.md。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。