关于 alterlab-citation-verifier
alterlab-citation-verifier 使用公开学术 API 检查参考文献条目,核实作品及标识符是否存在且匹配。研究者可用其脚本审计文献;脚本提供可复现的证据型判定,并标记撤稿信息。
主要功能
- 01解析 BibTeX、DOI、arXiv 和自由格式文献
- 02解析标识符并搜索学术记录
- 03匹配标题、作者和发表年份
- 04标记撤稿及关注声明
- 05输出单条文献和整份书目的判定
适用场景
- 01检查书目中是否有伪造文献
- 02确认 DOI 或 arXiv ID 指向所引作品
- 03查找参考文献元数据不一致
- 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.mdevals/evals.jsonevals/fixtures/bibliography_24_entries.mdexamples/caught_hallucination_walkthrough.mdscripts/claim_faithfulness.pyverify_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 |
| 查找论文、提取元数据,或为新来源生成 BibTeX | alterlab-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),该工作流会大规模运行此技能的检查。
功能说明
对于每条参考文献,脚本会:
- 解析输入(自动检测 BibTeX / 纯 DOI 或 arXiv 列表 / 自由格式参考文献,包括每行一条参考文献的粘贴内容),提取标题、作者、年份、发表场所、DOI 和 arXiv ID。仅包含 DOI 的完整参考文献仍会按自由格式处理,因此其标题和作者会保留,用于 Identifier Hijacking 检查。
- 解析标识符——在提供 DOI 或 arXiv ID 时直接查询被引用的标识符,并通过 doi.org Handle API 查询 DOI 是否已在任何机构注册。
- 按标题 + 第一作者 + 年份搜索,在各数据源中进行后备搜索。
- 进行模糊匹配——对被引用的标题进行比较(difflib
SequenceMatcher比率,默认阈值为 0.70;如果主标题与去掉副标题后存储的记录几乎相同,也视为匹配),并计算作者姓氏重合度。在返回的记录中,按标题、作者、年份的顺序保留匹配项,因此同名但作者不同的论文或另一个版本不会胜出。 - 标记撤稿——检查匹配作品的 Crossref
updated-by/update-to通知中是否有撤稿、撤回或移除类型(由出版商发出,或source: retraction-watch;自 2025 年起,Crossref 会在其 REST API 中提供 Retraction Watch 数据库内容)。同时检查 OpenAlex 的is_retracted。关注声明会单独标记。 - 为每条记录生成判定结果,并映射至下方分类,同时提供显示各数据源响应情况的
source_status映射,以及仓库级别的summary.verdict(PASS / PASS_WITH_CONDITIONS / FAIL / UNVERIFIED)。
数据源(无需密钥;截至 2026-09 的现状)
| 数据源 | 端点 | 用途 | 访问说明 |
|---|---|---|---|
| Crossref | api.crossref.org/works | DOI 解析、书目搜索、撤稿通知 | mailto 会将请求路由至礼貌请求池(10 req/s,最多 3 个并发请求) |
| OpenAlex | api.openalex.org/works | DOI 查询 + 标题搜索、is_retracted | 自 2026 年 2 月起会忽略 mailto。DOI 查询免费;搜索使用按 IP 共享的每日额度,无密钥时如此(免费密钥可将额度提升至 10 倍 — 设置 OPENALEX_API_KEY) |
| Semantic Scholar | api.semanticscholar.org/graph/v1 | DOI/arXiv 解析、标题搜索 | 无密钥请求池由多个用户共享,且经常返回 429;S2_API_KEY 可获得专属的 1 req/s 配额 |
| arXiv | export.arxiv.org/api/query | arXiv ID 解析、预印本标题搜索 | 每次调用间隔需 ≥ 3 秒(脚本会限速) |
| doi.org Handle API | doi.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 代码。呈现:
- 总体判定和计数(
verdict_counts、severity_counts)。 - 所有非
verified条目的表格,包含代码、严重性和detail。 - 对每个
TF/IH/PH:引用被判定的条目并说明证据 (例如,“DOI 10.x 解析到一篇无关论文,标题为‘…’”,“DOI 未在 doi.org 注册”)。 - 突出显示任何
RETRACTED/EXPRESSION_OF_CONCERN标记。 - 对于
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);如果claudeCLI 不可用,则会回退到启发式方法,并标记这一情况。 - 它只读取摘要(
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 套件的一部分。