为什么科研 Agent 不能只靠搜索工具:从字段发现到引用关系
导语
MCP 和 Tool Calling 正在让 Agent 更容易接入外部系统。但在科研场景里,问题不是“能不能调工具”,而是工具返回的数据能不能被校验、筛选、追溯和扩展。科研 Agent 真正需要的,是一层 AI-ready 的科学数据接口。
正文
1. 热点背景:Agent 工具越来越多,但科研问题没有变简单
过去一年,MCP、Agent SDK、函数调用、技能市场、IDE 内 Agent 工作流快速普及。开发者现在可以很容易把一个检索工具挂到 Claude、Cursor、Codex、Windsurf 或自研 Agent 里。
但科研场景有一个特殊问题:论文不是普通网页,科研问答也不是普通搜索。
一个科研 Agent 需要回答的问题通常不是:
“帮我找几篇论文。”
而是:
“2021 年以后,哪些论文研究了某个方向?它们的作者、期刊、引用关系、相关工作是什么?哪些论文有全文?哪些可以继续读取上下文?哪些结论来自原文片段,而不是模型记忆?”
这意味着,工具调用只是入口。科研 Agent 更需要一个可被机器理解的数据层:
- 字段能被发现,而不是靠开发者猜
- 筛选能被校验,而不是靠 prompt 拼字段名
- 论文能继续读原文,而不是只返回标题
- 引用和相关工作能分页展开,而不是停在一条结果列表
- 图表资源能被取回,而不是只存在 PDF 里
这正是 Sciverse 的定位:面向科研 Agent 的 AI-ready 科学数据层。
2. 技术问题:很多 Agent 会“搜索”,但不会“构造科研查询”
通用搜索工具接入 Agent 后,最常见的链路是:
用户问题 -> 搜索 -> 返回若干结果 -> LLM 总结这对普通信息检索够用,但对科研工作流不够。
因为科研查询通常有结构化约束:
- 年份:2022 年以后
- 载体:Nature、Science、Cell、arXiv、PubMed 来源
- 作者:某个课题组或作者
- 主题:AI for Science、materials science、biology
- 指标:citation_count、influential_citation_count、FWCI
- 关系:这篇论文引用了谁,谁引用了它,相关工作有哪些
- 可读性:是否存在可读取的全文
doc_id
如果 Agent 不知道有哪些字段可用,它只能猜字段名。猜错字段名,就会出现三类问题:
- 查询失败:接口返回 400,Agent 不知道怎么修。
- 查询失真:看似查了年份或期刊,实际上过滤条件没有生效。
- 工作流断裂:找到论文后,无法继续读全文、查引用或拉图表。
所以,科研 Agent 的关键不是“多一个搜索按钮”,而是“让 Agent 先知道这个科学数据系统能怎么查”。
3. 行业对比:图谱、元数据和 Agent 数据层不是同一件事
OpenAlex、Semantic Scholar、Crossref、PubMed 都是非常重要的科研基础设施。它们适合不同层面的任务:开放学术图谱、论文元数据、DOI 注册、生命科学文献索引。
Sciverse 的切入点不同:它不是要替代这些系统,而是把科研文献检索、结构化筛选、原文上下文、图表资源和引用关系封装成 Agent 可以直接调用的数据接口。
| 维度 | Sciverse | OpenAlex | Semantic Scholar | Crossref | PubMed |
|---|---|---|---|---|---|
| 元数据检索 | 支持,面向 Agent 调用 | 强,开放学术图谱优势明显 | 支持 | 强,DOI 与出版元数据优势明显 | 强,生命科学文献优势明显 |
| 字段发现 | meta-catalog返回字段、算子、样本值 | 需要开发者阅读文档封装 | 需要开发者阅读文档封装 | 需要开发者阅读文档封装 | 需要开发者理解 E-utilities |
| 原文上下文读取 | content是核心能力 | 非核心 | 非核心 | 非核心 | 取决于外部全文来源 |
| Figure / Table 资源 | resource支持取论文内资源 | 非核心 | 非核心 | 非核心 | 非核心 |
| 引用 / 参考文献 / 相关工作 | meta-paper-relations支持分页展开 | 强 | 强 | 部分支持 | 场景相对垂直 |
| 面向 MCP / Agent 工作流 | Agent Tools、SDK、MCP server、Skill | 需自行封装 | 需自行封装 | 需自行封装 | 需自行封装 |
更准确的说法是:OpenAlex 更像学术世界的地图,Crossref 更像出版物登记系统,PubMed 更像生命科学入口;Sciverse 更适合作为科研 Agent 在工作流中反复调用的数据层。
4. Sciverse 的切入:先让 Agent 学会“接口自省”
Sciverse 里有一个经常被低估的接口:meta-catalog。
它解决的不是“查哪篇论文”,而是更底层的问题:
Agent 在构造查询之前,怎么知道有哪些字段、哪些算子、哪些枚举值可用?
这件事对 Agent 很关键。因为 Agent 不应该硬编码字段名,也不应该靠自然语言猜测数据库 schema。
典型链路是:
meta-catalog -> 发现可用字段、filterable、sortable、operators、sample_values -> meta-search 构造结构化论文池 -> meta-paper-relations 展开 references / citations / related works -> content / resource 补充原文上下文和图表证据这条链路的重点不是“搜索更快”,而是“科研查询可以被机器构造、检查和复现”。
5. 技术拆解:一个可复核科研 Agent 的数据流
假设我们要构建一个 Literature Review Agent,任务是:
“找出 2022 年以来 AI for Science 方向里,与 scientific discovery agent 相关的论文,并扩展它们的 related works。”
一个稳健的系统不应该直接把自然语言丢给搜索接口就结束,而应该拆成四层:
| 层级 | 目标 | Sciverse 接口 | Agent 应该做什么 |
|---|---|---|---|
| Schema Layer | 发现字段和算子 | meta-catalog | 获取可过滤字段、排序字段、样本值 |
| Candidate Layer | 构建候选论文池 | meta-search | 按年份、主题、关键词、期刊等条件筛选 |
| Relation Layer | 扩展引用网络 | meta-paper-relations | 用unique_id分页查引用、参考文献、相关工作 |
| Evidence Layer | 回到原文和资源 | content/resource | 用doc_id读取上下文,必要时获取 Figure / Table |
注意这里有两个 ID 要分清:
unique_id:元数据记录的全局唯一 ID,适合引用关系、去重、跨服务关联。doc_id:全文 artifact 的内容 ID,适合调用content读取原文。
把这两个 ID 混用,是科研 Agent 接口集成里很常见的错误。
6. 代码示例:先发现字段,再构造结构化检索,再展开相关工作
以下字段以最新线上文档 / OpenAPI 为准。示例使用 Pythonrequests,展示最小可复现链路:meta-catalog -> meta-search -> meta-paper-relations。
importosimporttimeimportrequests BASE_URL="https://api.sciverse.space"TOKEN=os.environ["SCIVERSE_API_TOKEN"]HEADERS={"Authorization":f"Bearer{TOKEN}","Content-Type":"application/json",}defrequest_json(method,path,*,params=None,json=None,max_retries=3):url=f"{BASE_URL}{path}"forattemptinrange(max_retries):resp=requests.request(method,url,headers=HEADERS,params=params,json=json,timeout=30,)ifresp.status_code==429:wait=2**attemptprint(f"Rate limited by Sciverse API, retrying in{wait}s...")time.sleep(wait)continueifresp.status_code>=500:wait=2**attemptprint(f"Upstream error{resp.status_code}, retrying in{wait}s...")time.sleep(wait)continueresp.raise_for_status()returnresp.json()raiseRuntimeError(f"Sciverse API request failed after{max_retries}retries:{path}")# 1. 先读取字段 catalog,避免硬编码未知字段catalog=request_json("GET","/meta-catalog",params={"collection":"papers","include_sample_values":"true",},)fields={item["name"]:itemforitemincatalog["fields"]}required_fields=["title","abstract","publication_published_year","publication_venue_name_unified","citation_count","unique_id","doc_id",]available_fields=[namefornameinrequired_fieldsifnameinfields]# 2. 用 meta-search 构建候选论文池# 注意:query 与显式排序的组合约束以最新 OpenAPI 为准。papers=request_json("POST","/meta-search",json={"collection":"papers","query":"scientific discovery agent AI for Science","year_from":2022,"page":1,"page_size":10,},)results=papers.get("results",[])print(f"Candidate papers:{len(results)}")# 3. 选择有 unique_id 的论文,展开 related worksforpaperinresults[:3]:unique_id=paper.get("unique_id")title=paper.get("title","Untitled")ifnotunique_id:print(f"Skip paper without unique_id:{title}")continuerelations=request_json("POST","/meta-paper-relations",json={"unique_id":unique_id,"relation":"RELATED_WORKS","page":1,"page_size":5,},)related_titles=[item.get("title")foriteminrelations.get("items",[])ifitem.get("title")]print("\nPaper:",title)print("unique_id:",unique_id)print("Related works:")forrelated_titleinrelated_titles:print("-",related_title)这段代码里最重要的不是请求本身,而是顺序:
- 先通过
meta-catalog学习字段。 - 再用
meta-search构建候选池。 - 最后用
meta-paper-relations扩展关系网络。
这比“让模型猜字段名,然后拼一个请求”稳定得多。
7. 为什么meta-paper-relations对科研 Agent 很重要
文献综述不是 Top 10 搜索结果的摘要。
真正的综述工作经常要做“滚雪球检索”:
- 从一篇种子论文出发,看它引用了谁。
- 再看哪些后续论文引用了它。
- 再看系统识别出的 related works。
- 对交叉出现的论文做优先级排序。
- 最后回到全文上下文确认关键论断。
meta-paper-relations的价值就在这里。它让 Agent 不只是查“相似论文”,还可以沿着论文关系做扩展。
| 任务 | 只靠搜索的风险 | 加入论文关系后的改进 |
|---|---|---|
| 找经典基础论文 | 新论文可能排序更靠前,经典论文被淹没 | 用REFERENCES找种子论文引用的基础工作 |
| 找后续影响 | 搜索结果不一定覆盖后续引用 | 用CITATIONS查看谁引用了目标论文 |
| 找相关方向 | 关键词不同导致漏召回 | 用RELATED_WORKS扩展语义相近或图谱相关论文 |
| 做系统综述 | Top-K 结果不可解释 | 引用网络可被记录、分页和复现 |
这也是科研 Agent 和普通搜索助手的区别:它不能只会“搜”,还要会沿着学术关系继续查。
8. 评测 / 验证方案
本文未进行实测跑分,仅提供可复现评测方案。
如果要验证一个 Scientific RAG / Literature Review Agent 是否真的受益于 Sciverse 这种数据层,可以设计以下评测:
| 评测维度 | 方法 | 观察指标 |
|---|---|---|
| 字段构造正确性 | 让 Agent 根据自然语言约束生成meta-search请求 | 字段名错误率、400 错误率、是否先调用meta-catalog |
| 候选论文覆盖 | 给定人工整理的种子论文集 | Top-K 命中率、年份和主题过滤是否生效 |
| 关系扩展质量 | 对目标论文展开REFERENCES/CITATIONS/RELATED_WORKS | 是否能找回关键基础论文和后续论文 |
| 证据可复核性 | 要求每个结论附带doc_id、unique_id、offset 或 DOI | 引用缺失率、人工复核通过率 |
| 多轮稳定性 | 同一任务重复运行多次 | 请求结构一致性、字段选择一致性 |
这里不应该直接写“准确率提升多少”或“成本降低多少”。除非有真实实验日志、样本集和统计方法,否则这些数字都不应该出现在文章里。
9. 传播金句
科研 Agent 的核心能力不是多调一个搜索工具,而是知道自己能按什么字段查、能沿着什么关系扩展、能回到哪里复核。
换句话说:
MCP 让工具接入 Agent,Sciverse 让科研数据真正进入 Agent 工作流。
10. 结尾 CTA
如果你正在构建科研 RAG、Literature Review Agent、Scientific Claim Checker,或者希望在 Cursor、Claude、Codex、MCP 工作流里接入科学文献数据,可以从三步开始:
- 查看 Sciverse 文档,理解
agentic-search、meta-search、meta-catalog、content、resource、meta-paper-relations的分工。 - 接入 Sciverse Agent Tools,用 MCP server、Python SDK、TypeScript SDK 或 Skill 方式挂到你的 Agent。
- 先实现一个最小链路:
meta-catalog -> meta-search -> meta-paper-relations -> content,让 Agent 从“搜索论文”升级到“构造可复核科研工作流”。
Sciverse 不是普通文献搜索 API,也不是聊天机器人。它更适合作为面向科研 Agent 的 AI-ready 科学数据层:让 Agent 能查、能筛、能读、能追引用、能拿图表,也能把每一步留下可复核的数据线索。
参考来源
- Sciverse 文档:https://sciverse.opendatalab.com/docs#sciverse/overview
- Sciverse API 文档:https://sciverse.opendatalab.com/docs#sciverse/api
- Sciverse FAQ:https://sciverse.opendatalab.com/docs#faq
- Sciverse llms.txt:https://sciverse.opendatalab.com/llms.txt
- Sciverse Agent Tools:https://github.com/opendatalab/Sciverse-Agent-Tools
- Sciverse OpenAPI:https://github.com/opendatalab/Sciverse-Agent-Tools/blob/main/openapi.yaml