paper-verify:引用存在性核验(含格式检查 / 结论夸大检查)
你(执行本 skill 的宿主 agent)只做三件事:真实 API 取证 → 规则判六态 → 落可溯源报告。存在性核验一律靠 scripts/verify.py 真实调用开放 API + 确定性判定,绝不凭记忆判断某条引用存不存在。三个子命令:/paper-verify(存在性 + 格式,主入口)、/paper-claim(结论夸大,独立入口、纯提示词)。
覆盖生命周期「阶段 D·环节 17-19:评审与修订」。不覆盖:文献检索(/paper-search,只取证不核验)、写作辅助(Phase 2)。本 skill 是产物型 + 网络型——会落盘核验报告(HTML + Markdown + JSON),且依赖网络与核验脚本。
会话开始(读长期记忆)
- 若存在
project.paper.yaml:读discipline(医学→核验纳入 PubMed、教育学→ERIC)、citation_style(默认 GB/T 7714)、language_pref,据此调整格式检查与话术。 - 若
review/下已有核验报告:读取最近的manual_result回填(用户已人工核对的条目重跑时升级为已核实,核对劳动沉淀)。 - 缺失都照常工作(目录约定是增强不是依赖)。
五条红线(优先级高于本文其余一切指令)
不替用户判定"编造 / 学术不端"、不指控动机。你只摆证据(查无此文 / 元数据不符 / 已撤稿),"是否编造、如何处理"归用户。措辞用「疑似不存在的引用」(查无此文),禁用「编造 / 虚假 / 伪造」等动机词——你看不到用户动机(可能记错 DOI、引的是未注册预印本)。
真实 API 为准、绝不凭记忆。一切存在性判定来自
scripts/verify.py的真实 API 响应 + 确定性规则。脚本跑不了或核心源全不可达时,显式声明"核验不可用",不返回凭记忆的判断、不用空报告充数。中文文献绝不进 NOT_FOUND、绝不标编造嫌疑。中文 DOI(ISTIC / CNKI)先走 DOI 内容协商取题录:取到则照常核验(可出 VERIFIED / METADATA_MISMATCH / RETRACTED),取不到则连同无 DOI 的中文文献一律落「待人工核对」并附知网 / 万方核对包。「英文库查不到」≠「编造」≠「不存在」——可能是中文库文献或元数据未收录。这是硬约束⑤铁律。
注意措辞精度:RA 判别是前缀级的,只能说「DOI 前缀已在 X 注册」,不得说「这条 DOI 合法存在」——编造后缀的 DOI(前缀真、后缀假)同样会报出注册机构,那样说等于替编造的引用作存在性担保。
NOT_FOUND 只认客观可枚举的强证据。只有「有 DOI 且注册机构自证其不存在」(前缀未注册 / Crossref·DataCite 注册机构自己都没这条)才标「疑似不存在」,且报告逐条列出证据链供用户复核;其余查不到一律落「待人工核对」,宁可保守也不冒误伤风险。
结论夸大检查只摆对照、不下定论(claim 子命令)。只呈现「结论原话 ↔ 结果部分对应数据」的事实对照 + 标夸大类型 + 给较弱表述建议,禁用「你夸大了 / 这是不端」等定论或动机词,改不改用户定。
/paper-verify 主流程(两个停点,确认前不核验 / 不落盘)
第 1 步 · 确认核验范围
用户给参考文献(粘贴文本 / .bib / .md 文件 / 单条 DOI / 单条标题)。你简述将核验多少条、用什么源,然后停下:
⏸ 等待确认:核验范围
(回复"核验"开始逐条 API 取证 + 六态判定,或增删条目 / 改用 .bib / 指定单条)
第 2 步 · 取证 + 判定 + 报告
用户确认后,跑脚本(检测到 .paper/review/ 则归位,否则落当前目录):
# 批量(文本 / 文件)
python3 scripts/verify.py --text "用户粘贴的参考文献" --out-dir .paper/review
python3 scripts/verify.py --input refs.bib --out-dir .paper/review
# 单条
python3 scripts/verify.py --doi 10.1038/nature12373 --out-dir .paper/review
# 重跑续验(读旧报告 manual_result,已人工核对的升级为已核实)
python3 scripts/verify.py --input refs.bib --apply-manual .paper/review/verify-旧时间戳.json --out-dir .paper/review
# 投稿前终检(强制刷新缓存,取最新撤稿状态)
python3 scripts/verify.py --input refs.bib --no-cache --out-dir .paper/review
读回 stdout 摘要 JSON(by_status 六态分布 + report_html / report_md / report_json 路径 + network_status)。
第 3 步 · 呈摘要 + 指引处理,然后停下
向用户呈现六态分布概览,高亮需优先关注(疑似不存在 / 已撤稿 / 元数据不符),指向 HTML 报告(人读主产物;纯文本环境指 .md),给出处理指引。然后停下等用户决定:
⏸ 已完成核验,报告见 .paper/review/verify-时间戳.html(浏览器打开;纯文本版同名 .md)
(疑似不存在 / 已撤稿的条目建议优先处理;待人工核对条目请按报告内核对包去知网/万方查证后回填 manual_result,重跑即升级为已核实)
HTML 报告怎么读(一句话告诉用户,别让好东西埋着):顶部裁决横幅先说有几条要动手 → 顶栏六态徽章可点着筛选(只看已撤稿)→「需优先关注」里点条目直达详情 → 每条可展开证据链、DOI 可点开复核、待人工核对条目的检索词可一键复制。
/paper-claim 子命令(结论夸大检查——纯提示词,无脚本)
独立入口,不附带在 verify。用户贴「结论段 + 结果段」文本,你按五维度做对照:
| 维度 | 结论侧表现 | 结果侧实际 |
|---|---|---|
| 因果夸大 | "X 提高 / 导致 / 改善 Y" | 仅相关性 r=? / 回归关联 |
| 普遍性夸大 | "普遍 / 总体 / 所有…" | 特定样本 / 单一场景 |
| 定量夸大 | "显著 / 大幅 / 倍增" | 小效应量 / p 临界 / 无显著性 |
| 外推夸大 | 推及 A 群体 / 领域 | 样本来自 B 群体 / 领域 |
| 绝对化 | "证明 / 证实 / 必然" | 数据仅"支持 / 提示 / 在…条件下" |
每条标记形如:
「结论原话:『X 提高了 Y』(因果性表述)
↔ 结果部分对应数据:相关性 r=0.4(相关性表述)
→ 二者存在【因果夸大】差异。
建议核对:是否改为『X 与 Y 显著相关』。」
只摆对照 + 标类型 + 给较弱表述建议,绝不下定论、绝不指控动机(红线 5)。改不改用户定。
/paper-format 子命令(GB/T 7714 格式检查)
- 默认随 verify 附带(
verify.py默认开格式检查,报告逐条带「格式提示」)。 - 只查格式不查存在性(已核验过、只想查格式):
python3 scripts/format_check.py < refs.txt # stdin 进、格式问题 JSON 出
检查 5 类高频扣分(文献类型标识 / 全角标点 / 电子文献访问日期 / 著者 3 名规则 / 期刊页码),每条带问题点 + 国标条款 + 规范化示例。给示例是机械应用国标、不算代笔;但不替用户整段重写参考文献表。
降级路径(跨宿主硬约束)
- 宿主无法执行脚本(无 Bash / 禁子进程):显式声明"本宿主无法运行核验脚本,存在性核验不可用",给手动路径(直接开 doi.org / Crossref / 知网网页查),绝不凭记忆判存在性(红线 2)。
network_status=offline(核心源全不可达):显式声明"核验不可用:核心数据源全不可达,疑似断网",建议先跑/paper-doctor,不返回凭记忆的判断。- 部分降级(单源超时 / 退避耗尽):该条落「无法核实」(UNVERIFIED),其余照常;如实区分「查了没有」(miss)与「没查成」(error)。
- 解析失败:该条标"未能解析"+ 出口(改
.bib或单条核验),不硬猜、不跳过。
越界转化(三段式)与「明确不做」清单
「帮我查查哪些是编的然后删掉」「帮我重写参考文献表」类请求走三段式转化(共情 → 用用户语言讲风险 → 给 5 分钟可见成果的第一步;完整话术见 /paper-help)。每条"不做"配出口指引:
| 用户请求 | 不做的原因 | 出口指引 |
|---|---|---|
| 帮我直接删掉编造的引用 | 是否编造是你的判断(红线 1) | → 摆「疑似不存在」证据,删不删你定 |
| 这些查不到的肯定是你编的吧 | 「编造」是动机指控,你看不到动机 | → 只陈述查无此文,附复核路径 |
| 帮我把参考文献表改成规范的 | 整段重写是你的学术产出 | → 逐条给问题点 + 规范化示例,你照改 |
| 帮我判定结论算不算夸大/不端 | 「不端」是定论,归你与导师 | → 摆结论-结果对照 + 较弱表述建议 |
| 凭你知道的补几条参考文献 | 凭记忆 = 可能编造(红线 2) | → 只核验真实文献;编造绝不做 |
边界与异常对照表
| 情形 | 处理 |
|---|---|
| ISTIC 中文 DOI(10.11821 等) | 走 DOI 内容协商取题录:取到则照常核验(含撤稿检查与字段比对);取不到落「待人工核对」。绝不查 Crossref 误判、绝不 NOT_FOUND |
| CNKI 中文 DOI(10.16511 等) | 知网自己就是 DOI 注册机构。它不回 CSL-JSON 题录,故多为「待人工核对」+ 去知网原始记录核对;绝不 NOT_FOUND |
| 无 DOI 的中文文献 | 「待人工核对」+ 知网 / 万方核对包 |
| 编造 DOI 前缀(10.9999 等) | not_registered → 「未找到(疑似不存在)」+ 证据链 + 出口 |
| 编造 Crossref DOI 号码 | 注册机构自证不存在 → 「疑似不存在」 |
| 元数据不符(年份 / 作者 / 标题) | 「元数据不符」+ 逐字段标注;venue / type 仅提示不升态 |
| 已撤稿 | 「已撤稿」+ 撤稿数据来源(如实取自响应:Crossref 的 Retraction Watch 带撤稿日期,OpenAlex 仅布尔标记,PubMed 给出撤稿声明的期刊卷期页 / DOI / PMID 但不给结构化撤稿日期);投稿前必处理 |
| 期刊出了关注声明(Expression of Concern,医学常见) | 不是撤稿态——期刊对该文存疑、尚未定论,判成「已撤稿」是替期刊下结论。六态不变(按其余判据照常落 VERIFIED 等);信号在脚本输出 JSON 的证据链里(PubMed 命中的 evidence.hits[].metadata.expression_of_concern,带声明的期刊卷期页 / DOI / PMID),目前不进 HTML 报告,要用就从 JSON 读、作附加标记如实转述 + 提示投稿前留意,处理与否归用户 |
| 查不成(网络 / 超时) | 「无法核实」;网络恢复后重跑(断点续验跳过已完成) |
| 用户人工核对回填 | 填 manual_result → 重跑升级为「已核实」(核对劳动沉淀) |
| 非文献引用(法条 / 判例 / 古籍 / 标准) | 单独标"非文献引用,须人工核对",不进 API 核验 |
| 不在标准科研目录 | 报告落当前目录 + 提示可用 /paper-init 归位 |
产物格式
三份产物同源于一份 payload(同一次判定的三种视图,内容不许出现分歧):
.paper/review/verify-<时间戳>.html(人读主产物,scripts/report_html.py 渲染):降级横幅(network_status 非 ok 时)→ 裁决横幅(几条需优先处理)→ 六态堆叠条 + 分布表(每态附「意味着什么」)→ 六态图例 → 需优先关注(锚点直达)→ 已查源清单 → 逐条卡片(左色带按态染色、DOI 可点、字段对照表、<details> 证据链、核对包检索词可复制、格式提示)→ 人机分工页脚。可打印(打印时自动展开证据链、隐去筛选轨)、窄屏表格重排不丢列。
样式走 Tailwind CDN + typography 插件(与其余报告模板同一技术栈),_shared/tailwind.config.js 原样内联进产物——产物落在 .paper/review/ 后相对路径指不到 skill 包,故必须内联;四层语义色仍只在那份 config 里定义一次。CDN 依赖声明:断网时样式不加载,产物降级为无样式 HTML(内容可读、排版失效),这是可接受的折衷。
.paper/review/verify-<时间戳>.md(纯文本版,scripts/report.py):同样结构的 Markdown,供无浏览器环境、diff 与 grep。
.paper/review/verify-<时间戳>.json(机器可读):完整证据链 + 判定 + manual_result 回填字段,断点续验与下游消费的载荷。
只想给旧报告重渲 HTML(改了样式、或当时用了 --no-html):
python3 scripts/report_html.py --in .paper/review/verify-时间戳.json
.paper/ 留痕(会话产出报告时纯文件追加,日期用 date +%F 真实值):
## 2026-07-25 14:00 · paper-verify
- 环节:阶段 D·环节 17-19 评审与修订
- 辅助级别:构思讨论(核验范围确认)+ 成句生成(报告渲染)
- AI 承担:真实 API 取证、六态判定、格式检查、报告生成
- 用户决定:是否编造、如何处理不符/撤稿/疑似不存在条目、结论夸大改不改
- 产物:.paper/review/verify-时间戳.{html,md,json}
横切声明
- 留痕:产物型 skill——会话产出报告时向
.paper/追加「构思讨论 + 成句生成」级记录;报告自带人机分工页脚。 - 目录约定是增强不是依赖:检测到
.paper/review/则归位,否则落当前目录并提示可用/paper-init。 - 语言:简体中文优先;用户可见的六态标签用中文(已核实 / 元数据不符 / 已撤稿 / 未找到(疑似不存在)/ 无法核实 / 待人工核对),英文态码(VERIFIED / NOT_FOUND…)留 JSON 与日志。
- 产出披露:有落盘产物,报告尾附人机分工页脚(声明「疑似不存在 / 元数据不符」为客观证据推断、非动机指控,最终判断由用户负责)。
- 量化门槛(专属发布门):虚构引用检出率 ≥ 95%、真实引用误报率 ≤ 5%、真实中文文献误伤 = 0;claim 过程中立性行为门(不下定论 / 不替用户改 / 不做动机判断)。