证据核查 是做什么的?
一份独立审计。它假设草稿中的任何内容在查验前均不成立。在 research-plan 的最后一步、用户自己的草稿或参考文献列表上,或是在交付任何报告之前使用它。
独立性
- 最佳做法: 一个全新的子代理,仅需提供文件(草稿、分类账/参考文献列表、笔记、原始文本)。绝不能是写作会话的分支。
- 无子代理: 同会话检查。
- 在评判任何内容之前,重新从磁盘读取每个文件,不要依赖你记得写的内容。
- 将结果标记为
same-session (not independent)。 - 告诉用户,对于任何高风险的任务,他们应该在一个新的聊天会话中,针对同一个文件夹运行此技能。
先进行确定性检查
首先运行捆绑的检查器:python3 <此技能文件夹>/scripts/research_checks.py all <目录>(或 quotes <claims.json> / links <plan.md>)。它使用标准库 Python,在你的代码沙箱中运行;用户无需安装任何东西。PDF 文本需要 pypdf:如果导入失败,请在沙箱中运行 pip install pypdf 并重试。其错误即为发现:无法解析的锚点、缺失的 ⚠ 标志、计数不匹配、不在源文本中的引用、虚假 PDF。其警告是判断性调用。
如果文件夹中没有 claims.json(例如,审计用户自己的草稿),请为你标记为 supported 的每个声明在旁边写一个 claims.json,以便 quotes 检查可以确认每个引用是逐字匹配的。
输入
草稿;参考文献列表(ledger.md、.bib 或编号列表);以及持有的笔记和原始源文本。如果仅提供草稿,请询问一次参考文献列表。
步骤 1 — 提取声明
找出每一个可验证的断言:
- 引用声明;
- 数字;
- 命名的论文、数据集和工具;
- 存在性声明;
- 否定声明(“no prior work…”);
- 未引用的确定性词语(proves, establishes, cures, prevents, conclusively, always, never)。
略过意见、建议以及草稿自身的定义。
步骤 2 — 解析
每个引用必须精确对应一个参考文献。列出两个方向上的孤儿引用以及作者-年份冲突。
步骤 3 — 真实吗?(针对每个参考文献)
立即查找每个参考文献:OpenAlex / Crossref / Semantic Scholar / PubMed,以及 Reference Checker 的 check_references 和 check_retractions。
| 裁决 | 含义 |
|---|---|
verified | 标题、第一作者和年份与本次会话中找到的记录匹配 |
partial | 作品存在但某条信息有误,或仅能确认部分内容(例如,确认了书籍但未确认章节) |
mismatch | DOI/ID 解析到不同的作品,或引用指向错误的书籍或期刊 |
not_found | 已正确搜索,但无匹配结果 |
unchecked | 无法查找(被屏蔽、预算不足、工具停机);不视为伪造证据 |
suspicious | 条目本身存在红旗警示 |
规则:
- 书籍章节: 将引用的书名、编辑、页码和出版社与 Crossref 的记录(
container-title,page)进行比较。正确的 DOI 但指向错误的书籍属于mismatch;这个确切的错误曾通过了一轮试运行。 - 工具分歧: Crossref 或 OpenAlex 中的确切 DOI 匹配优先于标题搜索得到的
not_found。记录两种结果。 - 什么算作记录: DOI 登录页、出版商、PubMed、PMC/Europe PMC、arXiv、OpenAlex、Crossref、Semantic Scholar、DBLP。片段或其他论文的参考文献列表不算。记忆属于
unchecked。 - 同时检查撤稿状态,以及预印本是否已正式发表。
步骤 4 — 有支持吗?(针对每个声明)
说明来源必须包含什么内容才能使引用是公平的,然后:
| 支持 | 规则 |
|---|---|
supported | 原始源文本(API XML、PDF 文本、用户文件)中有 40 个字符以上的逐字段落 提到它,并附有定位符。在报告中引用它。 |
partial | 来源所说的内容更窄或更弱 |
contradicted | 来源说的相反 |
not-found-in-read-part | 仅持有一部分文本,且声明不在其中 |
unverified-extracted | 仅通过 WebFetch 读取,返回的是模型的提取结果;永远不能是 supported |
unverified | 未持有文本(仅摘要/元数据、付费墙、被屏蔽) |
依赖步骤 4 的检查:
- 数字: 必须完全复制,不能四舍五入。不在来源中的数字属于
contradicted。 - 标志: 每个声明需要匹配其证据的标志:
⚠ abstract-only·⚠ metadata-only·⚠ extracted·⚠ preprint。添加所有缺失的标志。 - 独立计数: “consistent across N studies” 必须说明有多少项是独立的。
- 否定声明: 必须说明背后的搜索。否则重写为 “not found in ”。
- 背景 vs 证据: 为某一发现而引用的来源必须实际报告该发现。
步骤 5 — 结果
判断修复后的最终状态,并记录每次修复(“fixed in round n: …”)。
- PASS: 没有
not_found/mismatch/contradicted/ 孤儿引用。每个unverified*项都已在行内标记。 - PARTIAL: 没有错误,但某些项目无法解析(例如,内容无法检查的章节)或保持
unchecked状态。列出它们。 - FAIL: 经过最多 2 轮修复后,仍存在任何
not_found、mismatch、contradicted、已撤稿但被引用的来源或孤儿引用。在顶部附带以下横幅交付,后面跟着未解决的项目:
无效证据 — 引用或支持失败未解决;请勿视为已验证。
反驳不是证据。仅在新来源或更好论证面前让步,并记录原因。
输出
将一个折叠的 Evidence check 块追加到草稿末尾:
证据核查 — <日期> — PASS | PARTIAL | FAIL — <fresh context | same-session (not independent)> — 路由: <工具>
确定性: research-checks <pass/fail, n 个错误> | 不可用
参考文献: n 个已验证 · n 个部分匹配 · n 个不匹配 · n 个未找到 · n 个未检查 · n 个可疑 · n 个已撤稿
声明: n 个已支持 · n 个部分支持 · n 个被反驳 · n 个未验证-提取 · n 个未验证 · 新增标志数: n
修复: <轮次: 变更内容>
| # | 声明 (简述) | 引用 | 真实 | 支持 | 引用/定位符或原因 | 修复 |
首先修复: <虚构/不匹配的引用和被反驳的声明 → 孤儿引用 → 标志 → 样式>
隐私
仅使用标题、DOI 和主题词进行搜索。切勿将用户未发表文本粘贴到搜索中。