Operational Steps
- 确认输入参数完整
- 执行核心操作(参考本目录下的 scripts/ 或 references/)
- 验证输出符合契约
- 保存结果并报告
Pitfalls
-
-
Verification
-
-
-
-
1. 2. 3.
引用三验 — 参考文献验证
原理
引必可验,无源即删。道有归处,方为真引。 引之所在,文献确然。不读全文,不验引用。 篇篇过堂,无一遗漏。当引则引,不当引者弃。
每条引用必须可验证。验证分三层:
- Phase 1 — 是否存在:DOI验真、假DOI检测、替代文献、PDF分诊
- Phase 2 — 是否得当:读PDF全文、语义比对、错误检测
- Phase 3 — 是否全面:独立检索、遗漏检测、补充建议
IO Contract
- input:
paper_dir: str— 论文管线目录(含01-manuscript、06-references) - output: 三位验证报告 + 修复后的bib
- side_effects: 更新bib、修复DOI、替换虚假文献、生成验证报告
管线流程
输入: paper_dir
↓
Phase 1: 是否存在(DOI验真 → 假DOI检测 → 替代 → PDF Triage)
↓
Phase 2: 是否得当(提取语境 → 读PDF → 语义比对 → 错误检测)
↓
Phase 3: 是否全面(提取主题 → 独立检索 → 对比 → 遗漏检测)
↓
输出: 三位验证报告 + 修复后的bib
Phase 1: 是否存在
启动检查
每次Phase 1开始前必须检查SS API密钥。不带key的SS搜索会静默返回空(429被catch为空列表)。
import os
assert os.environ.get("SEMANTIC_SCHOLAR_API_KEY", ""), (
"SEMANTIC_SCHOLAR_API_KEY not set — SS search will silently fail"
)
数据集引用替换(Phase 0.5)
原则:@misc数据集条目应替换为引入/描述该数据集的论文(@article/@inproceedings)。
原因:论文引用比原始数据集元数据更规范、更可检索、有DOI/PMID可验证、审稿人更认可。
流程:检测@misc → 查UCI/OpenML页→找官方intro paper或SS首引 → 替换为@article → 更新tex引用 → D10a回归检查。
假DOI检测
| 信号 | 含义 | 行动 |
|---|---|---|
| doi.org 404 + Crossref 404 + SS无匹配 | 几乎确定伪造 | 标记FABRICATED,找替代 |
| doi.org 404 + SS找到不同DOI | DOI篡改,论文真实 | 修复DOI+元数据 |
| 无PDF + DOI 404 | 先验假DOI(67%概率) | 不解释为付费墙,验证 |
三验铁律:DOI 404 + Crossref 404 + SS搜不到 = 完全虚构;DOI 404 + SS搜到不同DOI = 篡改。前者需找替代,后者修复。
替代文献决策树
假DOI → 论文不存在
├→ 论文主题是否被其他已有文献覆盖?
│ ├→ 是 → 已有条目可直接引用,删除本条
│ └→ 否 → 需要找替代(同主题高引 + 有公开PDF)
└→ 是否为核心/被审计论文?
├→ 核心 → 替代必须严谨,可能需要多篇
└→ 非核心 → 可删除不影响论证
PDF Triage 分诊
| PDF状态 | 引用重要性 | 行动 |
|---|---|---|
| ✅ 有PDF | 任何 | 进入Phase 2 |
| ❌ 无PDF | 经典/核心 | 多级下载(Tor+Sci-Hub→OA直连→PMC) |
铁律:Agent自行判断重要性,不问用户。依据:①与核心论题的关系;②领域地位;③替代成本。
D10a回归检查
Phase 1修改bib后必须交叉验证tex引用与bib键的一致性。comm -23检查tex引用但bib不存在的键。删除假DOI后,tex中\\cite{deleted_key}变成孤儿引用,D10a骤降。
Phase 2: 是否得当
核心理念
API仅验证"文献存在且标题匹配",无法验证"文献是否支持论文论断"。必须全文阅读PDF。
Step 1: 提取引用语境
grep -n -B2 -A2 '\\\\cite' <paper>.tex > cite_contexts.txt
引用语境是语义审查的核心——必须知道论文"说了什么",才能判断文献是否支持。
Step 2: 逐篇阅读PDF
对每篇参考文献PDF:
- 使用
pymupdf(fitz) 或pdfplumber提取全文 - 记录:标题、作者、年份、摘要、关键段落
- 图片/图表较多的PDF,记录主要方法的文字描述
Step 3: 语义比对
| 维度 | 检查内容 | 标准 |
|---|---|---|
| 标题匹配 | PDF标题 vs bib title | ✅ 一致 |
| 作者匹配 | PDF第一作者 vs bib author | ✅ 一致 |
| 年份匹配 | PDF年份 vs bib year | ✅ 一致 |
| 内容验证 | PDF核心内容支撑论文论断? | ✅ 支撑 |
| 主题一致性 | PDF主题 vs 引用语境 | ✅ 一致 |
| 方法一致性 | PDF方法 vs 引用方法 | ✅ 一致 |
判断级别:
- ✅ 完全恰当:所有维度一致
- ⚠️ 恰当但有技术问题
- ❌ 不恰当:标题/作者/年份/内容不匹配
错误检测
# WITHDRAWN检测
strings ref.pdf | head -100 | grep -qi "withdrawn\|retracted\|this article has been withdrawn"
# PDF标题验证(防Nature/Springer串流)
pdfinfo ref.pdf | grep "Title:"
⚡ 必须验证的陷阱
- WITHDRAWN论文 — PDF存在且DOI真实,但全文以WITHDRAWN开头。有PDF≠该被引用。对每篇PDF做withdrawn检测。
- arXiv ID不防伪 — 真实arXiv ID可能指向不同论文。必须验证arXiv论文的标题/作者是否匹配预期。
- 作者名编造 — DOI真实、标题/年份正确,但作者名被LLM编造。Phase 1"DOI存在"验证通过,Phase 2的PDF第一作者比对才能发现。
- DOI存在但内容无关 — 跨领域DOI。Balloccu2020SMOTE的DOI指向金融论文。Phase 1通过但Phase 2读PDF发现标题无关。
- Nature/Springer串流 — 相邻文章容易串流。SS OA链接和MedData下载均可能串流。必须用pdfinfo验证PDF标题匹配bib标题。
- SS API不带key静默失败 — 必须设置环境变量。
- 速率限制 — Crossref和SS有速率限制,加
time.sleep()。
⚡ API版本陷阱(2026-06-30确认)
- Crossref
format=bibtex已废弃 — 请求返回400 Bad Request,消息: "Parameter format specified but there is no such parameter available on any route"。不能使用?format=bibtex参数。 - 正确做法 — Crossref JSON响应(不指定format)包含完整bib数据:
title、author(含given/family)、container-title、volume、issue、page、DOI、published-*日期。必须手动构建BibTeX。 - Semantic Scholar — 需要
X-API-Keyheader,不带key静默返回空。SS搜索后若找到DOI,用Crossref JSON获取metadata再构建BibTeX。 - BibTeX key解析 — BibTeX key(如
Begoli2018Need)是人为命名,Crossref中不存在对应条目。必须通过author+title搜索SS获取DOI。
⚡ 论文目录操作安全规则
任何破坏性操作(移动、重命名、标准化目录结构)前:
- 必须完整备份整个目录树(至少备份到独立位置如
_archive/) - 验证备份可读取后再执行操作
- 保留旧目录作为
_knowledge_only/或_archive/下的副本 - 符号链接失效是最常见的隐蔽错误(
ln -s后路径断裂但无报错) - 修改后必须逐一验证
paper.tex中的\bibliography{}引用路径存在且可读取 - 验证
state.json中的checksum.compile_status和checksum.bibitems一致性
参考:ref/pdf-reference-extraction.md — 2026-06-30论文目录标准化导致29篇论文references.bib完全丢失的事故记录。
Phase 3: 是否全面
核心
引用不仅要"存在"和"得当",还要完整——该领域高引/经典/最新文献是否都被覆盖?
引用质量五维评分
| 维度 | 权重 | 标准 |
|---|---|---|
| 权威性 | 30% | 影响因子、被引次数、作者声誉 |
| 相关性 | 25% | 与论题的直接关联度 |
| 时效性 | 20% | 最近3年文献 |
| 多样性 | 15% | 多个学派/方法/观点 |
| 完整性 | 10% | 重要文献未引用 ← 核心 |
完整性检测流程
- 从摘要/引言/关键词提取主题词
- 用SS/PubMed检索同主题高引文献(按citationCount排序)
- 对比论文引用列表
- 遗漏分类:
- 🔴 关键:被引>1000 + 主题>80%匹配 + 发表>3年 → 必须补充
- 🟡 建议:被引>100 + 主题>60%匹配 → 推荐补充
- 🔵 可选项:其他
- 生成补充建议
CRISP-DM系列论文遗漏检测
CRISP-DM方法论论文常只引用原始文献(Shearer 2000, Wirth 2000),忽略20年后的综述。必须检查:
- Martinez-Plumed 2021 "CRISP-DM Twenty Years Later" (IEEE TKDE, 332 cit)
- Schroer 2021 "A Systematic Literature Review on Applying CRISP-DM" (Procedia CS, 555 cit)
与quality-gate的关系
本技能对应 quality-gate G5 的三层检查:
- G5形式检查(D10a、DOI、孤儿、僵尸)→ Phase 1输出
- G5实质检查(引用是否得当)→ Phase 2输出
- G5完整性检查(是否遗漏)→ Phase 3输出
- G5最终判定 → 本技能整体输出
使用场景
- 论文投稿前引用质量终审
- 论文修改后的引用重新验证
- 批量引用检查
- 引用质量年度/季度审计
参考文件
references/pima-crispdm-phase2-review-2026-06-23.md— Phase 2完整审计实例(PIMA bib实战)ref/pima-bib-fabrication-analysis.md— 假DOI模式统计与检测规则
版本历史
| 版本 | 日期 | 变更 |
|---|---|---|
| 3.0.0 | 2026-06-27 | 重构为"原理-流程-三阶段"结构,从29KB压缩至~15KB。真实案例和详细陷阱移至ref/目录。 |
| 2.4.0 | 2026-06-23 | 新增Phase 2完整审计参考文件 |
| 2.2.0 | 2026-06-23 | 新增WITHDRAWN检测/arXiv不防伪/DOI跨域/作者编造 |
| 2.0.0 | 2026-06-23 | 合并三技能:reference-verification + citation-appropriateness + 全面性评估 |
契约层 · BOUNDARY
边界:技能功能边界。
契约层 · IO_CONTRACT
输入:请求描述、上下文信息。 输出:执行结果、状态反馈。
验证清单 · VERIFICATION
- L1 参考文献存在性:每个 \cite 键在 .bib/.bbl 中都有对应条目,孤儿引用已列出
- L2 引用得当性:参考文献真实支持论文论断,无张冠李戴(内容主题匹配)
- L3 引用全面性:关键论断有文献支撑,无遗漏应引文献
- 验证报告已生成(phase1/phase2/phase3/overall 四阶段结果)
- 输入论文目录完整(.tex/.bib 存在),缺失时已阻断并说明
Golden 集合 · GOLDEN SET
- Golden Input: 标准输入样本(覆盖正常路径)
- Golden Output: 预期输出(精确匹配或格式校验)
- Golden Error: 预期错误信息(覆盖失败路径)
Golden 集合是测试的单一真理来源。所有改进必须通过 golden 测试。
每项验证必须可执行、可记录、可复现。验证失败时记录原因和修复。
Citation Verification
Genes (策略基因)
紧凑策略表示。条件→策略。需要深度时参考完整文档。
- [CITA-001] 当DOI验证返回404且Crossref与Semantic Scholar均无匹配时 → 判定为完全虚构文献,必须寻找替代文献而非尝试修复
- [CITA-002] 当DOI验证返回404但Semantic Scholar找到不同DOI时 → 判定为DOI篡改,需修复DOI及元数据以匹配真实文献
- [CITA-003] 当参考文献为
@misc类型的数据集条目时 → 应替换为引入或描述该数据集的正式论文(@article/@inproceedings)以提升规范性 - [CITA-004] 当进入Phase 2语义比对阶段时 → 必须提取引用语境并阅读PDF全文,通过比对标题、作者、年份及内容支撑度来验证引用得当性
- [CITA-005] 当PDF存在且DOI真实时 → 必须执行WITHDRAWN检测及PDF标题与BibTeX标题的一致性校验,以排除撤稿论文或下载串流错误
- [CITA-006] 当执行Phase 3全面性检查时 → 需基于主题词独立检索高引文献,对比现有引用列表以识别并补充关键遗漏文献
- [CITA-007] 当修改Bib文件或删除虚假引用后 → 必须执行D10a回归检查,确保Tex文件中的引用键与Bib条目一致,防止产生孤儿引用