☰
PaperSpine 引用阶段(Citation Stage)实战指南:构建可验证的文献支持库
2026/10/12 1:55:46 网站建设 项目流程
  • AI 技能
  • AI 写作
  • 人工智能
  • 深度研究
  • AI 应用

【免费下载链接】PaperSpine

PaperSpine5 — local-first, evidence-bound paper research, writing, figures, review and delivery. Download: https://wubing2023.github.io/PaperSpine/v5/

项目地址:https://gitcode.com/gh_mirrors/pa/PaperSpine
点击查看免费下载

导读:本文围绕 PaperSpine 的 paper-spine orchestrator 引用阶段(Citation Stage)展开,系统讲解如何为手稿中的文献陈述构建一份可验证的 citation support bank——包括文献检索优先级、13 列候选库表格规范、open_literature与closed_corpus两种文献范围契约,以及配套的citation_bank_check.py、citation_quality_audit.py、citation_verification_en.py等校验脚本的完整命令行用法与底层实现原理。读完本文,你将掌握从「收集候选文献」到「验证、覆盖度检查、精选入库」的完整流程,并理解为什么「库检查 PASS」不能替代「手稿实际引用覆盖率」的最终核对。

引用阶段的定位与目的

citation.md是 paper-spine orchestrator 在引用环节的 canonical stage playbook(标准阶段操作手册)。它的核心目的是:

构建一份可验证的引用支持库(citation support bank),使手稿中的每一句文献陈述都有真实、可核验的来源支撑。

需要特别强调它与「范例学习(exemplar learning)」的区别:范例论文用于学习写作结构与目标场景的行文风格;而引用支持库中的论文用于支撑用户手稿 Introduction、Related Work、Discussion、limitations、applications 和 background 中的具体文献陈述。两者不能混为一谈。

引用阶段文档还澄清了一条重要边界:历史遗留的 Runner bank schemas 与配额并不构成普通宿主写作的额外门槛。具体来说,rewrite_existing(改写已有文稿)、指定本地材料路径、或materials_only设置,本身不会把公共文献检索限制为封闭语料;只有用户显式提出限制时,公共文献才会被视为关闭。

文献检索优先级协议

引用阶段规定了四个层级的文献检索策略,优先级从高到低:

  1. Literature MCP tools(首选):若宿主环境配置了 MCP 服务器,应优先使用,并在每条引用的Source Channel列记录来源通道:MCP-CNKI、MCP-IEEE、MCP-PubMed、MCP-Crossref、web、local或unknown。
  2. Host WebSearch / 浏览工具(备选):使用 Web 检索时,Source Channel标记为web。
  3. 本地文件:基于本地 PDF/材料建立引用时,Source Channel标记为local。
  4. MCP 是增强而非依赖:即使没有任何 MCP 服务器,也应从 web/local 来源正常构建引用支持库,不能因缺少 MCP 而中断写作。

这一协议在 SKILL.md 的研究环节得到呼应:宿主 Agent 负责研究、引用检查、解读、写作与修订,Web、本地文件和小脚本用于支撑交互、持久化、渲染与交付。

工作引用笔记与候选库表格规范

引用阶段要求沿用任务已有的任务文献目录(task bibliography)和声明支持笔记(claim-support notes)。当使用 legacy 表格检查器时,以下 13 列 Markdown 表格是它接受的输入格式:

Candidate IDSource IDClaim Use IDReference/BibTeXYearRecencySupports SectionSupport Claim SentenceWhy This Paper FitsSourceSource ChannelVerifiedVerification Note

这 13 列的语义在配套文档 citation-support-bank.md 中有更细的展开:

  • Source ID标识一篇论文(书目身份);Claim Use ID标识该论文在手稿中的一次使用。一篇来源可以支撑多个 claim,但针对 source-coverage、recency 和 diversity 配额,只计一次。
  • 每行配对一篇论文与一到两句支持句。支持句应当是可直接进入手稿的表述,例如Prior work has shown that ...、Recent studies in ... motivate ...、This supports the Discussion claim that ...。
  • 支持句不得虚构:不能编造来源元数据、摘要或用户提供 PDF/文本中不可见的结果。
  • 每行必须包含一种引用格式:BibTeX、DOI、URL、arXiv ID,或足以让用户核验的完整书目元数据。
  • 按 DOI、PMID、arXiv ID、BibTeX key、URL 或规范化引用去重:多次 claim use 对来源覆盖、新颖性和多样性只计一次;open_literature模式下若检索无法满足目标可记录SOURCE_COVERAGE_BLOCKED,closed_corpus模式下记录CLOSED_CORPUS_EXHAUSTIVE及实际来源数,严禁克隆行来凑数。

配套文档给出了一个规范示例行(以 arXiv 为引用格式):

Candidate IDSource IDClaim Use IDReference/BibTeXYearRecencySupports SectionSupport Claim SentenceWhy This Paper FitsSourceSource ChannelVerifiedVerification Note
C001S001U001Vaswani et al. "Attention Is All You Need." arXiv:1706.037622017foundationalRelated WorkPrior work established self-attention as a replacement for recurrence.Foundational transformer paper the method builds on.arXivarxivyesConfirmed via arXiv abstract page; arXiv:1706.03762 title matches.

输出位置约定为paper_rewriting_output/citation_support_bank.md(参见 citation-support-bank.md)。注意:已有的已验证笔记足以复用,单独命名一个 bank 文件不是写作的前置条件。

文献范围契约:open_literature 与 closed_corpus

收集文献之前,必须先解析literature_scope(文献范围):

  • open_literature(开放文献):当任务允许文献发现、或需要新的 SOTA/领域地图时使用。候选池应当扩展以覆盖背景(background)、方法(methods)、近距离比较(close comparisons)与解读(interpretation)中的实际覆盖缺口。保存的最终参考文献目标是目标数量,而不是候选池的乘数或年龄配额——即不能用「最终引用数 × N」或「近 X 年占比」作为完成要求。
  • closed_corpus(封闭语料):用于仅允许引用所提供材料的证据受限改写。应去重并穷尽可用文献目录;至少尽力覆盖已规划的最终引用目标;若语料本身更小,添加CLOSED_CORPUS_EXHAUSTIVE标记并报告实际总数。不要因为固定语料偏旧或小于 3 倍目标而阻塞写作——语料规模与年代是披露信息,不是虚构来源的理由。

关于范围解析有一条硬性判定:只有用户显式将可用文献限制为所提供的来源时,才解析为closed_corpus。单独的本地路径、specified_paths、rewrite_existing或materials_only均不关闭公共文献;显式的离线指令限制的是「检索」行为,而不是对已可用来源的身份核验。

共享规则(Shared Rules)

  • 来源与使用分离:Source ID标识论文,Claim Use ID标识一次手稿使用;一个来源可支持多个 claim,但只对来源覆盖、新颖性和多样性配额贡献一次。
  • 每行填写Source Channel:MCP-CNKI、MCP-IEEE、web、local、unknown等。
  • 外部通道必须验证:对web、MCP-*、Crossref、PubMed、Scholar、Semantic Scholar、IEEE、CNKI、WOS等外部通道,Verified必须是yes、verified、pass或true之一,且Verification Note必须说明核验方式:DOI match、title match、Crossref/PubMed 页面、publisher 页面、database record,或本地 PDF 元数据。
  • 验证失败的处理:若外部验证无法完成,该行不得进入可采用的 adopted 集合,需保留其真实来源通道并标记验证为 pending;可先基于已有证据继续起草,同时继续来源核验。一个未被采用的候选行的空白字段,不应阻塞基于已有效证据的写作。
  • 本地源同样需要核验:local通道或空白验证字段不等于已验证。需记录实际文件支持了什么内容以及任何未解决来源问题(provenance)。
  • Pending 必须可见分离:未解决候选要明显标记并独立于 adopted 来源。legacy 检查器可能拒绝 pending 行——这诊断的是输入库的问题,而不是停止受支持写作或篡改来源通道以掩盖疑点的理由。
  • 候选库是候选池:最终写作只从中选取一个连贯的子集,不要把所有候选全部倒入手稿。

四步流程(Flow)

  1. Collection pass(收集):构建初始候选池,为每一行填好Source Channel。
  2. Verification pass(验证):核验每一行外部来源,填写Verified与Verification Note;在适用时运行citation_quality_audit.py和citation_verification_en.py。
  3. Coverage check(覆盖度检查):区分unique_source_count(唯一来源数)与claim_use_count(使用行数)。若最终目标有缺口,应寻找并整合相关、已验证的支持,不要静默降低所要求的覆盖度;若确因显式语料限制或期刊规则无法达成,应报告冲突与实际覆盖情况。CLOSED_CORPUS_EXHAUSTIVE是 legacy 检查器用于「已穷尽所提供语料」的标记,不是又一个写作门槛。任何模式下都不得重复使用行来填充数量。
  4. Curation(精选):手稿中只使用已验证、上下文匹配的来源;未解决候选保持分离,并继续基于已有的有效证据起草。

候选库诊断与命令行实战

诊断的目标必须从已保存的自定义数量或 journal-learning.md 中实际计数的目标期刊样本解析,然后与当前手稿中实际引用的不同条目比较——而不是与库规模、使用行数或未被引用的 BibTeX 条目比较。bank 检查本身不做这最后一次比较。若数量不足,应查找缺失文献并整合受支持的观点,报告真实的范围/期刊冲突,而不是把诊断 PASS 当作满足偏好。

引用阶段文档给出的四个核心命令:

python scripts/citation_bank_check.py <existing-bank.md> --target-count <resolved-target> --scope open_literature --markdown python scripts/citation_bank_check.py <existing-bank.md> --target-count <resolved-target> --scope closed_corpus --markdown python scripts/citation_quality_audit.py paper_rewriting_output --write python scripts/citation_verification_en.py paper_rewriting_output/citation_support_bank.md --markdown --write

下面结合源码逐一展开这些脚本的完整参数与判定逻辑。

citation_bank_check.py:候选库结构检查

实现位于 citation_bank_check.py,其完整参数如下:

参数默认值说明
pathpaper_rewriting_output/citation_support_bank.md待检查的候选库文件
--target-count0已解析的任务文献目标;省略表示不做覆盖度评估(只做结构检查)。检查的是候选库,不是最终手稿
--multiplier1开放文献模式下要求候选数 = 目标数 × multiplier(默认 1,即不做 3 倍发现广度配额)
--recent-years3新颖性窗口年数
--recent-ratio0.0要求的新近来源占比(默认 0,即不施加通用新近百分比)
--scopeopen_literatureopen_literature或closed_corpus
--markdown/--json关输出格式
--write关在库文件旁写出citation_bank_check.md

关键实现事实:

  • 脚本从源文件顶部注释即可看出设计取向:没有与期刊无关的文献目标、发现乘数或年龄配额;显式传入的 legacy 参数仅选择它们请求的结构检查(DEFAULT_TARGET_COUNT = 0、DEFAULT_MULTIPLIER = 1、DEFAULT_RECENT_RATIO = 0.0)。
  • required_candidates = target_count if closed_corpus else target_count * multiplier:封闭语料下要求至少达到目标数;开放文献下才应用乘数。
  • **唯一来源身份(source identity)**通过source_identity()提取:按优先级识别 DOI(doi:)、arXiv ID(arxiv:)、PMID(pmid:)、BibTeX key(bib:)、URL(url:),最后才回退到Source ID列(source:)或规范化文本(text:)。优先使用书目标识符而非 Agent 本地Source ID,是为了防止「重贴标签一篇论文」就能虚增覆盖度。
  • 弱行检查:每行必须同时满足「支持句」(合并文本 ≥ 80 字符且含.!?。!?等句末标点)与「引用格式」(含@、doi、http、arxiv、proceedings、journal之一,大小写不敏感——该行为有测试 test_scripts.py 验证)。
  • 封闭语料豁免:当文本中存在CLOSED_CORPUS_EXHAUSTIVE且处于closed_corpus模式时,来源数与行数低于目标不会被判 FAIL,只产生警告;同时提示「recency 与 3 倍发现广度仅是建议,来源真实性、去重与 claim 支持仍然阻塞性」。
  • 退出码0= PASS、1= FAIL;--write会写出citation_bank_check.md。

测试 test_scripts.py 展示了一个 60 行候选库配合--target-count 20 --markdown的完整校验用例:每行含 BibTeX 键、年份与 DOI,并通过Support Claim Sentence列给出完整支持句,最终输出Status: PASS。

citation_quality_audit.py:教学型引用质量审计

实现位于 citation_quality_audit.py。它超越 DOI 验证,对每条引用沿三个轴评分:可解析性(resolvability)、新颖性(recency)、领域相关性(field relevance),并输出多样性缺口、失效引用的替换建议以及场景化引用策略。

python scripts/citation_quality_audit.py paper_rewriting_output --write

完整参数:

参数默认值说明
output_dirpaper_rewriting_output读取其中的paper_spine_config.json(取scene与citation_target_count)与citation_support_bank.md
--timeout30Crossref API 请求超时(秒)
--delay1.0两次 API 请求之间的间隔(秒),用于礼貌节流
--no-api关跳过 API 调用,仅做结构分析
--max-dois30最多通过 API 验证的 DOI 数
--min-score60整体评分 PASS 下限
--max-error-ratio0.30错误行占比 PASS 上限
--max-pending-ratio0.50pending 行占比 PASS 上限
--markdown/--json/--write—输出与落盘(写citation_quality_audit.md)

关键实现事实:

  • DOI 识别:DOI_RE支持doi: 前缀、https://doi.org/、https://dx.doi.org/三种写法;每条记录只取第一个 DOI。
  • 验证判定:通过 Crossref 解析后,将本地标题与 Crossref 标题做相似度比较——相似度 ≥ 0.75 判verified(可解析性 100 分);0.50~0.75 判mismatched(40 分);< 0.50 判mismatched(20 分,提示「很可能 DOI 指错了论文」)。年份不匹配会追加 issue 与教学注记,但(在英文验证器中)不直接导致失败。
  • 新近度评分:当年 100 分、近 2 年 90、近 4 年 70、近 7 年 50、更早 20、无年份 30——注意该评分为启发式。
  • 非 DOI 来源处理:有Verified=yes/verified/pass/true且Verification Note≥ 12 字符、不含todo/tbd/pending/[verify]/unknown、并给出稳定标识(arXiv ID 或 URL)时,标记 pending 且可解析性 80 分;只有标记而无稳定标识被视为 self-attestation(自证),仅得 35 分并保持 pending;既无 DOI 也无足够验证注记则判error(0 分)。
  • 引用类型分类:按文本特征将引用分为sota(直接任务/SOTA 论文)、foundational(奠基性方法)、benchmark(数据集/基准)、survey(综述)、application(应用)、critique(局限/鲁棒性/可复现/伦理)。若某类型占比 < 5% 且非critique,报告会提示多样性缺口。
  • 场景化引用策略:内置journal、conference、report_review、competition四类场景的引导,例如期刊场景要求「必须引用 3-5 个最新竞争方法,缺失是 desk-reject 风险」,综述场景则强调「引用 3-5 篇综述以确立覆盖广度」。
  • PASS 判定:整体分 ≥--min-score、错误占比 ≤ 0.30、pending 占比 ≤ 0.50,三者同时满足才返回 0(PASS)。

该脚本的测试位于 test_citation_quality_audit.py,覆盖 DOI 提取、引用类型分类、新近度评分、标题相似度以及--no-api离线模式下「含 DOI 的行保持 pending 而不是离线提升为 verified」的语义。

citation_verification_en.py:英文引用的 Crossref 核验

实现位于 citation_verification_en.py,仅使用标准库,通过公开 Crossref REST API(无需密钥)确认每条候选引用是否解析到真实已发表作品。

python scripts/citation_verification_en.py paper_rewriting_output/citation_support_bank.md --markdown --write

完整参数:

参数默认值说明
bank_pathpaper_rewriting_output/citation_support_bank.md待核验的候选库
--max-checks30最多核验的引用数
--delay0.0请求间隔(秒)
--no-api关完全不访问网络,所有可查引用标记为skipped
--markdown/--json/--write—输出与落盘(写citation_verification_en.md)

关键实现事实:

  • 匹配阈值:标题相似度下限MIN_TITLE_SIMILARITY = 0.6,年份容差YEAR_TOLERANCE = 1(±1 年)。
  • 优先 DOI 直查:引用文本含 DOI 时直接GET /works/{DOI}(DOI 使用urllib.parse.quote(safe='')做百分号编码,测试 test_citation_verification_en.py 验证了/、(、)会被编码);无 DOI 时退化为query.bibliographic书目查询(取前 200 字符、rows=3),并遍历返回的所有条目寻找标题与年份都匹配的项。
  • local来源直接跳过:Source Channel为local的行不查询 Crossref,标记skipped。
  • 状态机:matched/unmatched/skipped/warning;API 不可达时标记warning并跳过,而不是判失败——「Crossref 是增强而非硬依赖」。
  • 年份容差细节:_crossref_year()优先取issued、published-print、published-online、published等实际出版日期字段,最后才回退到created(登记日期)。测试 test_citation_verification_en.py 专门验证:当 Crossref 只返回登记年份而本地为出版年份时,条目仍判matched,年份差异只记录在 note 中。
  • PASS 判定:存在unmatched条目、或匹配率 < 50% 时返回失败;--no-api离线模式不会因年份问题失败(测试 test_citation_verification_en.py)。
  • 报告开头的 Scope 声明明确:PASS 只代表 Crossref 标题/年份匹配,不代表完整的书目审计——跳过项、作者/机构归属和 claim 支持仍需人工来源审查。

中文引用场景:citation_verification_zh.py

对于中文文献,仓库还提供 citation_verification_zh.py:它检查中文引用格式要素(作者姓名、《期刊名》、年份、卷期页码)与 DOI 可用性。其文档字符串明确限定边界:这些诊断不能证明伪造、书目身份或 claim 支持;完整验证必须依赖原始来源或权威元数据,任何一行都不会因为格式或可解析 DOI 而变成 VERIFIED。

与前后环节的衔接

引用阶段不是孤立环节。在 SKILL.md 的研究步骤中,Agent 会同时阅读 research.md、local-reference-ingestion.md、citation.md、journal-learning.md 与目标期刊研究文档;而引用目标的解析依赖 journal-learning.md 中保存的偏好:

字段默认值含义
same_field_papers3同领域强相关论文数
target_venue_papers3目标期刊代表论文数
reference_count_modevenue_average以目标期刊样本书目规模均值为基准
reference_countnull用户显式自定义数量(custom模式)

在venue_average模式下,应统计所选目标期刊论文的书目条目数、记录均值,并至少瞄准floor(mean) + 1篇有用参考文献——这是从样本得出的估计,不是全期刊精确均值,也不得使用被引次数。手稿完成前的最终参考文献核对,则需要与 manuscript-format.md 的格式验证配合:检查所有被引 key 与最终文献目录对应、按首次使用顺序编号、缺失/未使用条目、重复/分组/范围引用等。

常见误区与边界(源码级澄清)

  • 库检查 PASS ≠ 手稿引用覆盖率达标:citation_bank_check.py 与 citation_quality_audit.py 的 Markdown 输出都带一句 Scope 声明:候选库结构、来源身份、可解析性、新近度/类型评分都不是最终引用覆盖率、来源内容支持或手稿就绪度。最终比较必须用「当前手稿中实际引用的不同条目」对目标进行。
  • 大候选库不能替代最终核对:citation-support-bank.md 明确指出,最终引用的条目要与保存的目标对账,候选库再大也不能替代这一步。
  • 严禁克隆行凑数:open_literature与closed_corpus两种模式下,重复使用行填充数量都是禁止的;citation_bank_check.py会统计duplicated_source_uses并在报告中呈现。
  • 未验证候选不得支撑最终论断:无法完成外部验证的行保留真实通道、标记 pending、与 adopted 集合分离;citation_quality_audit.py会把「Verified 标记但无稳定标识」明确判为 self-attestation 并降分。
  • Crossref 不可达 ≠ 证据伪造:两套验证脚本的 teaching note 均强调「Crossref 查询失败不建立伪造、撤稿或 DOI 无效」——这是未完成的查询,不是造假证据。
  • 避免把偏好当成配额:通用「三年内 X%」的新近百分比与「3 倍发现广度」都已被显式取消为硬性要求(脚本默认值DEFAULT_RECENT_RATIO = 0.0、DEFAULT_MULTIPLIER = 1),是否要求新近性取决于字段与任务,而非普适滚动窗口。

小结

PaperSpine 的引用阶段把「文献引用」从「贴参考文献」提升为一条可验证的证据链:按优先级协议检索 → 按 13 列规范建库 → 依据literature_scope契约设定范围 → 走完收集/验证/覆盖度/精选四步 → 用三个检查脚本(结构检查、质量审计、Crossref 核验)给出可复现的 PASS/FAIL 判定。全程坚持两条底线:来源身份与 claim 支持双核验,以及未验证候选绝不进入手稿。理解这些规则与它们的源码实现,你就能在自己的论文写作流程中复现这套「本地优先、证据绑定」的引用工作流。

  • AI 技能
  • AI 写作
  • 人工智能
  • 深度研究
  • AI 应用

【免费下载链接】PaperSpine

PaperSpine5 — local-first, evidence-bound paper research, writing, figures, review and delivery. Download: https://wubing2023.github.io/PaperSpine/v5/

项目地址:https://gitcode.com/gh_mirrors/pa/PaperSpine
点击查看免费下载

相关推荐

上一篇:桌面音频可视化:用Lano Visualizer让音乐"看得见"
下一篇:d2dx:解锁《暗黑破坏神2》在现代PC上的60fps高帧率与宽屏显示

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询