--- name: literature-search description: >- 当用户需要检索学术文献、按主题找论文、收集综述素材、查询某篇文献的元数据或 DOI、追踪某方向最新进展或预印本、做开题文献调研时使用。同义场景:文献检索、 论文搜索、查文献、找论文、文献调研、资料收集、题录补全、 "帮我找关于 X 的论文""这个主题有哪些代表性工作""查一下这篇文献的 DOI 和出处"。 argument-hint: '[检索问题或关键词]' metadata: domains: [literature] last_reviewed: '2026-08-18' --- # literature-search:多源文献检索路由器 ## 目的 把用户的检索问题路由到最合适的文献数据源(provider),执行检索, 多源结果去重后统一为 PaperDocument JSON 落盘,供 literature-survey 等下游 技能直接使用。 核心原则:诚实路由、失败留痕——哪个源失败了、为什么失败,必须结构化记录 在 manifest 中,不得静默缺失;也不得把失败伪装成「该源没有结果」。 ## 前置检查 1. paper-search 技能与其脚本 `scripts/search_papers.py` 存在;`python` 可用。 2. 网络可用;离线时直接说明无法检索并终止。 3. 检索问题足够具体:若用户输入过于宽泛(如「人工智能」),先与用户收敛到 一个可检索的问题或关键词组再执行。 4. 计算 slug:检索问题规范化(Unicode NFKC 规范化、转小写、去首尾空白、 连续空白折叠为单个空格)后取 sha1 十六进制摘要前 8 位。 ## 操作规程 ### 1. 路由:按问题类型选 provider | 问题类型 | 首选 provider | 当前版本说明 | | --- | --- | --- | | 综合主题检索 / 引文网络 / 领域全景 | OpenAlex | 脚本直连,覆盖广、元数据丰富 | | 精确元数据 / DOI 解析 / 题录补全 | Crossref | 脚本直连,DOI 注册数据权威 | | 生物医学 / 临床 / 生命科学 | PubMed | 当前版本脚本未直连;以 OpenAlex 兜底(其收录 PubMed 源文献),并在 manifest 记 warn | | 预印本 / 最新进展 | arXiv(数理信息类)/ bioRxiv(生物类) | arXiv 脚本直连;bioRxiv 经 Crossref / OpenAlex 检索其 DOI,manifest 记 warn | | 中文文献 | CNKI / 万方 | 转交本插件的 cn-literature 技能(CNKI 导出题录解析 + 万方 API),不在本技能内重复实现 | 路由决策与理由写入 manifest;用户也可直接指定 provider 跳过路由。 ### 2. 执行检索 - 按 paper-search 技能的规程构建 query 并执行: `python scripts/search_papers.py --query "..." --provider

--limit --format json`。 - 同一问题可路由到多个 provider;逐源串行执行、逐源记录结果。 ### 3. 失败结构化记录 任一 provider 返回 `{"error": {...}}` 或执行异常时: - 在 manifest 的 `errors` 数组记录:provider、type(`network` / `rate_limited` / `parse`)、message; - 回复中如实告知「X 源本次检索失败及原因」; - `rate_limited` → 按指数退避稍后重试一次;仍失败则留痕, 不得当作「该源结果为 0」。 ### 4. 多源去重与统一 - 合并各源返回的 PaperDocument 数组。 - 去重优先级:① DOI(统一小写、去掉 `https://doi.org/` 前缀后比较); ② 标题模糊匹配(小写、去标点、折叠空白后比较;判定重复时保留元数据 更全的一条)。 - 重复条目的 `source` 记录为来源列表(如 `["openalex", "crossref"]`)。 - 输出统一 PaperDocument: `{id, title, authors, year, venue, doi, url, abstract, source, retrieved_at}` (`source` 为字符串数组)。 ### 5. 落盘 目录 `output/literature-search//latest/`: - `papers.json`:去重后的 PaperDocument 数组; - `manifest.json`:query、路由决策、各源命中数、errors、执行时间、去重统计。 ### 6. 路由决策示例 - 「帮我找 Transformer 相关的代表性工作」→ 综合主题 → OpenAlex; - 「查 10.1145/xxxx 这篇的完整题录」→ 精确元数据 → Crossref; - 「最近半年扩散模型有哪些预印本」→ 最新进展 → arXiv; - 「肺癌筛查影像 AI 的临床研究」→ 生物医学 → OpenAlex 兜底并记 warn; - 「查中文核心期刊上关于乡村振兴的研究」→ 中文文献 → 转交 cn-literature 技能处理(CNKI 导出题录解析 + 万方 API)。 ### 7. 合并顺序与字段取舍 - 多源执行顺序按路由表优先级:OpenAlex → Crossref → arXiv; - 同一论文多源命中时按字段择优:DOI 以 Crossref 为准;abstract 以 OpenAlex / arXiv 为准(Crossref 常缺摘要);venue 以正式发表信息为准, 预印本 venue 只在无正式版时保留; - PubMed / bioRxiv 走兜底源时,manifest 记 warn:「该源经 OpenAlex / Crossref 间接覆盖,结果可能不完整」; - 去重后被舍弃的条目不清空,在 manifest 记录其 id 以便追溯。 ## 输出模板 ### papers.json ```json [ { "id": "https://openalex.org/W0123456789", "title": "Attention Is All You Need", "authors": ["Ashish Vaswani", "Noam Shazeer"], "year": 2017, "venue": "Advances in Neural Information Processing Systems", "doi": "10.48550/arXiv.1706.03762", "url": "https://arxiv.org/abs/1706.03762", "abstract": "The dominant sequence transduction models ...", "source": ["openalex", "arxiv"], "retrieved_at": "2026-08-18T00:00:00+00:00" } ] ``` ### manifest.json ```json { "query": "large language model agents", "slug": "1a2b3c4d", "routing": [{"provider": "openalex", "reason": "综合主题检索"}], "hits": {"openalex": 20}, "errors": [{"provider": "arxiv", "type": "rate_limited", "message": "HTTP 429"}], "dedup": {"before": 22, "after": 20}, "executed_at": "2026-08-18T00:00:00+00:00" } ``` ## 本技能不做什么 - 不获取付费墙全文;abstract 之外的正文不可得时如实标注。 - 不评价论文质量、不筛选「重要」文献(排序建议由 paper-search 给出, 质量判断留给 literature-survey 与用户)。 - 不在本技能内检索中文文献:CNKI / 万方需求转交 cn-literature 技能处理。 - 不把 provider 失败伪装成「检索结果为 0」。 - 不做综述分析与成文(交给 literature-survey / review-writing)。 ## 收尾与下一步 1. 汇总:各源命中数、去重后数量、失败源及原因,5 行内说明。 2. 指向 `output/literature-search//latest/papers.json`。 3. 建议下一步:运行 literature-survey 做证据提取与全局分析; 或调整 query 重新检索(换关键词、换 provider、调 limit)。 4. 若全部 provider 均失败,明确告知「本次检索整体失败」, 不产出空 papers.json 冒充成功。