DOI / 标题精确解析
元数据检索入门
DOI / 标题精确解析
快速拉取元数据、全文和引用证据,科研 Agent 的基础入口
用户场景
用户已有 DOI 或论文标题,只想快速拉取元数据、全文和引用证据。这是科研 Agent 最基础的入口操作。
预估调用量
~3–5 次 API 调用 / 一次解析
适用工具
meta-searchcontent调用链路
DOI/标题→ meta-search 精确查询→ 元数据→ content 全文
输入示例
用户输入: "DOI: 10.1038/s41586-021-03819-2" 或:"论文标题: Highly accurate protein structure prediction with AlphaFold" 注意:请替换为你的真实 DOI 或标题
输出示例
{
"title": "Highly accurate protein structure prediction with AlphaFold",
"doi": "10.1038/s41586-021-03819-2",
"venue": "Nature",
"year": 2021,
"authors": ["Jumper, J.", "Evans, R.", ...],
"doc_id": "由 meta-search 返回的真实 ID",
"full_text_preview": "The prediction of protein three-dimensional structure..."
}Agent Prompt 示例
你是一个文献解析 Agent。当用户提供 DOI 或标题时:
1. 调用 meta-search 精确查找该文献
2. 返回元数据(标题、作者、年份、期刊、DOI)
3. 调用 content 读取全文摘要
4. 结构化输出分步实现
Step 1: 环境准备
安装依赖并配置 API Token
!pip install httpx
import os
os.environ["SCIVERSE_API_TOKEN"] = "sv-your-token-here" # 替换为你的真实值
Step 2: 通过 DOI 精确查找文献
用 meta-search 按 DOI 精确匹配
import os
import asyncio
import httpx
BASE = "https://api.sciverse.space"
TOKEN = os.environ["SCIVERSE_API_TOKEN"]
HEADERS = {"Authorization": f"Bearer {TOKEN}"}
async def resolve_doi(doi: str):
"""\u901a\u8fc7 DOI \u7cbe\u786e\u67e5\u627e\u6587\u732e\u5143\u6570\u636e"""
async with httpx.AsyncClient(timeout=30) as client:
resp = await client.post(
f"{BASE}/meta-search", headers=HEADERS,
json={
"query": doi,
"filters": [{"field": "doi", "operator": "FILTER_OP_EQ", "value": doi}],
"page": 1, "page_size": 1
}
)
resp.raise_for_status()
data = resp.json()
if data.get("total_count", 0) > 0:
return (data.get("results") or [None])[0]
return None
async def resolve_title(title: str):
"""\u901a\u8fc7\u6807\u9898\u6a21\u7cca\u67e5\u627e"""
async with httpx.AsyncClient(timeout=30) as client:
resp = await client.post(
f"{BASE}/meta-search", headers=HEADERS,
json={"query": title, "filters": [], "page": 1, "page_size": 5}
)
resp.raise_for_status()
return (resp.json().get("results") or [])
# \u793a\u4f8b\uff1a\u901a\u8fc7 DOI \u89e3\u6790
paper = await resolve_doi("10.1038/s41586-021-03819-2")
if paper:
print(f"Title: {paper['title']}")
print(f"Venue: {paper.get('publication_venue_name_unified', 'N/A')}")
print(f"Year: {paper.get('publication_published_year', 'N/A')}")
print(f"Doc ID: {paper.get('doc_id', 'N/A')}")
Step 3: 读取全文摘要
用 content 接口拉取论文开头段落
async def read_abstract(doc_id: str):
"""\u8bfb\u53d6\u8bba\u6587\u5f00\u5934 1500 \u5b57\u7b26\u4f5c\u4e3a\u6458\u8981"""
async with httpx.AsyncClient(timeout=30) as client:
resp = await client.get(
f"{BASE}/content", headers=HEADERS,
params={"doc_id": doc_id, "offset": 0, "limit": 1500}
)
resp.raise_for_status()
return resp.json()["text"]
if paper and paper.get("doc_id"):
abstract = await read_abstract(paper["doc_id"])
print(f"\
Full text preview:\
{abstract[:500]}...")
注意事项
- DOI 精确查询使用 FILTER_OP_EQ 操作符
- 如果 DOI 查不到,可回退到标题模糊查询
- content 接口返回的是 text 字段,非 content
- 这是科研 Agent 最基础的入口操作,建议封装为通用工具函数
FAQ
DOI 查不到怎么办?
可以回退到标题、作者和年份组合检索。
解析结果要返回什么?
至少返回 title、authors、year、venue、doi、doc_id。
PMID 和 DOI 都有时用哪个?
可同时保留,DOI 适合跨出版商识别,PMID 适合生物医学场景。
解析后下一步做什么?
通常用 doc_id 调 content 读取摘要或全文上下文。
下一步
还没有 API Key?
登录控制台「密钥」即可创建。同一套 API Key 可用于已开通的 Sciverse、点石与 Skills 能力,提供基础试用额度,具体以账号权限为准。