为什么科研 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 不知道有哪些字段可用,它只能猜字段名。猜错字段名,就会出现三类问题:

  1. 查询失败:接口返回 400,Agent 不知道怎么修。
  2. 查询失真:看似查了年份或期刊,实际上过滤条件没有生效。
  3. 工作流断裂:找到论文后,无法继续读全文、查引用或拉图表。

所以,科研 Agent 的关键不是“多一个搜索按钮”,而是“让 Agent 先知道这个科学数据系统能怎么查”。

3. 行业对比:图谱、元数据和 Agent 数据层不是同一件事

OpenAlex、Semantic Scholar、Crossref、PubMed 都是非常重要的科研基础设施。它们适合不同层面的任务:开放学术图谱、论文元数据、DOI 注册、生命科学文献索引。

Sciverse 的切入点不同:它不是要替代这些系统,而是把科研文献检索、结构化筛选、原文上下文、图表资源和引用关系封装成 Agent 可以直接调用的数据接口。

维度SciverseOpenAlexSemantic ScholarCrossrefPubMed
元数据检索支持,面向 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-relationsunique_id分页查引用、参考文献、相关工作
Evidence Layer回到原文和资源content/resourcedoc_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)

这段代码里最重要的不是请求本身,而是顺序:

  1. 先通过meta-catalog学习字段。
  2. 再用meta-search构建候选池。
  3. 最后用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_idunique_id、offset 或 DOI引用缺失率、人工复核通过率
多轮稳定性同一任务重复运行多次请求结构一致性、字段选择一致性

这里不应该直接写“准确率提升多少”或“成本降低多少”。除非有真实实验日志、样本集和统计方法,否则这些数字都不应该出现在文章里。

9. 传播金句

科研 Agent 的核心能力不是多调一个搜索工具,而是知道自己能按什么字段查、能沿着什么关系扩展、能回到哪里复核。

换句话说:

MCP 让工具接入 Agent,Sciverse 让科研数据真正进入 Agent 工作流。

10. 结尾 CTA

如果你正在构建科研 RAG、Literature Review Agent、Scientific Claim Checker,或者希望在 Cursor、Claude、Codex、MCP 工作流里接入科学文献数据,可以从三步开始:

  1. 查看 Sciverse 文档,理解agentic-searchmeta-searchmeta-catalogcontentresourcemeta-paper-relations的分工。
  2. 接入 Sciverse Agent Tools,用 MCP server、Python SDK、TypeScript SDK 或 Skill 方式挂到你的 Agent。
  3. 先实现一个最小链路: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