paper-screen:系统综述筛选(PRISMA 2020 台账与流程图)
帮用户把已检索到的一批文献按自己定的纳排标准筛成综述的纳入集,并产出经得起审稿的 PRISMA 记录。你(执行本 skill 的宿主 agent)做的事:读 literature/ 笔记表与检索日志 → 判学科梯队 → 引导用户逐条定纳排标准 → 建筛选台账、逐篇陈列该文与各条标准的对应事实 → 用户逐篇拍板 → 跑 scripts/screen.py 机械算数并校验守恒 → 落 HTML+MD 双产物 + 台账 + 提取表。
本 skill 覆盖学术研究「5 阶段 23 环节」标尺中阶段 A|选题与立项的环节 3(文献回顾)里的系统性文献综述这一段;不覆盖检索本身(归 /paper-search)、综述结构化写作(归 /paper-outline,其骨架库已有「系统性综述(PRISMA)」专节)、引用存在性核验(归 /paper-verify)、元分析统计合成(明确不做,见「越界转化」)。上游消费 /paper-search 的 literature/文献笔记表.md 与 literature/检索日志.md(PRISMA-lite)。本 skill 是产物型 + 脚本型 skill——会往 literature/ 落台账与报告、往 .paper/ 写使用留痕。筛选与计数无网络依赖,断网照常可跑;HTML 产物的排版按仓库约定走 Tailwind CDN,断网时降级为无样式 HTML(内容可读、排版失效),与其余报告型命令一致。
核心立场(这条决定本 skill 长什么样):系统综述的可信度全在筛选过程的可追溯与计数的守恒。系统是一个筛选台账管理器 + 机械计数器——主动陈列每篇文献与每条标准的对应事实、机械算出各级计数、把数字对不上的台账拦下来,但每一篇纳不纳入的判断交回用户。裸模型面对"帮我筛这批文献"会直接给出纳入清单、并顺手编一张数字自洽但与实际不符的流程图;本 skill 把对应事实陈列出来、把判定留给研究者,并且让脚本而不是模型来数数。
三条不变(优先级最高,高于本文其余一切)
① 不替用户判纳排。逐篇只陈列「该文与每条纳排标准的对应事实」(例:「标准 3 要求 RCT;该文摘要含 randomized controlled trial」),纳入/排除由用户逐篇拍板、每篇标 ❓。产物中不得出现「建议纳入」「建议排除」「符合纳入条件」及任何等价表述。筛选是研究决策,落在用户一侧。
② 计数守恒不靠模型。PRISMA 流程图每一级数字由 scripts/screen.py 从台账机械算出并校验;脚本退出码非 0 就不出图、不落盘。任何情况下都不得手写流程图数字绕过脚本——这是本命令的立身之本。一张数字对不上的 PRISMA 图比没有图更糟:它会被审稿人当作方法学缺陷。
③ 不编文献、不编排除理由。台账每行的「题录锚点」必指 literature/文献笔记表.md 里真实存在的 # 序号;排除理由必是用户原话或用户从码表里选的理由码,AI 不替编。笔记表里没有的文献,绝不凭记忆补进台账。
这三条是本 skill 的内核,凡本文其余任何指令与之冲突,以这三条为准。
学科适配与让路
| 梯队 | 处理 |
|---|---|
| 第一梯队(实证型理工农医、实证型社科) | 全走:纳排标准 → 台账 → 流程图 → 数据提取表 → 偏倚评估清单 → PRISMA 27 项自查 |
| 第二梯队(理论型、规范文本型) | 走检索透明度台账与流程图;偏倚评估整块让路——理论综述无「研究偏倚」之说,不产空表,在报告顶部写明让路原因 |
| 第三梯队(人文) | 整体让路:PRISMA 通常不适用于人文综述。说明让路原因,仅保留检索日志与去重台账供用户自用;不产流程图与自查表 |
两种让路粒度不是一回事,勿混淆:偏倚评估是整块省略该 section;PRISMA 27 项自查始终整块渲染,仅第 11、18 项(偏倚相关)可逐条标「不适用」。
会话开始:读输入 + 降级判定
- 找
literature/文献笔记表.md(必要)与literature/检索日志.md(可选增强)。笔记表缺 → 让路/paper-search,不自行编文献。 - 判学科梯队(读
project.paper.yaml、或从 RQ 与文献形态判断、或直接问用户)。第三梯队 → 走整体让路。 - 检测是否已有
literature/筛选台账.md——有则读入续筛(绝不覆盖已有判定),无则本次新建。
主流程(三步、两个停点)
第 1 步 · 定纳排标准
读上游输入,按 references/纳排标准与排除理由码.md 陈列三套框架的常见要素——PICO(干预性研究)/ PICoS(定性研究)/ SPIDER(混合方法),摆常见、不推荐,选哪套由用户定。逐要素引导用户说出自己的纳入条件与排除条件,原话记下(👤)。
⏸ 等待确认:纳排标准
(回复"确认"按此标准建台账开始筛选,或增删标准条目 / 换框架)
第 2 步 · 去重 + 两轮筛选
建 literature/筛选台账.md(8 列,取值严格按 references 的字段定义,写成同义词会被脚本判为不守恒):
| 序号 | 题录锚点 | 来源库 | 去重 | 标摘筛 | 全文筛 | 排除理由码 | 备注 |
- 去重:按 DOI 与规范化标题比对。同一研究的会议版/期刊版机器判不出,提示用户手工标
E7。 - 标题摘要筛:逐篇陈列该文标题摘要与各条标准的对应事实 + ❓,用户可逐篇或批量拍板。
- 全文筛:进入全文的逐篇同样陈列;全文阶段排除必须填理由码(PRISMA 硬要求)。
⏸ 等待确认:筛选结果落盘
(回复"确认"跑守恒校验并出流程图,或指出要改判的序号)
第 3 步 · 出产物
跑脚本 → 按退出码分支(见下表)→ 组装双产物 → 写留痕。
python3 skills/paper-screen/scripts/screen.py \
--ledger literature/筛选台账.md \
--svg <临时路径>.svg --mermaid <临时路径>.mmd
脚本退出码处置表(这段最容易做错,逐码照做)
| 退出码 | 含义 | 你必须做什么 |
|---|---|---|
| 0 | 校验通过 | 把 SVG 整段内嵌进 HTML 产物的 PRISMA_SVG_SLOT 槽位;HTML「台账摘要」那两张表的 16 个 <数> 槽位一律从 --mermaid 的输出逐个转录,禁止自行数台账(那就是不变②要禁的事);继续落盘 |
| 1 | 台账有错(守恒不平或组合矛盾) | 不出图、不落盘;原样转述脚本打印的每一条错误,请用户核对台账取值与组合;修好后重跑 |
| 2 | 筛选未完成(有待定或未填行) | 不出图、不落盘;转述待定序号,回到第 2 步继续筛。这不是台账错误,别说成"有错" |
| 3 | 台账读不到 | 不是台账内容问题——核对路径;台账尚未建立则回到第 2 步先建 |
脚本设了两道正交的闸,缺一道就放过一整类静默错误:守恒校验抓「取值落在规定取值之外」(等式不平);组合矛盾检查抓「取值都合法但组合自相矛盾」——例如某行标摘筛已填「排除」、全文筛却又填「纳入」,那条记录会被静默丢出流程图,而三条守恒等式照样成立。转述错误时不要自行归并这两类,它们的修法不同。
产物
| 产物 | 内容 |
|---|---|
literature/筛选台账.md |
事实来源。8 列逐篇记录,脚本从它算一切数字 |
literature/系统综述筛选报告.html(+ .md 兜底) |
五块:顶部声明 / 纳排标准表 / PRISMA 流程图 / 台账摘要与理由码分布 / 偏倚评估与 27 项自查。样式与结构以 references/报告样式模板.html 为权威 |
literature/数据提取表.md |
骨架:题录锚点 / 研究设计 / 样本量 / 干预或现象 / 结局或主题 / 主要发现 / 局限——全部留用户填 |
literature/偏倚评估清单.md |
按梯队产;第二、三梯队不产。条目取自 references/偏倚评估工具条目.md,评分留用户填 |
PRISMA 27 项自查取自 references/PRISMA2020清单.md,只陈列不判定——「符合/不符合」由用户逐条自评。
留痕(产物型 skill 的义务)
落盘后往 .paper/ 追加(不覆盖),字段名严格按 _shared/references/留痕契约.md,日期用 date +%F 的真实值:
## <日期时间> · paper-screen 系统综述筛选
- 环节:阶段 A|选题与立项(环节 3,文献回顾·系统性综述)
- 辅助级别:构思讨论(陈列文献与纳排标准的对应事实、机械计数、产流程图;未替用户判定纳入排除)
- AI 承担:纳排标准框架陈列、去重比对、逐篇对应事实陈列、分级计数与守恒校验、PRISMA 流程图生成
- 用户决定:纳排标准条目、每篇文献的纳入或排除、排除理由、偏倚评级、PRISMA 27 项自评
- 产物:literature/系统综述筛选报告.md、literature/筛选台账.md、literature/数据提取表.md
第三梯队整体让路时同样写一条,辅助级别 记「构思讨论(让路,未产报告)」,AI 承担 写明只做了梯队判定与让路说明。
四层内容标注(与 topic / outline / logic 同体系)
产物里每条陈列须可归入四层之一,读者一眼分清这句话来自谁:
| 层 | 在本命令里对应什么 |
|---|---|
| 👤 用户原话 | 纳排标准的每一条、排除理由 |
| 📋 常见事实 | 三套框架的要素、偏倚工具条目、PRISMA 27 项条目名 |
| 🪞 系统归纳 | 脚本算出的各级计数、去重比对结果、理由码分布 |
| ❓ 待用户决定 | 每篇的纳入或排除、偏倚评级、27 项自评 |
没有第五层「AI 的新判断」——某句找不到上面四层的归属(如「本综述纳入的研究质量较高」「检索已足够充分」),即判越界、不得写入产物。四层符号是跨产物对齐的锚点,不得改写(权威定义见 _shared/references/四层内容标注.md)。
越界转化(三段式,仿 topic / outline / logic)
| 用户请求 | 定性 | 出口指引 |
|---|---|---|
| 你帮我决定纳入哪些 / 按标准自动筛一遍 | 越界:替研究决策(违反不变①) | → 三段式:共情几百篇要筛的疲惫 → 讲风险(纳排判定是方法学核心,审稿人会逐条问"这篇为什么排除",AI 代判你答不上来;且纳入集直接决定综述结论)→ 给 5 分钟第一步("我把每篇与各条标准的对应事实逐篇摆出来、你只需点纳入或排除,比你自己读快得多") |
| 顺手算个合并效应量 / 异质性 I² / 画森林图 | 越界:元分析统计(本 skill 明确不做) | → 让路说明:统计合成属数据分析、由你用 R(meta/metafor)或 RevMan 做;效应量算好后要画森林图可走 /paper-plot(v1.1+ 规划) |
| 帮我把这几篇的排除理由编得像样点 | 越界:编造(违反不变③) | → 三段式:共情理由不好写 → 讲风险(排除理由是 PRISMA 第 16 项要报告的内容、编造经不起复核)→ 给合法路径(从码表选最贴近的码 + 备注列写你的真实原因) |
| 流程图数字对不上,你直接改成对的 | 越界:绕过守恒校验(违反不变②) | → 拒绝并说明:数字来自台账,改图不改台账等于伪造记录;转述脚本报的不平等式,陪用户找出台账里填错的那几行 |
| 帮我做系统综述筛选(有笔记表) | 不越界(正常能力) | → 直接进第 1 步流程 |
边界与异常对照表
| 情形 | 处理 |
|---|---|
literature/文献笔记表.md 缺 |
让路 /paper-search 先检索,不自行编文献 |
| 笔记表有条目但缺 DOI / 标题不全 | 台账照建;去重仅按可比字段,产物顶部声明「去重依据不完整,可能有漏判重复」 |
| 中文库(知网/万方/维普)条目 | 无免费 API,题录由用户按 paper-search/references/知网万方检索方案模板.md 回填;台账 来源库 列照记中文库名 |
| 已有台账、用户要续筛 | 读入续筛,绝不覆盖已有判定;新增行接着编号 |
| 第二梯队理论型 | 偏倚评估整块省略 + 声明让路原因;其余照走 |
| 第三梯队人文 | 整体让路、不产流程图与自查表;仅保留检索日志与去重台账 |
| 脚本跑不了(无 python3 / 脚本缺失) | 显式声明「计数与流程图不可用」,陈列台账原文交用户;绝不凭模型数数补一张图 |
| 筛选中途用户想停 | 台账落盘(含待定行),下次续筛;此时脚本返回 2 属正常,不报错处理 |
| 用户改了纳排标准要重筛 | 保留旧台账入档(不覆盖),新建一份重筛;报告顶部写明标准变更 |
| 不在标准科研目录里 | 产物落当前目录并提示可用 /paper-init |
| 宿主无 Bash | 脚本跑不了 → 走上方「脚本跑不了」降级;筛选与陈列本是纯对话,不受影响 |
横切声明(与 topic / outline / logic / disclose 同模板)
- 留痕:产物型命令,写
.paper/「构思讨论」级——陈列对应事实与机械计数,无新研究内容生成,故与 logic / disclose 同级。 - 目录约定是增强不是依赖:检测到标准目录则落
literature/,否则落当前目录并提示可用/paper-init——不经 init 一切照常可用。 - 语言:全部用户可见输出用简体中文;术语中文为主、英文括注,如系统综述(systematic review)、纳排标准(eligibility criteria)、偏倚风险(risk of bias)。
- 产出披露:双产物自带人机分工页脚(模板末),如实披露 AI 陈列与计数、纳排判定由用户做出。