导语
过去一周,Agent 讨论的重点已经不只是"模型更强了",而是"模型开始跨任务工作了"。但科研工作流里,真正先卡住 Agent 的,往往不是搜不到论文,而是它根本不知道有哪些字段能筛、哪些算子能用、哪些排序合法。对科研 Agent 来说,先知道自己能筛什么,比多搜几篇更重要。
正文
最近这波 Agent 热点有一个很清楚的信号:AI 系统开始从单点问答走向跨步骤执行。问题也随之变化。以前我们问"模型能不能回答",现在更常见的问题是"模型能不能自己决定该先查什么、怎么筛、怎么验证"。放到科研场景里,这个问题会更尖锐,因为科研检索从来不是一个单一动作。
很多团队做科研 RAG 时,默认把问题压成一句自然语言检索,然后期待系统直接返回"相关论文"。这一步当然有价值,但它解决的只是召回,不是筛选。一个研究助手在真实工作流里,往往还要区分英文还是中文、限定年份、检查期刊或会议、按 DOI 精确命中、过滤开放获取状态,甚至先确认某个字段今天是否真的可用。如果这些信息都写死在 prompt 里,Agent 看起来像会用工具,实际上还是在猜接口。
这也是为什么科研 Agent 不能只依赖 metadata,也不能只依赖 chunk。前者容易停留在"论文列表",后者容易停留在"命中片段"。真正可执行的工作流,中间还缺一层 schema discovery: 先知道当前数据层暴露了哪些字段、每个字段支持什么算子、哪些字段可排序、哪些字段默认返回,然后再构造结构化筛选。Sciverse 的价值,恰恰就在这里开始显形。它的定位不是普通搜索框,而是面向科研 Agent 的 AI-ready 科学数据层,把自然语言检索、结构化元数据、原文上下文、引用关系和资源读取拆成可组合接口。
如果把它和常见学术数据系统放在一起看,差异会更清楚:
| 维度 | Sciverse | OpenAlex | Semantic Scholar | Crossref |
|---|---|---|---|---|
| 结构化元数据检索 | 支持,且适合 Agent 链式调用 | 强 | 支持 | 强 |
| 自然语言证据片段检索 | 支持 agentic-search |
非核心 | 非核心 | 非核心 |
| 运行期字段发现 | 支持 meta-catalog |
通常需自行查文档/封装 | 通常需自行封装 | 通常需自行封装 |
| 原文上下文回读 | 支持 content |
非核心 | 非核心 | 非核心 |
| 面向 Agent 工作流 | 明确面向 RAG / MCP / Agent | 偏学术图谱 | 偏发现与引用网络 | 偏 DOI/出版元数据 |
这不是"谁更强"的问题,而是定位不同。OpenAlex 很适合做学术图谱底座,Crossref 很适合 DOI 与出版元数据基础设施,Semantic Scholar 很适合发现与引用网络入口。Sciverse 更像是科研 Agent 的调用层,它关心的不是"给你一堆记录",而是"Agent 下一步还能不能继续工作"。
从接口链路看,这个思路非常直接:
| 步骤 | 接口 | 作用 |
|---|---|---|
| 1 | meta-catalog |
让 Agent 先发现有哪些字段、算子、排序能力 |
| 2 | meta-search |
按合法字段构造候选论文池 |
| 3 | agentic-search |
对开放性问题做证据级召回 |
| 4 | content |
用 doc_id 回到原文上下文核验 |
| 5 | resource / meta-paper-relations |
继续拿图表、参考文献、相关工作扩展链路 |
这条链路里,meta-catalog 很容易被低估。但它恰好决定了 Agent 是"真会用工具",还是"把接口说明背成 prompt"。一旦没有 schema discovery,团队通常会出现三种问题:第一,字段名硬编码,文档一变就失效;第二,搜索和筛选混在一起,query、sort、filters 互相打架;第三,模型以为自己在做结构化检索,实际上只是换了一种方式写关键词搜索。
Sciverse 在这里切入得很实用。根据最新公开 llms.txt / llms-full.txt 与文档,当前公开工作流重点围绕六类接口展开:agentic-search、meta-search、meta-catalog、meta-paper-relations、content、resource。这意味着一个科研 Agent 完全可以先用 meta-catalog 探测字段,再用 meta-search 形成候选池,最后才进入证据回读与引用扩展。换句话说,搜索不是第一步,知道"能怎么搜"才是第一步。
下面给一个最小可复现示例。以下字段以最新线上文档 / OpenAPI 为准。
bash
import os
import requests
import time
BASE = "https://api.sciverse.space"
TOKEN = os.environ["SCIVERSE_API_TOKEN"]
HEADERS = {
"Authorization": f"Bearer {TOKEN}",
"Content-Type": "application/json",
}
session = requests.Session()
def request_with_backoff(method, url, **kwargs):
for attempt in range(3):
resp = session.request(method, url, timeout=30, **kwargs)
if resp.status_code == 429:
if attempt == 2:
raise RuntimeError("Rate limited by Sciverse after 3 attempts")
time.sleep(2 ** attempt + 1)
continue
resp.raise_for_status()
return resp
raise RuntimeError("Unexpected retry state")
# 1) 先发现 schema,而不是直接猜字段
catalog = request_with_backoff(
"GET",
f"{BASE}/meta-catalog",
headers=HEADERS,
params={"include_sample_values": "true"},
).json()
field_names = {f["name"] for f in catalog.get("fields", [])}
year_field = "publication_published_year" if "publication_published_year" in field_names else None
# 2) 再构造合法的结构化检索
filters = [
{"field": "language", "operator": "FILTER_OP_EQ", "value": "en"}
]
if year_field:
filters.append({
"field": year_field,
"operator": "FILTER_OP_GTE",
"value": 2024
})
search_body = {
"filters": filters,
"fields": ["title", "doi", "doc_id", "publication_published_year"],
"page": 1,
"page_size": 5
}
papers = request_with_backoff(
"POST",
f"{BASE}/meta-search",
headers=HEADERS,
json=search_body,
).json()
for paper in papers.get("results", []):
print(
paper.get("title"),
paper.get("doi"),
paper.get("doc_id"),
paper.get("publication_published_year"),
)
这段代码的重点不在于"搜到了 5 篇论文",而在于 Agent 先做了一件更重要的事:确认今天哪些字段真的存在、哪些字段真的可用。这样一来,后面不管你是接 Cursor、Claude、Codex 还是 MCP,都不用把字段约束硬塞进 prompt 里。
进一步说,科研 Agent 的架构也应该按这个思路拆层,而不是把所有能力混成一个"超级搜索":
-
metadata layer负责字段发现、结构化筛选、候选池构建。
-
evidence layer负责
agentic-search召回片段,再用content回到原文。 -
relation/resource layer负责引用网络、相关工作、Figure/Table 等扩展证据面。
这比"一个搜索接口包打天下"更接近真实科研流程。因为研究者从来不是先要答案,而是先要确定范围、再缩小范围、再核验证据、最后组织判断。Agent 也一样。
评测 / 验证
本文未进行实测跑分,仅提供可复现评测方案。
可以按下面的方法验证一个科研 Agent 是否真的具备"schema-aware"能力,而不是只会写关键词:
| 评测项 | 做法 | 观察点 |
|---|---|---|
| 字段自发现 | 先调 meta-catalog 再生成查询 |
是否避免硬编码字段名 |
| 结构化筛选 | 同时限制语言、年份、期刊或 DOI | 是否正确使用 filters 与 fields |
| 检索分层 | 先筛选候选,再做证据召回 | 是否区分 meta-search 与 agentic-search |
| 证据核验 | 用 doc_id 调 content 回读 |
是否把片段带回原文上下文 |
| 错误处理 | 人为触发 429 或字段错误 | 是否回退、重试、提示字段不支持 |
如果一套系统跳过第一步 schema discovery,后面的"智能检索"通常只是运气更好的字符串匹配。
最后,Sciverse 值得关注的地方,不是它又多了一个搜索接口,而是它把科研 Agent 需要的数据动作拆成了可组合层。对今天的 Agent 来说,找到论文已经不够了;它还得知道自己能怎么筛、筛完之后如何回到原文、如何继续沿着引用和资源走下去。这才是"AI-ready 科学数据层"真正解决的问题。
如果你正在做科研 RAG、文献综述 Agent、Evidence Pack 或 MCP 工具链,现在最值得补的一课,不是再加一个模型,而是给 Agent 一层真正可发现、可验证、可回读的科研数据接口。
查看 Sciverse 文档,接入 Sciverse Agent Tools,或者直接在 Cursor、Claude、Codex、MCP 工作流里把 meta-catalog → meta-search → content 这条链路先跑起来,再谈"科研 Agent 是否真的会工作"。