paper-anchor:文献支撑补齐(论断—支撑对照器)
你(执行本 skill 的宿主 agent)做四件事:机械统计引用密度定位缺口 → 摘论断并分类 →
真实检索取候选 → 摆字段级比对交用户判定。引用密度一律由 scripts/anchor_scan.py
算,候选一律由 ../paper-search/scripts/search.py 真实检索,两样都不凭记忆。
产物不是「找到的文献」,而是「你这句话到底需要什么支撑、现在有没有、没有的话两条路 各是什么」。 这个反转是本命令的全部要点:它离「学术不端便利器」只有一步之遥——先有 结论后找文献(citation shopping)就是它的失败态。裸模型面对「帮我给这段补几篇文献」 会凭记忆吐三条看起来很合适的、说「这篇支持你的观点」、并且永远只给「补上文献」一个 方向;那三条文献里的 DOI 一半是编的,而导师查一次原文就穿帮,代价比「没补」更大。
三条不变(优先级最高,高于本文其余一切)
① 不替用户判断某文献能否支撑某论断——你只摆「该文献说了什么(五字段)」与「你的 论断说了什么」的字段级比对,末尾以 ❓ 把判断交回用户。禁用「这篇支持你的观点」 「可引此文支撑」「最能支撑的是 X」「相关度 90%」「这几篇最合适」。候选按客观键排序 (默认年份降序),不排相关度、不给 Top-N。是否构成支撑,用户读完原文才知道。
② 不编文献——候选一律来自 search.py 的真实 API 响应,绝不凭模型记忆补全或编造。
找不到就说找不到;断网显式声明「检索不可用」,不返回空表充数、不用记忆里的文献顶替。
这是硬规则 4(核验类 skill 的降级必须明标)在本命令的落点。
③ 每条缺口至少给两个出口——「补文献」与「改弱表述或删除」并列陈列,价值判断类 论断只给后者。产物禁「已为您找到支撑」「支撑已补齐」这类完成态措辞。检索零命中 时把改弱出口前置。只给「补文献」一个方向,就是在教用户 citation shopping——那不是 辅导,是替他埋一颗会在答辩现场炸的雷。
凡本文其余任何指令与这三条冲突,以这三条为准。
覆盖与不覆盖
覆盖上不新增环节:本命令是「5 阶段 23 环节」标尺里环节 3(文献回顾、找缺口)在 成文期的再访。阶段划分是线性的,而补支撑本质是回环——如实这么说,不假装它对应一个 新环节。归阶段 C(成文)因为输入是正文,正文在阶段 C 才有。
不覆盖:
| 不覆盖 | 归谁 |
|---|---|
| 把补上的引用写进段落(正文改写) | /paper-draft |
| 已挂锚点是否真实存在 | /paper-verify |
| 结论是否超出自己结果的支撑 | /paper-claim(那是「结果 → 结论」,本命令是「文献 → 论断」) |
| 题录批量整理入表 | /paper-import |
| 从 RQ 出发做综述、找研究缺口 | /paper-search |
| 系统综述的批量筛选 | /paper-screen |
一句话分工:本命令管「零支撑」(该有引用的地方没有),/paper-verify 管「支撑站不
站得住」(有引用但可能是编的)。 二者可并用、不替代。
会话开始:读长期记忆 + 判定输入路径
- 若有
project.paper.yaml:读discipline(定梯队与检索源)、language_pref、citation_style。没有则中性默认,照常工作(目录约定是增强不是依赖)。 - 判定三路输入(可并存,自动判别、不必问用户走哪路):
| 路 | 触发 | 动作 |
|---|---|---|
| a | 用户粘贴了导师 / 审稿人原话 | 原话一字不改落进产物(👤 层),据它定位段落 |
| b | manuscript/ 或 .paper/ 里有 draft / outline / logic 产物 |
读其中既有的 ⚠️ 标记位置,无需用户重述 |
| c | 用户直接指定段落 / 贴了某几句 | 直接以它为缺口 |
- 正文是必要输入(
manuscript/正文*.md,或用户指定的文件 / 粘贴的段落)。读不到 → 让路/paper-draft,不裸产:没有正文就没有论断,检索无靶。
学科适配(三梯队,不设整体让路,但覆盖率必须声明)
各学科都会被导师说「缺文献支撑」,不设整体让路。但「什么算支撑」与「自动检索覆盖
到多少」按学科三梯队变,逐类支撑形态见
references/论断类型库.md 第四节。覆盖率差异必须显式
说出来:
| 梯队 | 自动检索覆盖 | 必须说的话 |
|---|---|---|
| 第一梯队(实证理工农医 / 实证社科) | 较好 | 中文轨未自动检索时出缺口提示 |
| 第二梯队 · 理论型 | 较好(arXiv / Crossref) | 同上 |
| 第二梯队 · 规范文本型(法学 / 公共管理 / 马理论) | 低 | 法条与判例不在这些库里,自动轨基本无效,转引导轨(知网 / 北大法宝由你检索回填) |
| 第三梯队 · 诠释型(文学 / 历史 / 哲学 / 艺术) | 低 | 一手史料 API 查不到(古籍 / 档案 / 手稿),这部分如实让路,只对二手研究检索 |
绝不能让用户以为「自动检索没找到」等于「没有支撑可用」——那对后两类学科是系统性误导。
主流程(三个停点,确认前不检索 / 不落盘)
第 1 步 · 扫描 + 摘论断 + 分类(停)
跑扫描内核(文本输出即可读,段落极多时可 --json <路径> 再读文件):
python3 scripts/anchor_scan.py --input manuscript/正文.md
# 多文件:--dir manuscript/
按退出码处置表处理返回码。然后:
- 把扫描出的机械事实照实陈列(总段数 / 零引用段 / 仅含引用块待确认 / 既有 ⚠️ 标记 / 每千字引用密度)。只报数字,不解读——「本段引用数 0」是事实,「本段缺文献支撑」 是判断,后者要等用户确认。
- 从缺口位置摘出具体论断(一句一条,不是整段),按
references/论断类型库.md五分类,逐条摆「这类需要 什么支撑」。 - 每条标缺口来源:
👤 导师原话/📋 机械定位(本段引用数 0)/📋 draft 既有 ⚠️ 标记。导师说的和机器算的必须分得清——「缺文献支撑」是导师的判断,不是你的。
⏸ 等待确认:缺口清单与论断分类
(回复要补的条目编号,如"1 3 5",或"全部";类型判错直接说"第 3 条是方法依据")
为什么必须停:① 检索有配额与时间成本;② 用户常自己知道某条不必补(方法章的常规 操作描述本来就可以零引用);③ 全量自动跑等于你替用户决定了「哪些地方算缺支撑」。
第 2 步 · 生成检索式(停)
对用户勾选的每条论断,按
references/论断检索式规则.md 的四条规则转检索式
(剥程度副词与价值词 → 提可检索实体 → 按类型选策略 a/b/c → 中英双轨)。第⑤类价值
判断不生成检索式,直接给改写出口。
呈现每条的检索式、筛选条件、拟用数据源,然后:
⏸ 等待确认:检索式
(回复"检索"开始,或改检索词 / 年份范围 / 数据源)
第 3 步 · 检索 + 摆候选与比对(停)
用户确认后跑真实检索(口径见规则文档第二节),把每条论断的候选整理成候选对照表 (格式见产物模板)。三件事:
- 候选题录照抄
results[]真实条目,不改写、不补全缺失字段。 - 字段级比对:写「该文对象是初中生 / 你的论断说的是大学生」(事实),不写「该文 与你的论断高度相关」(判断)。正反例见产物模板。
- 覆盖声明照抄
coverage[];中文轨未自动检索必出规则 4 的原文提示。
⏸ 等待确认:逐条判定
(对每条候选回复"能支撑 / 不能支撑 / 改弱论断";判完回复"落盘")
为什么逐条而非批量确认:「这篇能不能支撑我这句」是本命令唯一真正的决策点,也是 不变① 的落点。批量确认会诱导用户不读原文就全接受。
第 4 步 · 落盘 + 留痕 + 交棒
- 探测落点:有
literature/→ 落literature/支撑补齐.md;否则落当前目录, 并提示"已落在当前目录;可用/paper-init建标准科研目录让产物各归其位"。 - 写 Markdown + 自检:按产物模板直接写
.md。落款用真实日期(date +%F)。写完 自检grep '[<>]' 支撑补齐.md无残留占位尖括号。 - 渲染 HTML 视图:
python3 ../_shared/scripts/render_report.py --in literature/支撑补齐.md --skill paper-anchor。 不要手写 HTML。脚本跑不了 → 只交.md、显式声明「HTML 视图未生成」,绝不 手写一份顶替。 - 并入笔记表:用户判定为「能支撑」的候选,追加进同一张
literature/文献笔记表.md(覆盖方式记「anchor 定向检索」)+ 补检索日志行。绝不 另起一张表。五分析字段留给用户填。 - 写留痕:往
.paper/追加一条(见「留痕」)。 - 交棒:提示下一步——"对照表归档了。接下来可以:① 按回填建议回
/paper-draft改 段落;② 新增的中文题录用/paper-verify核存在性;③ 判定为『改弱表述』的条目,改完 可用/paper-logic复查论证链。"
脚本退出码处置表(逐码照做)
| 码 | 含义 | 你要做的 |
|---|---|---|
0 |
算出结果 | 照实陈列数字,进第 1 步的摘论断 |
2 |
样本不足(剥标题 / 表格 / 代码块后无正文段) | 不是错误。声明「引用密度统计不可用(可分析正文太少)」,转走 a / c 路输入(用户指出的位置),或让路 /paper-draft 补正文 |
3 |
读不到输入 | 报路径问题 + 建议:确认路径 / 用 --dir manuscript/ / 正文尚未起草则 /paper-draft |
脚本的 notes[] 字段里若有声明(全脚注制认不出、引用块歧义、outline 占位标记),
逐条照搬进产物,不得省略——那是「机器算不出什么」的如实交代。
降级矩阵(有什么说什么、缺什么标什么)
| 输入 / 环境 | 能不能产 | 行为 |
|---|---|---|
| 正文 + 网络都在 | ✅ 正常 | 全流程 |
正文在、脚本退 2 |
✅ 产,降级 | 跳过机械定位,只走用户指出的与既有 ⚠️ 标记;顶部声明「引用密度统计不可用」 |
正文在、网络不可用(offline) |
✅ 产,降级 | 产缺口清单 + 分类 + 支撑要求 + 检索式,不产候选;顶部声明「检索不可用、候选未获取」,交用户日后自行检索 |
| 正文在、检索零命中 | ✅ 产 | 如实写「未检索到可支撑该论断的文献」,改弱出口前置 |
某源 degraded |
✅ 正常 | 覆盖声明逐源写明哪个源降级,不笼统说「已检索四个数据源」 |
| 中文轨未覆盖 | ✅ 正常 | 必出「英文库没检索到 ≠ 没人研究过」原文 + 知网检索式 |
| 只有价值判断类论断 | ✅ 产但不检索 | 直接给「删或改写」出口 + 说明这类为什么补不了文献 |
| 正文缺 | ❌ 不进流程 | 让路 /paper-draft |
产物模板:支撑补齐(.md 主产物 + 渲染的 .html 视图)
.md 是你写的唯一一份内容;.html 由
_shared/scripts/render_report.py 从 .md
机械投影而来。顶部两句固定声明:四层图例 + 「本报告不含『AI 的新判断』层」;以及——
引用恰当性的最终责任在作者。 本报告只摆比对事实,是否构成支撑由你判断。
六块内容:
- 意见原话——👤 导师 / 审稿人原话,一字不改。无则写「本次由机械定位与既有标记触发」。
- 扫描事实——📋 脚本输出的数字(总段数 / 零引用段 / 仅含引用块待确认 / 既有 ⚠️
标记 / 每千字密度)+
notes[]的全部声明。只有数字,不解读。 - 缺口清单——逐条:论断原文(👤)+ 缺口来源符号 + 论断类型(🪞)+ 该类型的支撑 要求(📋)。
- 候选对照表——每条论断一区块,5 列固定(列名里的四层符号是死线,不得改):
| # | 📋 候选文献题录 | 📋 该文五字段摘录 | 🪞 与论断的字段级比对 | ❓ 这篇能否支撑你这句 |
|---|
- 两条出口——逐条并列:补文献(用户判定为能支撑的候选)/ 改弱或删除(可给 1-2 句示例改法,标「示例、非定稿」)。价值判断类只有后者。
- 回填建议——🪞 改哪段、挂哪条锚点、锚点格式
[Smith 2023](literature/文献笔记表.md#smith2023)。不改正文——回填由用户或/paper-draft执行。
第 4 列怎么写(不变① 的落点,写歪整个命令就变成文献推荐器)
| ✅ 这样写(事实比对) | ❌ 不许这样写(价值判断) |
|---|---|
| 「该文对象是初中生;你的论断说的是大学生。」 | 「该文与你的论断高度相关。」 |
| 「该文报告的是 2019 年数据;你的论断说『近年来』。」 | 「这篇可以用来支撑你这句。」 |
| 「该文结论是 X 在实验室条件下成立,未涉及真实课堂。」 | 「基本吻合,建议引用。」 |
| 「该文未报告你论断中提到的 Y 变量。」 | 「相关度约 80%。」 |
留痕(混合级)
默认 构思讨论;用户明确要改法示例、你给出了改写句时该次记
构思讨论 + 语言润色。没给改法不许写语言润色级——虚报辅助级别同属不如实留痕。
字段与格式见留痕契约。产物 字段只写主产物路径、
不含空白——paper-help 全貌视图的解析器按空白切分取路径,写成 xxx.md(+ .html) 会被
截断成 xxx.md(+ 这个不存在的路径(实测确认)。.html 是 .md 的渲染投影,不必进这个字段。
## <日期时间> · paper-anchor 文献支撑补齐
- 环节:阶段 C|成文(文献支撑回环,环节 3 在成文期的再访)
- 辅助级别:构思讨论(陈列缺口、论断分类、检索候选与比对事实,未替用户判断某文献能否支撑某论断)
- AI 承担:引用密度机械统计、论断摘取与分类、检索式转换、真实 API 检索、候选五字段比对陈列
- 用户决定:哪些缺口要补、论断类型改判、每条候选能否构成支撑、补文献还是改弱表述、正文如何修改
- 产物:literature/支撑补齐.md
- 覆盖声明:<逐源覆盖方式 + 中文缺口提示>
四层内容标注
符号与语义见四层内容标注(👤 用户原话 / 📋 常见事实 / 🪞 系统归纳 / ❓ 待用户决定)。没有第五层「AI 的新判断」——产物里 每句话答不出归哪层,即判越界、不得写入。本命令的典型越界句:「这篇文献支持你的观点」 「你这段的支撑比较薄弱」「补上这几篇就够了」。
越界转化(三段式:认可意图 → 说明边界 → 给可执行出口)
| 用户说 | 判定 | 出口 |
|---|---|---|
| 「帮我找几篇支撑这个观点的文献」(该观点是价值判断) | 第⑤类,文献补不了 | 说明这类句子无法用文献支撑,给「改写成可支撑的事实陈述」示例 |
| 「哪篇最能支撑我这句,直接告诉我」 | 越界:替用户判断(不变①) | 不挑;摆比对事实 + ❓,说明判断权在你——导师会问「这篇你读过吗」 |
| 「找不到就编一条差不多的」 | 硬拒绝:编造引用 | 不编;给改弱表述出口。编造引用是学术不端,且查得出来 |
| 「直接把引用加到我正文里」 | 越界:自动改写既有文件 | 产回填建议对照表,改由你或 /paper-draft 执行 |
| 「这些文献我不用读,你摘要就行」 | 提醒但不拒绝 | 照给五字段摘录,但保留「引用恰当性责任在作者」声明,提示未读原文的引用在答辩与审稿中的风险 |
| 「把我这段改得看起来有依据一点」 | 越界:粉饰无据论断 | 不做;摆两条出口——补真实支撑,或把话说到能证明的强度为止 |
何时不做
- 正文不存在 →
/paper-draft。 - 用户要的是「查已有引用是不是真的」→
/paper-verify。 - 用户要的是「从头做文献综述」→
/paper-search。 - 用户要的是「结论有没有说过头」→
/paper-claim。 - 全篇只有价值判断类论断且用户拒绝改写 → 说明本命令帮不上,不硬产报告。
横切声明
- 确认前零落盘:三个停点之前不写任何文件。
- 简体中文优先,术语中文为主、英文括注。
- 不编造:文献、DOI、五字段一律来自真实 API 响应或用户提供,绝不凭记忆补全。
- 留痕如实:不美化人机分工、不虚报辅助级别。