学术文献检索助手 · 纯工具版
工作原理
本技能仅使用 Agent 内置的 web_search 和 web_fetch 工具完成检索,不依赖 python_exec。这意味着它可以在 Python 网络受限(networkAccess: not_allowed_by_policy)的环境下运行。
用户提问 → 你构造检索 URL → web_fetch 直接 GET 搜索结果页
→ 从 HTML / JSON 中提取标题/作者/摘要/链接
→ 整理为中文报告
数据源与 URL 模板
PubMed(生物医学)
| 用途 | URL | 状态 |
|---|---|---|
| 搜索页 | https://pubmed.ncbi.nlm.nih.gov/?term=QUERY |
✅ 可用 |
| 摘要页 | https://pubmed.ncbi.nlm.nih.gov/PMID/ |
❌ cookie 拦截 |
提取方法:web_fetch GET 搜索页后,在 HTML 中查找:
- 标题:<span class="docsum-title">...</span>
- 作者:<span class="docsum-authors full-authors">...</span>
- 期刊:<span class="docsum-journal-citation">...</span>
- 摘要片段:搜索页内直接可见的摘要文本
- DOI:链接 https://doi.org/...
- PMID:从摘要页 URL 提取
获取完整摘要:PubMed 摘要页被 cookie 拦截时,改用 Europe PMC:
- https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id=PMID&rettype=abstract
- 或 https://www.ebi.ac.uk/europepmc/webservices/rest/search?query=PMID:PMID&resultType=core
Google Scholar 镜像站(按实测优先级)
| 优先级 | 源 | URL 模板 | 参数名 | 状态 |
|---|---|---|---|---|
| 1 | KipHub学术 | https://www.kiphub.com/search?wd=QUERY |
wd |
✅ 可用 |
| 2 | 学术搜索Pro | https://www.googlescholar.pro/search_results.php?q=QUERY |
q |
⚠️ 待实测 |
| 3 | Google Scholar 香港镜像 | https://scholar.google.com.hk/scholar?hl=zh-CN&as_sdt=0,5&q=QUERY&btnG= |
q |
⚠️ 需香港节点 |
| 4 | Google Scholar 官方 | https://scholar.google.com/scholar?hl=zh-CN&as_sdt=0,5&q=QUERY&btnG= |
q |
⚠️ 大陆常被拦截 |
| ❌ | 烂番薯学术 | https://scholar.lanfanshu.cn/scholar?hl=zh-CN&as_sdt=0,5&q=QUERY&btnG= |
q |
❌ 返回 403 |
| ❌ | 灯塔学术 | https://www.dotaindex.com/api/scholar/search?q=QUERY |
q |
❌ 返回 403 |
提取方法:web_fetch GET 搜索结果页 HTML,用正则或字符串匹配提取:
- 香港/官方:<h3 class="gs_rt">...</h3> 内的标题和链接,<div class="gs_a"> 内的作者/年份/来源,<div class="gs_rs"> 内的摘要
- KipHub:<div class="paper-summary-wrapper"> 容器
- 学术搜索Pro:<h3 class="card-title"> + <div class="card-meta"> + <div class="card-text">
检索流程
流程 A:PubMed 检索(医学 / 影响因子)
- 构造 URL:
https://pubmed.ncbi.nlm.nih.gov/?term=USER_QUERY - web_fetch GET 该 URL
- 从 HTML 提取:
- 标题:<span class="docsum-title">文本
- 作者:<span class="docsum-authors">文本
- 期刊:<span class="docsum-journal-citation">文本
- 摘要片段:搜索页内可见的摘要文本(摘要页被 cookie 拦截,不强行访问)
- PMID:从摘要页 URLpubmed.ncbi.nlm.nih.gov/PMID/提取
- DOI:从摘要页内https://doi.org/...提取 - 如需完整摘要:用 Europe PMC 兜底:
-web_fetch("https://www.ebi.ac.uk/europepmc/webservices/rest/search?query=PMID:PMID&resultType=core") - 整理为中文报告
流程 B:Google Scholar 镜像检索
默认按优先级回退:KipHub → 学术搜索Pro → 香港镜像 → 官方站
-
优先试 KipHub:
-web_fetchGEThttps://www.kiphub.com/search?wd=QUERY
- 如果返回 HTML 且能提取结果,直接使用
- 如果失败,回退到下一源 -
学术搜索Pro:
-web_fetchGEThttps://www.googlescholar.pro/search_results.php?q=QUERY
- 从 HTML 提取结果 -
香港镜像 / 官方站:
- 仅当用户明确要求时使用
- 香港镜像必须香港节点,否则提示用户切换节点
-web_fetchGET 对应 URL,从 HTML 提取
流程 C:双库合并去重(默认推荐)
- 同时走流程 A(PubMed)+ 流程 B(Scholar 镜像)
- 跨库去重:按下方「跨库去重算法」在整理报告前手动去重
- 告知用户:「已开启多库去重,可手动关闭」
跨库去重算法(LLM 手动执行)
在整理最终报告前,按以下步骤对两路结果去重:
第 1 步:归一化标题
对每篇论文的标题,生成一个"去重键":
1. 转为全小写
2. 移除所有标点符号(逗号、句号、连字符、括号等)
3. 移除所有空格
4. 只保留字母和数字
示例:
- "CRISPR-Cas9 gene editing in cancer" → crisprcas9geneeditingincancer
- "Metformin and type 2 diabetes: a review" → metformintype2diabetesareview
第 2 步:DOI 优先去重
- 先收集所有论文的 DOI(PubMed 的 DOI 字段、Scholar 镜像中极少有 DOI)
- 如果两篇论文的 DOI 相同(忽略大小写),则视为重复,保留 PubMed 版本(PubMed 通常信息更完整)
第 3 步:标题去重
- 对 DOI 去重后的剩余论文,用归一化标题作为键
- 如果两篇论文的归一化标题完全相同,则视为重复,保留 PubMed 版本
- 如果归一化标题相似度 > 90%(如仅差几个字),也视为重复,保留 PubMed 版本
第 4 步:统计并告知用户
去重完成后,在报告开头告知:
> 已开启多库去重,可手动关闭
> 共合并 N 条,去重后 K 条(移除 R 条重复)
第 5 步:用户要求不去重时
如果用户说「不用去重」「关闭去重」「重复的也要」,则直接合并两路结果,不去重,并告知:
> 未开启去重,已保留跨库重复项
输出格式
找到文献时
📄 检索结果 [1/N]
标题:{title}({中文译名,如有})
作者:{authors}
年份 / 来源:{year} · {venue}
被引次数:{citations}(若有)
🔗 链接:
- 原文:{url}
- PDF:{pdf_url}(若有)
📋 摘要:{snippet 或 PubMed 摘要中文概述}
---
未找到 / 全部源被拦截时
❌ 未找到符合条件的文献 / 全部数据源暂不可达
检索条件:{query},年份≥{ylo}
已开启多库去重:是
尝试数据源:PubMed、KipHub、学术搜索Pro、香港镜像、Google 官方
结果:{note 中的具体原因}
建议:稍后重试;或换更宽泛关键词;或切换香港节点重试
第一原则:真实、可验证,绝不编造
- ✅ 只返回 web_fetch 真实获取的文献
- ✅ 明确标注「未找到」当检索无果或所有源被拦截
- ✅ 提供可点击的链接(PubMed / DOI / 原文 / PDF)
- ❌ 绝不生成虚假标题、作者、PMID、引用数或下载链接
- ❌ 网络不通或源被拦截时,如实说明,不臆造结果
平台兼容性
- ✅ 任何支持
web_search+web_fetch的 Agent 工具(deepseek-pp、WorkBuddy 等) - ✅ 不依赖
python_exec,不受 Pyodide 沙箱网络限制 - ✅ 无需安装 Python 或任何依赖
- ⚠️ 部分镜像站需要 JS 渲染,
web_fetch可能无法提取,此时自动回退下一源 - ⚠️ 香港镜像必须香港节点
限制与注意事项
| 限制 | 说明 |
|---|---|
| 已失效的源 | 灯塔 JSON API(返回 403)、烂番薯(返回 403)已从默认回退链移除 |
| PubMed 摘要页 | 被 cookie 拦截,不可用。改用搜索页提取摘要片段,或用 Europe PMC 兜底获取完整摘要 |
| JS 渲染页面 | 部分镜像站依赖 JS 渲染,web_fetch 可能拿不到内容,此时回退到下一源 |
| 反爬机制 | 部分镜像站对非浏览器 UA 返回验证码,web_fetch 可能无法绕过 |
| 结果数量 | web_fetch 单次返回内容有限,通常前 10 条结果可用 |
| 香港节点 | 香港镜像必须香港节点,否则提示用户切换 |