来源分类 是做什么的?
寻找候选来源,然后在任何分析之前回答关于每个来源的四个问题:
- 它是否在法律上免费?(获取)
- 我,一个AI代理,是否真的能读取它,通过哪种途径?(可达)
- 它是否真实、最新且未被撤回?(完整性)
- 它有多好,有多核心?(等级、角色、⭐ 上下文精选)
输出是一个分类账。research-plan在此基础上构建,evidence-check据此进行审计,用户也可以独立使用它(“你能读哪些,哪些必须我下载?”)。适用于任何领域和非论文来源。
核心真理(来之不易;不要重新学习)
- 获取权限是按路径而非按论文判断的。 一篇开放获取文章可能在出版商网站上被屏蔽,但可通过API读取,反之亦然。记录成功的路径。
- HTTP 200 可能是假象。 CAPTCHA页面、登录墙、JS外壳、空内容XML以及报告“成功”但内容为空的工具,看起来都像是成功。检查你实际得到的内容。
- WebFetch返回的是模型的提取结果,而非页面本身。 适合阅读和获取元数据;永远不能作为逐字引用的来源。逐字文本只能来自原始路径:通过shell(
curl)获取的API XML/JSON、下载的PDF或用户提供的文件。 - 被屏蔽 ≠ 不存在。 一个阻止你的页面会将来源标记为
unchecked,而不是not_found。一个API若宕机,则忽略该信号,从不记录false。 - Bronze ≠ 可读。 测试它。
- 永远不要绕过。 没有影子图书馆、镜像站、缓存、绕过机器人/CAPTCHA的抓取或批量采集。
- 永远不要凭记忆命名来源。 在测试中,两个模型初稿的参考文献都有错误的标题、错误的年份、错误的DOI,甚至有一篇根本不存在的论文。每个来源在出现之前都要先查找确认。
边做边写(检查点)
开始时创建 research/<slug>/ledger.md。每次搜索后,将查询行追加到搜索日志中。分类一个来源后,立即追加其行。长时间运行会丢失上下文;磁盘上的分类账就是内存。
步骤 0 — 框架(一条消息,然后开始)
用一行说明:问题 · 领域 · 年份范围(默认:最近10-15年 + 标志性的早期作品;“最近” = 5年) · 范围内的来源类型 · 请求中的硬约束(例如“评分标准需要2个书章节”) · 深度:
quick:保留8-15个来源。雪球滚雪球是可选的(从顶级评论向前滚雪球一次)。超过上限的记录被记录为not carried forward (cap):只需计数,无需排除原因。deep:保留25个以上,从3-5个最核心的作品向后和向前滚雪球。
除非用户纠正,否则继续。如果用户说“让我确认”/“逐步进行”,在每个 ◆ 处停止。否则直接运行并在最后列出你的选择。
步骤 1 — 优先检查本地库
检查用户已有的资源:连接的PDF文件夹、之前的 research/*/ 分类账、.bib或Zotero/CSL导出。已有的来源标记为 held: library。将其DOI传递给搜索作为“已有”。
步骤 2 — 发现
每个概念设置一组术语,用OR连接:同义词、缩写、旧名称、英式/美式拼写、方法名称。对于生命科学,添加MeSH + 入口术语、基因符号、酶名称 + EC编号、拉丁文 + 常用生物名称。查询方法而非作者。 每次查询使用2-3个概念组;更多AND条件会返回0条结果。
| 需求 | 主要数据库 | 辅助数据库 |
|---|---|---|
| 生物医学 / 生命科学 | PubMed (MeSH) | Europe PMC REST(SRC:"PPR" 查找bioRxiv/medRxiv预印本;HAS_FT:y = 有全文)、OpenAlex |
| 任何领域,广泛 | OpenAlex(主题/概念过滤器优于原始搜索) | Semantic Scholar、Crossref |
| CS / ML / 物理 / 定量生物学 | arXiv(按相关性排序) | Semantic Scholar、alphaXiv / Scholar Feed |
| 预印本 | Europe PMC SRC:"PPR" 或 OpenAlex type:preprint | bioRxiv连接器没有关键字搜索:仅用于获取已知DOI的详细信息和已发表版本 |
| 书章节 | OpenAlex type:book-chapter、出版商目录、WebSearch | 验证其容器(参见步骤4) |
| 声明 / 评论快速搜索 | Consensus、Elicit(如果连接) | 通过DOI验证每条结果 |
| 非论文来源 | 首先查看所有者的官方文档/规格/代码 | 其余使用WebSearch |
- 灵敏度检查: 如果已知关键论文,确认你的查询能找到它们。
- 结果数量: 数万条结果意味着范围太宽;0-1条意味着约束过度,需要重新措辞。重新措辞一个零结果查询属于同一轮操作。
- 记录: 标题、作者、年份、期刊、类型、DOI · PMID · PMCID · arXiv · URL、
found_via。 - 去重: DOI → 其他ID → 标准化标题 + 年份。合并预印本和已发表版本。
- 边界: 在约1,000条记录或约50次调用前询问。
◆ 检查点:术语、查询、结果数量。
步骤 3 — 获取分类(在阅读任何内容之前)
3a. 法律获取(批量处理)
对于每个保留的来源,调用OpenAlex get_work(搜索结果省略了许可证)。精确复制其 oa_status 值:gold · diamond · hybrid · green · bronze · closed。同时记录 license 和 oa_url/pdf_url。Europe PMC license 字段和PubMed get_copyright_status 是备选方案。Unpaywall(version、host_type)需要一个真实的邮箱:仅使用用户为此目的批准的邮箱;否则跳过。
- 无数据 →
unknown。永远不要发明oa、?后缀或出版商名称作为访问值。 - 非论文来源 →
web。 - 许可证未知 → 在重新分发时视为
local-only。
3b. 代理可达性:路径阶梯(在第一个成功处停止)
- 已有:在用户的库或之前的运行中。
- Europe PMC REST,原始方式,通过shell
curl,且shell可以访问:- 搜索:
…/rest/search?query=DOI:"a" OR DOI:"b"&format=json,每次调用最多8个DOI,间隔至少1秒; - 全文:
…/rest/{PMCID}/fullTextXML。 这是最佳的逐字引用路径。仅在shell无法访问时才使用WebFetch;WebFetch会拒绝长URL并受速率限制。 - 429 → 等待,重试一次。5xx →
blocked:http-5xx,转到下一条路径。
- 搜索:
- PubMed
get_full_text_article:仅当full_text非空时有效。空 →blocked:empty-body。 - 预印本服务器:arXiv、bioRxiv/medRxiv
.full页面。 - OA位置:OpenAlex
oa_url/pdf_url(直接PDF URL可能在文章页面失败时成功)、Semantic ScholaropenAccessPdf、CORE、Crossref TDM链接。 - 出版商页面:每个主机仅尝试一次。跟随DOI重定向即为该次尝试。永远不要进入robots.txt禁止的主机(ScienceDirect / Elsevier linkinghub)。
- 作者或机构仓库,通过WebSearch
"<exact title>" pdf。尊重“禁止文本和数据挖掘 / AI使用”的通知。 - 无任何成功:记录原因并将来源路由给用户。
2026年10月观察(重新测试;这些可能会变化):
- 原始方式正常:通过curl访问Europe PMC REST。
- 提取方式正常:Nature OA、Frontiers、MDPI、bioRxiv
.full、arXiv、来自OpenAlex的Springer PDF URL。 - 被屏蔽:ScienceDirect(robots.txt)、Wiley(包括OA,获取错误)、Springer文章页面、BMC PDF端点、PMC网站(CAPTCHA)、Annual Reviews、Science。
- 不可靠:PubMed全文工具(经常为空)、Europe PMC fullTextXML(某些PMCID返回HTTP 500)、通过WebFetch访问Europe PMC(受速率限制)。
在调用任何可读内容之前进行验证:
- 正文内容超出摘要;
- 不是CAPTCHA/登录/访问受限页面;
- 不是空或仅元数据的XML。
- 一个下载的文件仅当以
%PDF-开头、不是HTML且大于约10KB时才有效。
| reach | 含义 |
|---|---|
readable:<route> | 获得全文:readable:europepmc-xml(原始) · readable:pdf(原始) · readable:webfetch(提取,不能用于逐字引用) |
abstract-only | 仅可获得摘要(典型付费墙) |
blocked:<reason> | paywall(连摘要都没有) · robots · captcha · login · http-4xx · http-5xx · fetch-error · rate-limited · empty-body · js-shell |
unchecked | 未尝试(预算/上限)。从不写“not tested”。 |
标签规则: 控制词在前,完全按照这些表格。注释可放在括号中,例如 verified (Crossref DOI)。
在将来源标记为 blocked 或 abstract-only 之前,寻找可免费获取的副本。一个在法律状态上为 gold/hybrid/green/bronze但对你的代理 blocked 的来源,应放在“免费但对AI代理被屏蔽”部分。
步骤 4 — 完整性(批量处理;在命名任何内容之前)
在发现后立即对每个你将命名的来源运行此步骤:包括在计划中、作为⭐ 选择或作为推荐。这不是最终步骤。
- 存在性: 判定
verified·partial·mismatch·not_found·unchecked。使用Reference Checkercheck_references+ OpenAlexresolve_references。当工具不一致时,在Crossref或OpenAlex中精确DOI匹配优先于基于标题搜索的not_found;两者都记录。 - 书章节: 验证容器,而不仅仅是DOI:来自Crossref记录的书名、编辑、页码和出版商(
api.crossref.org/works/<doi>→container-title、page)。在测试中,DOI正确但书名错误的情况出现过。 - 撤回:
check_retractions。Clear仅表示“未发现撤回通知”。 - 同行评审: 将预印本标记为(
peer: preprint)在分类账中;在源文件条目中标记为`preprint`;如果存在已发表版本,引用它。 - 污染: 一个2024年后的预印本如果在≥2个索引中无匹配,则存在造假风险。重新验证或丢弃。
- 掠夺性期刊标记;灰色文献:URL + 访问日期 + Wayback链接。
步骤 5 — 等级、角色、⭐
等级A–F: 根据其自身领域的适用性、方法论、同行评审、时效性、数据、冲突的综合中位数。完整性失败将等级上限设为D。未读或仅摘要的来源获得临时等级(B?)。
角色: evidence · background · method · tool/data · counter。
非论文来源层级: T1 所有者文档/规格/代码/法规 · T2 机构 · T3 专家新闻 · T4 社区 · T5 供应商营销。
⭐ 上下文精选(5-10个选择):如果本地存储,最能改善正在构建的内容的来源。获取权限无关紧要。每个选择需要:
- 为什么重要;
- 如何获取(OA链接/VIT图书馆登录/馆际互借/联系作者);
- 保存为名称
<firstauthor>-<year>-<keyword>.pdf; - 可重新分发:
ok(CC-BY / CC0 / 公共领域)或local-only(其他所有情况,包括未知许可证)。
偏差检查: 某一维度上已知值 ≥70% → 说明并给出计数。
步骤 6 — 分类账
research/<slug>/ledger.md:第一张表,每个来源一行,列按此顺序:
# · Short cite · Type · Role · Grade · access · licence · version · reach · held · read · integrity · retraction · peer · ⭐ · Save as · Link · found_via
read初始为not-read;research-plan会填充full·sections:<which>·abstract·metadata。⭐= 对于精选是ok或local-only,否则为-。- 排除的行使用ID
E1…。
在表格下方:
- 搜索日志: 数据库 · 日期 · 查询 · 命中数 · 哪些术语找到了什么。
- 计数: 已识别 → 去重后 → 未向前推进(上限) → 保留 → 排除(注明原因)。任何计数行中的
total= 所有分类账行,包括排除的行。
运行捆绑的检查器:python3 <此技能文件夹>/scripts/research_checks.py ledger research/<slug>/ledger.md(标准库Python,在你的沙箱中运行),并在移交前修复错误。独立使用时,将分类账渲染为research-plan中描述的源文件。
隐私
仅使用主题词进行搜索,绝不使用用户未发表作品中的句子。用户的电子邮件仅用于Unpaywall,且仅在其同意的情况下使用。