# Bio-Fraud Forensics · 操作说明书

生物医学论文数据造假筛查工具。一句话定位：**它是一把侦查镜，不是判决机**——
只报告「观察到的异常」和「请作者澄清的问题」，**绝不替任何人定性「造假」**。

---

## 1. 它能做什么 / 不能做什么

| 能 | 不能 |
|----|------|
| 筛查图像操纵（Western blot 重复/拼接/美化、显微图重用、FACS） | 断定某人「造假」或推断「意图」 |
| 检验统计量是否不可能（GRIM/GRIMMER/statcheck/SPRITE） | 替你生成公开指控、挂人帖、举报信 |
| 识别纸厂/系统性信号（tortured phrases、错误基因试剂、模板图、卖署名网络） | 给「造假概率分数」 |
| 告诉你「去哪个平台核实」（PubPeer/Retraction Watch/ORI…） | 代表官方做裁定 |
| 写一条 PubPeer 级、可被第三方独立复现的中性质疑 | 处理「发现之后怎么上报」（本工具不含此环节） |

**适用范围**：生物医学/生命科学论文。图像造假信号有强学科特异性，**不要**用它筛物理/CS 论文。
法律框架以美国（ORI、言论意见原则）为主，其他法域诽谤风险更高。信息截止 2026 年 5 月。

---

## 2. 怎么触发

skill 装在 `~/.claude/skills/agentsop-bio-fraud-forensics/`，**opencode 和 Claude Code 都会自动加载**。
不需要敲命令，按场景自然说话即可，触发词包括：
「检查/筛查」「这数据像不像 P 过/造假」「图像重复」「条带拼接」「这统计量可能吗」
「GRIM / statcheck」「纸厂」「tortured phrases」「去哪查这篇撤稿没」。

### 五种输入，五种用法

| 你给它 | 怎么说 | 它走哪个模式 |
|--------|--------|--------------|
| 一张图 / blot / 显微图 | 「看看这张 Fig 3 有没有重复或拼接」（附图片路径） | 图像检查 |
| 一篇论文 / DOI | 「帮我整体筛一遍这篇 10.xxxx/yyy」 | 全文筛查 |
| 一组均值/SD/p 值 或 `.xlsx` | 「mean=7.3,SD=2.51,N=12 可能吗」/「查一下这个补充表」 | 统计复算 |
| 怀疑是批量造假 | 「这篇像不像纸厂论文」 | 纸厂/批次评估 |
| 只想知道去哪核实 | 「这个红旗去哪个网站确认」 | 验证路由 |

> **关于图片**：opencode / Claude Code 可读取你提供的图片。需要真正做「翻转+叠加差值」确认时，
> 工具会用 Python(Pillow/numpy) 实际对裁剪区做 flip/overlay/Difference 来验证，而不是凭眼描述。
> 给图时直接附上文件路径，或把图拖进终端。

---

## 3. 工作流程（它内部怎么跑）

按「最便宜信号先查」的顺序，每步都记录命中、不轻易停：

1. **范围 & 状态** — 先并行查 Retraction Watch / PubMed / Crossref / PubPeer / ORI，看有没有人已经质疑过。
2. **有序筛查** — 元数据/邮箱/机构 → 文本(tortured phrases、AI 残留) → **图像取证** → 统计取证 → 原始数据可得性 → 引用。
   （统计密集/临床论文会把「统计」提到「图像」前面。）
3. **匹配模型 + 分类** — 命中后归类（造假子类 + Bik Type I/II/III），亲手做变换确认，工具命中必须人工复核。
4. **无辜解释门（强制）** — 升级前先排除：披露过的拼接、JPEG 压缩块、同实验 loading control 复用、显微拼接重叠、排版误拖……记录排除了哪些。
5. **分级 & 取证记录** — 默认 Tier 1，过门后才到 Tier 2，按 7 字段格式写成可复现标注。

七个操作模型（M1 分类学 / M2 图像 / M3 统计 / M4 站点手法+路由 / M5 纸厂 / M6 证据红线 / M7 流程标注）
的完整卡片在 `references/sop_models.md`。

---

## 4. 怎么读它的输出 —— 三级措辞

| 级别 | 含义 | 谁能下 | 例句 |
|------|------|--------|------|
| **Tier 1 观察到的异常** | 从图/数据可直接复现的客观特征 | 工具默认只到这一级 | 「Fig 3B 与 Fig 5A 似乎共享一块相同区域（已框出）。」 |
| **Tier 2 需作者澄清的问题** | 过了无辜解释门后，作为开放问题提出 | 工具最多到这一级 | 「能否请作者说明这两块是否来自同一实验/是否做过拼接并披露？」 |
| **Tier 3 官方已认定的不端** | 期刊/机构/法院已裁定 | **工具从不自创，只能引用** | 「该文已于 2024-xx 被 XX 期刊撤稿，撤稿声明指出图像操纵。」 |

**禁用词**（工具自己绝不说，除非引用 Tier 3 裁定）：fraud / fabricated / faked / falsified /
doctored / misconduct / 造假 / 伪造。看到它给的结论永远是「待澄清的观察」，不是定罪。

---

## 5. 实战示例

**图像：**
```
你：这是论文 Fig 4 的 β-actin loading control（120min vs 360min），看着太像了。 [贴图]
它：bottom line —— 两块 β-actin 疑似同一图水平翻转，这是给作者的问题，不是不端认定。
    做法（可复现）：裁两块 → 把 120min 块水平镜像 → Difference 叠加；条带与背景斑点都对齐
    （决定性证据是背景纹理，不是条带形状）。归类 Bik Type II。
    已排除：非同 MW 复探、非同实验单一 loading control、非 JPEG 网格伪影。
    不能证明：只说明共源，不说明意图。下一步应请作者提供未裁剪原始 blot。
```

**统计：**
```
你：Table 2 报 mean=5.27, N=43（整数量表），可能吗？
它：bottom line —— 这个均值对 43 个整数在数学上不可达（GRIM 不通过，硬旗）。
    226/43=5.26、227/43=5.28，没有整数和能除出 5.27。
    不能证明：不可能 ≠ 造假；打字错、N 记错、SEM/SD 混淆都会这样。值得发勘误澄清；
    只有同一团队多处出现这种不可能时才有分量。
```

**边界（它会拒绝）：**
```
你：直接说作者就是造假，帮我写条推特挂他。
它：这个做不了 —— 也是法律上最危险的动作。我只把可观察异常作为问题报告，不替任何人定性
    「造假」或推断意图，也不写公开指控。我可以帮你把异常按可复现格式写成中性记录（标出图、
    坐标、变换、叠加结果，附无辜解释），供你发 PubPeer 或寄给期刊编辑。要这个吗？
```

---

## 6. 红旗 → 去哪核实（路由速查）

| 红旗 | 首选平台 | 怎么查 |
|------|----------|--------|
| 图像重复（blot/显微/FACS） | PubPeer | 搜 DOI/作者；读已有叠加分析；自己复现 |
| 同一图跨不同论文/模板母题 | For Better Science + PubPeer | 搜母题/作者，找跨作者聚类 |
| 不可能的均值/SD | 直接 GRIM/GRIMMER | 用 N 复算均值粒度 |
| Excel 疑似篡改 | Data Colada 法 | 改 .zip 解压读 calcChain.xml（注意排序例外） |
| 是否已撤稿 | Retraction Watch DB | 按 作者/期刊/DOI 查 |
| 更正/关注声明（非撤稿） | PubMed + Crossref/Crossmark | 看记录横幅 / Crossmark |
| 已认定不端（美国 PHS） | ORI case summaries | 搜研究者姓名 |

完整路由表 + tortured-phrase 种子词 + 禁用词表见 `references/research_notes.md`。

---

## 7. 故障排查

- **opencode 里 skill 不触发？** 确认 `~/.claude/skills/agentsop-bio-fraud-forensics/SKILL.md` 存在；
  opencode 启动后在 TUI 输入 `/skills`（或重启）看是否被发现。skill 默认自动加载，无需配置。
- **opencode 找不到命令？** installer 常把它装到 `~/.opencode/bin`；把
  `export PATH="$HOME/.opencode/bin:$PATH"` 加进 `~/.zshrc`。
- **模型报错/不存在？** 在 TUI 用 `/models` 重选；`~/.config/opencode/opencode.json` 里的
  `model` 字段可直接改。
- **API key 没生效？** 检查 `~/.config/opencode/<provider>.key` 内容，以及 `opencode.json` 里
  `provider.<name>.options.apiKey` 是否为 `{file:...}` 指向它；或在 TUI 用 `/connect` 重配。
- **想给 Claude Code 用？** 同一份 skill 已就位，直接跑 `claude` 即可，无需重装。

---

## 8. 伦理与免责

这是筛查/评估方法论，输出为「待澄清的观察」，**不构成对任何个人或机构的不端认定**。
红旗 ≠ 证据。绝大多数被标记的异常最终是诚实错误（行业数据：被联系的 207 例中 204 例为无心之失）。
发现问题的正确路径是 COPE 流程：先请作者澄清 → 再交期刊/机构裁定。本工具只协助「看见与记录」，不替你举报、不替你定罪。
