mcpField
A
alterlab-citation-verifier

alterlab-citation-verifier

github.com/alterlab-ieu生产力7865 次安装5 周前更新
代码仓库

关于 alterlab-citation-verifier

alterlab-citation-verifier 使用公开学术 API 检查参考文献条目,核实作品及标识符是否存在且匹配。研究者可用其脚本审计文献;脚本提供可复现的证据型判定,并标记撤稿信息。

主要功能

  1. 01解析 BibTeX、DOI、arXiv 和自由格式文献
  2. 02解析标识符并搜索学术记录
  3. 03匹配标题、作者和发表年份
  4. 04标记撤稿及关注声明
  5. 05输出单条文献和整份书目的判定

适用场景

  1. 01检查书目中是否有伪造文献
  2. 02确认 DOI 或 arXiv ID 指向所引作品
  3. 03查找参考文献元数据不一致
  4. 04检查匹配作品的撤稿通知

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/alterlab-ieu/alterlab-academic-skills --skill alterlab-citation-verifier

安装后在 Claude Code 中输入/alterlab-citation-verifier确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

commands/
cite-check.md
evals/
evals.json
evals/fixtures/
bibliography_24_entries.md
examples/
caught_hallucination_walkthrough.md
scripts/
claim_faithfulness.py
verify_citations.py

详细介绍

引用验证器——通过公开学术 API 验证参考文献是否存在

这是用于核实文献是否存在的核心技能:给定任意常见格式的参考文献列表,它会查询公开学术 API,逐条证明每篇文献是否确实存在,然后将每项结果映射到标准的 AlterLab 引用幻觉分类体系中。它是由 LLM 驱动的 integrity_verification_agent 的确定性、基于网络的补充工具——该 Agent 使用 WebSearch 和判断,而此技能使用权威 API 记录和可复现的 Python 脚本,因此每个判定都有检索到的记录作为依据,并且相同的输入和来源响应会得出相同的判定结果。

请使用脚本验证参考文献,而不要凭记忆判断。根据模型「记得」的内容核对引用,会共享导致幻觉的训练数据,因此,感觉合理的伪造参考文献可能蒙混过关;只有外部记录才能确定其是否存在。

快速开始

Verify the citations in references.bib
Check whether these DOIs resolve to the papers I cited
Audit my bibliography for fabricated / hallucinated references
Does this reference list contain any fake citations or retractions?

→ 使用 scripts/verify_citations.py 检查参考文献列表,读取 JSON,然后按严重程度分组并呈现判定表。如果网络或某个来源不可用,请明确说明离线/降级状态。

何时使用此技能

  • 「验证/检查/审计我的引用或参考文献是否存在」
  • 「AI 是否幻觉出了这些参考文献?」/「这个 DOI 是伪造的吗?」
  • 「这些 DOI 是否能解析到我引用的论文?」
  • 「检查这份参考文献列表中是否有撤稿论文」
  • 「这个来源是否确实支持我引用它所支撑的句子?」(SH,摘要级)
  • 需要可复现、可脚本化且提供明确离线模式的存在性检查
不适用的场景
场景改用
撰写或修改论文正文(其引用检查模式会格式化引用)alterlab-paper-writer
查找论文、提取元数据,或为新来源生成 BibTeXalterlab-citation-mgmt
文档或参考文献列表中的失效或重定向超链接(链接失效)alterlab-link-health
完整的评审前/评审后完整性检查(引用上下文、数据、原创性)alterlab-research-pipeline
对稿件进行全面同行评审并作出编辑决定alterlab-paper-reviewer

来源质量或掠夺性出版平台的评级属于 alterlab-deep-research (source_verification_agent)。如需在 Claude Code 中审计整篇稿件,并由独立 Agent 重新核查每项标记,请提供打包的 /alterlab-workflows:citation-audit 工作流(alterlab-research-workflows,约 10–40 个 Agent),该工作流会大规模运行此技能的检查。


功能说明

对于每条参考文献,脚本会:

  1. 解析输入(自动检测 BibTeX / 纯 DOI 或 arXiv 列表 / 自由格式参考文献,包括每行一条参考文献的粘贴内容),提取标题、作者、年份、发表场所、DOI 和 arXiv ID。仅包含 DOI 的完整参考文献仍会按自由格式处理,因此其标题和作者会保留,用于 Identifier Hijacking 检查。
  2. 解析标识符——在提供 DOI 或 arXiv ID 时直接查询被引用的标识符,并通过 doi.org Handle API 查询 DOI 是否已在任何机构注册。
  3. 按标题 + 第一作者 + 年份搜索,在各数据源中进行后备搜索。
  4. 进行模糊匹配——对被引用的标题进行比较(difflib SequenceMatcher 比率,默认阈值为 0.70;如果主标题与去掉副标题后存储的记录几乎相同,也视为匹配),并计算作者姓氏重合度。在返回的记录中,按标题、作者、年份的顺序保留匹配项,因此同名但作者不同的论文或另一个版本不会胜出。
  5. 标记撤稿——检查匹配作品的 Crossref updated-by / update-to 通知中是否有撤稿、撤回或移除类型(由出版商发出,或 source: retraction-watch;自 2025 年起,Crossref 会在其 REST API 中提供 Retraction Watch 数据库内容)。同时检查 OpenAlex 的 is_retracted。关注声明会单独标记。
  6. 为每条记录生成判定结果,并映射至下方分类,同时提供显示各数据源响应情况的 source_status 映射,以及仓库级别的 summary.verdict(PASS / PASS_WITH_CONDITIONS / FAIL / UNVERIFIED)。
数据源(无需密钥;截至 2026-09 的现状)
数据源端点用途访问说明
Crossrefapi.crossref.org/worksDOI 解析、书目搜索、撤稿通知mailto 会将请求路由至礼貌请求池(10 req/s,最多 3 个并发请求)
OpenAlexapi.openalex.org/worksDOI 查询 + 标题搜索、is_retracted自 2026 年 2 月起会忽略 mailto。DOI 查询免费;搜索使用按 IP 共享的每日额度,无密钥时如此(免费密钥可将额度提升至 10 倍 — 设置 OPENALEX_API_KEY)
Semantic Scholarapi.semanticscholar.org/graph/v1DOI/arXiv 解析、标题搜索无密钥请求池由多个用户共享,且经常返回 429;S2_API_KEY 可获得专属的 1 req/s 配额
arXivexport.arxiv.org/api/queryarXiv ID 解析、预印本标题搜索每次调用间隔需 ≥ 3 秒(脚本会限速)
doi.org Handle APIdoi.org/api/handles/<doi>DOI 是否已在任何机构注册(Crossref、DataCite、mEDRA……)?DOI 是否存在的权威数据源

密钥为可选项,从环境中读取,并通过请求头发送,绝不会写入报告(报告只记录是否提供了密钥)。数据源发生错误(速率限制、5xx)时,会在 source_status 中记录,且绝不会被视为作品不存在的证据。

此技能回答的是**“被引用的作品是否存在,其标识符是否指向该作品?”**仅凭 API 元数据无法确定是否存在 Semantic Hallucination(来源是否支持该主张);scripts/claim_faithfulness.py 可进行摘要级 SH 初步筛查(见下文),完整的全文主张验证则由研究流水线的 claim_verification_protocol(Phase E)负责。

判定分类(与规范的五类型分类保持一致)

代码和定义与 alterlab-research-pipeline/agents/integrity_verification_agent.md 相同(GPTZero × NeurIPS 2025;Ansari,2026)。严重程度采用 Integrity Report 架构中使用的同一 SERIOUS / MEDIUM / MINOR 等级。

代码名称严重程度脚本触发条件
verified—(存在且匹配)NONE标题相似度 >= 阈值,且作者重合情况正常,且至少有 1 个权威来源确认年份一致
TF完全伪造SERIOUS引用的 DOI 未在 doi.org 注册,或引用的 arXiv ID 在 arXiv 上不存在,且没有相近的标题匹配;或者(无标识符时)Crossref 和 OpenAlex 或 Semantic Scholar 均有响应,但没有记录与标题和作者匹配
PAC部分属性错误MEDIUM找到条目,但至少有 1 个元数据字段不一致(年份、作者重合度 < 50%、引用的标识符未解析到该条目,或标题严重失真且最相近的记录作者相同——可能是拼接而成)
IH标识符劫持SERIOUS引用的 DOI/arXiv ID 已解析(method=id),但解析所得记录的标题无关(相似度 < 阈值)
PH占位符幻觉SERIOUS未解析的模板/占位符([CITATION NEEDED]、\cite{}、et al., YYYY、TODO、forthcoming、in press)——在联网前捕获
SH语义幻觉SERIOUS条目已解析,但无法支持其论断——此处仅供参考;通过 claim_faithfulness.py / Phase E 断言
unverified—(无法核查)MEDIUM离线、作出判定所需的来源出错,或已注册的 DOI 未被任何索引返回。绝不视为通过。

只要 Crossref 或 OpenAlex 将匹配到的作品标记为已撤稿,就会附加 RETRACTED 标记(并将严重程度提升至 SERIOUS),无论存在性判定结果如何;无关的最相近结果绝不会将其标记传递给引用条目。

TF 是严重指控,因此脚本只会在有权威证据时才作出此判定。如果作出判定所需的来源遭遇速率限制或不可用,该条目将标记为 unverified,并附上原因和 source_status,随后进入下方的回退处理。

仓库级判定
  • PASS — 每个条目均为 verified,且没有 SERIOUS/MEDIUM 标记。
  • PASS_WITH_CONDITIONS — 仅存在 PAC / MEDIUM 元数据问题(可修复),且已核查每个条目。
  • FAIL — 存在任何 SERIOUS 判定(TF / IH / PH / 撤稿)。
  • UNVERIFIED — 未发现 SERIOUS 问题,但至少有一个条目无法核查(例如离线运行或来源受到速率限制)。这不代表通过——请在联网或提供 API 密钥后重新运行,或手动处理这些条目。

流程(如何运行)

1. 定位或获取参考文献列表

支持以下任意格式:.bib 文件、DOI/arXiv ID 的 .txt 列表、粘贴的参考文献列表或内联文本。脚本会自动检测格式;如果检测错误,可使用 --format bibtex|doi|freeform 覆盖。

2. 运行验证器
uv run python skills/core/alterlab-citation-verifier/scripts/verify_citations.py \
    path/to/references.bib \
    --mailto <contact-email> \
    --threshold 0.70 \
    --out citation_report.json
  • path/to/references.bib 也可以是 -(stdin)或内联文本。
  • --threshold 用于调整标题的模糊匹配比例(0..1;默认值为 0.70)。
  • --offline 会跳过网络,并有意输出 unverified 判定。
  • 省略 --out 可将 JSON 报告打印到 stdout。
  • 可选:处理大型参考文献列表前,运行 export OPENALEX_API_KEY=…(从 openalex.org/settings/api 获取免费密钥) 和/或设置 S2_API_KEY=… ——不使用密钥的 OpenAlex 搜索共享较小的每日 IP 配额,而不使用密钥的 Semantic Scholar 资源池较为繁忙。

如果已安装 requests,脚本会使用它;否则会使用 Python 标准库(urllib),因此在没有额外依赖的基础 uv 环境中也能运行。每个条目预计耗时约 3–10 秒:arXiv 请求之间间隔 3 秒,并在遇到速率限制时退避。

3. 读取 JSON 并报告

解析 summary.verdict 和每个条目的 verdict 代码。呈现:

  1. 总体判定和计数(verdict_counts、severity_counts)。
  2. 所有非 verified 条目的表格,包含代码、严重性和 detail。
  3. 对每个 TF / IH / PH:引用被判定的条目并说明证据 (例如,“DOI 10.x 解析到一篇无关论文,标题为‘…’”,“DOI 未在 doi.org 注册”)。
  4. 突出显示任何 RETRACTED / EXPRESSION_OF_CONCERN 标记。
  5. 对于 unverified 条目:说明哪些来源失败了(source_status),转述 manual_instructions 和任何 summary.notes(例如,OpenAlex HTTP 429 表示按 IP 限制的免密额度已用完——免费的 OPENALEX_API_KEY 可以解决此问题),并运行以下回退流程。
4. 修正方向
  • TF / PH → 必须删除或替换该参考文献;它不存在。
  • IH → DOI/arXiv ID 错误;查找并替换为正确的标识符。
  • PAC → 修正 detail 中指出的具体元数据字段;如果可能是拼接内容,必须先找出真实来源,才能保留。
  • RETRACTED → 提醒作者;引用撤稿通知或删除该来源。

优雅降级与回退流程

失败绝不会被忽略并误判为通过:

  • DNS/连接失败会引发 NetworkUnavailable;该条目会变为 unverified,并填充 manual_instructions 字段。
  • 来源被限流或发生故障时,会记录在 source_status 中;如果用于判定的必要来源没有响应,该条目应为 unverified,而不是 TF。
  • --offline 会立即将所有需要联网的条目标记为 unverified(占位符仍会在本地被识别为 PH)。
  • 如果有条目为 unverified,且未发现任何 SERIOUS 问题,仓库级判定将变为 UNVERIFIED。

对于每个 unverified 条目,如果可能,请在恢复网络连接或提供密钥后重新运行;否则,如果插件提供 crossref / openalex MCP 工具,请使用这些工具查询(设置方法:skills/core/references 下的 mcp_setup.md),然后使用 WebSearch 回退,执行三个不同的查询(带引号的完整标题;标题 + 第一作者;第一作者 + 期刊/会议 + 年份);如果有 DOI,则打开 https://doi.org/<DOI>。如果找到记录,请报告其支持的判定,并注明该结果来自回退查询。如果没有找到任何内容,则将该条目分类为 TF(NOT_FOUND)。不存在“难以验证”这种结果:本技能旨在处理的 Lin 等人的拼接论文曾连续通过三轮完整性检查,正是因为它被搁置在灰色地带,从未进行搜索。


主张忠实度(SH)— scripts/claim_faithfulness.py

存在性只是验证门槛的一半;引用真实论文来支持论文从未提出的主张(即“弗兰肯斯坦”模式),仍能通过所有存在性检查。对于(主张,DOI)对,claim_faithfulness.py 会获取被引用论文的摘要(先查 Crossref,再查 OpenAlex),并返回 support / contradict / unsupported:

uv run python skills/core/alterlab-citation-verifier/scripts/claim_faithfulness.py \
    --claim "<the sentence as written>" --doi <doi>
uv run python .../claim_faithfulness.py --input pairs.json --json        # batch
uv run python .../claim_faithfulness.py --input pairs.json --tier llm --json
  • 默认的 heuristic 层级采用词汇匹配,并会有意选择弃权(unsupported),而不是猜测为 support;它无法识别角色颠倒或错误数字。llm 层级会调用由 ALTERLAB_MODEL 设置的模型(参见 shared/model_env.md);如果 claude CLI 不可用,则会回退到启发式方法,并标记这一情况。
  • 它只读取摘要(abstract_only: true)。unsupported 表示摘要未能证实该主张——这是未涵盖,而非反驳。将 contradict 报告为 SH;对重要的 unsupported 主张,应进行全文核查。
  • 始终分别报告存在性和忠实度:“引用真实存在”和“引用支持此句”是两种不同的结论。

输出格式(摘录)

{
  "tool": "alterlab-citation-verifier/verify_citations.py",
  "version": "1.1.0",
  "summary": {
    "total": 2,
    "verdict": "FAIL",
    "verdict_counts": {"verified": 1, "TF": 1, "PAC": 0, "IH": 0, "PH": 0, "SH": 0, "unverified": 0},
    "severity_counts": {"SERIOUS": 1, "MEDIUM": 0, "MINOR": 0},
    "citation_integrity_score": 0.5,
    "fabrication_risk_score": 0.5,
    "retracted": 0,
    "source_errors": {"openalex": 1},
    "notes": ["OpenAlex rate limit: the keyless daily budget shared by this IP is spent ..."]
  },
  "entries": [
    {"ref_id": "walters2023", "verdict": "verified", "severity": "NONE",
     "title_ratio": 1.0, "author_overlap": 1.0, "matches": [{"source": "crossref"}],
     "source_status": {"crossref": "record", "openalex": "record", "semanticscholar": "record", "arxiv": "no_record"}},
    {"ref_id": "ghostpaper2021", "verdict": "TF", "severity": "SERIOUS",
     "detail": "DOI 10.xxxx/... is not registered with any DOI agency (doi.org Handle API)..."}
  ]
}

citation_integrity_score 和 fabrication_risk_score(均为 0..1)与 Integrity Report 架构中同名字段相对应,因此该报告可以直接接入 alterlab-research-pipeline 的完整性门禁。

报告前自检

  • 本次运行是否访问了网络,哪些来源作出了响应?如果条目为 unverified,请从 source_status 中指出失效的来源;不要暗示核验通过。
  • 是否存在任何 RETRACTED 标记?即使条目本身为 verified,也要指出这些标记。
  • 是否有条目得分为 IH?请确认详情显示的是通过 ID 解析确认的不匹配, 而不是通过宽泛的标题搜索偶然匹配(脚本会强制区分这两种情况)。
  • 总体结论是否与各条目的代码一致(任何 SERIOUS → FAIL; 存在任何 unverified 且没有 SERIOUS → UNVERIFIED)?
  • 每个 unverified 条目是否都使用了 WebSearch 作为备用方案,并得出了最终结论?

参考资料

  • alterlab-research-pipeline/agents/integrity_verification_agent.md — 权威的 五类型分类法、复合欺骗模式,以及本技能旨在捕捉的 Lin 等人(2020) 拼接案例研究。
  • alterlab-research-pipeline/references/claim_verification_protocol.md — E 阶段 全文主张与来源核验(超出此处摘要级 SH 初筛的范围)。
  • shared/schemas/integrity_report.schema.json — 完整性报告的结构;本技能会复现其中的 citation_integrity_score / fabrication_risk_score。
  • examples/caught_hallucination_walkthrough.md — 对真实拼接案例进行端到端运行的示例。
  • Walters, W. H., & Wilder, E. I. (2023). ChatGPT 生成的参考文献引文中的伪造和错误。Scientific Reports, 13, 14045。 https://doi.org/10.1038/s41598-023-41032-5
  • Ansari, S. (2026). 顶级同行评审中的复合欺骗:NeurIPS 2025 中 100 条伪造引文的失效模式分类法 (arXiv:2602.05930)。 https://arxiv.org/abs/2602.05930
  • Rittman, M. (2025, January 29). Retraction Watch 撤稿信息现已纳入 Crossref API [博客文章]。Crossref。 https://www.crossref.org/blog/retraction-watch-retractions-now-in-the-crossref-api/

属于 AlterLab Academic Skills 套件的一部分。

评论

支持 Markdown