用 Sciverse 构建科研文献综述 Agent
AgentRAG进阶
用 Sciverse 构建科研文献综述 Agent
从一句研究问题出发,自动检索、摘要、生成带引用的文献综述
用户场景
科研人员或 AI Agent 需要针对一个研究问题,自动检索相关文献、提取关键证据段落,并生成一份带引用的文献综述。
预估调用量
~15–30 次 API 调用 / 一次综述任务
适用工具
agentic-searchcontent调用链路
agentic-search→ doc_id + chunk + offset→ content→ evidence markdown
输入示例
用户在 Claude / Cursor 中提问: "请帮我综述 2020–2024 年 Transformer 在蛋白质结构预测领域的应用进展,列出关键论文和核心贡献。"
输出示例
## 文献综述:Transformer 在蛋白质结构预测中的应用(2020–2024) ### 1. AlphaFold2 的突破 Jumper et al. (2021) 提出 AlphaFold2,利用 Evoformer 模块... [来源: Nature, doc_id: af2_xxx, offset: 12480] ### 2. ESMFold 的端到端预测 Lin et al. (2023) 提出 ESMFold... [来源: Science, doc_id: esm_yyy, offset: 8320] --- 共检索 12 篇核心文献,提取 28 个证据片段。
Agent Prompt 示例
你是一个科研文献综述 Agent。当用户提出研究问题时:
1. 调用 agentic-search(query=用户问题, top_k=20) 获取相关片段
2. 对每个高分片段,调用 content(doc_id=hit.doc_id, offset=hit.offset, limit=2000) 获取上下文
3. 整理为结构化综述,每个论点必须标注来源 [doc_id, offset]
4. 不要编造任何引用,所有信息必须来自 Sciverse 返回的真实数据分步实现
Step 1: 环境准备
安装依赖并配置 API Token
# 安装所需 Python 包
!pip install httpx anthropic
# 设置环境变量(替换为你的真实 Token)
import os
os.environ["SCIVERSE_API_TOKEN"] = "sv-your-token-here" # 替换为你的真实值
import os
os.environ["ANTHROPIC_API_KEY"] = "sk-ant-..." # 替换为你的真实值
Step 2: 语义检索相关片段
使用 agentic-search 获取与研究问题最相关的文献片段
import os
import asyncio
import httpx
BASE = "https://api.sciverse.space"
TOKEN = os.environ["SCIVERSE_API_TOKEN"]
HEADERS = {"Authorization": f"Bearer {TOKEN}"}
async def search_literature(query: str, top_k: int = 20):
async with httpx.AsyncClient(timeout=30) as client:
resp = await client.post(
f"{BASE}/agentic-search",
headers=HEADERS,
json={"query": query, "top_k": top_k}
)
resp.raise_for_status()
return (resp.json().get("hits") or [])
async def main():
hits = await search_literature(
"Transformer applications in protein structure prediction 2020-2024"
)
print(f"Found {len(hits)} relevant chunks")
for h in hits[:3]:
print(f" [{h['score']:.2f}] {h['title'][:60]}...")
return hits
hits = await main()
Step 3: 读取原文上下文
对高分片段调用 content 接口获取更完整的上下文
async def read_context(doc_id: str, offset: int = 0, limit: int = 2000):
"""读取指定文档的原文片段。返回 {text, next_offset, more}"""
async with httpx.AsyncClient(timeout=30) as client:
resp = await client.get(
f"{BASE}/content",
headers=HEADERS,
params={"doc_id": doc_id, "offset": offset, "limit": limit}
)
resp.raise_for_status()
return resp.json()
async def gather_evidence(hits, top_n=5):
sorted_hits = sorted(hits, key=lambda x: x["score"], reverse=True)[:top_n]
evidences = []
for hit in sorted_hits:
ctx = await read_context(hit["doc_id"], hit.get("offset", 0))
evidences.append({
"title": hit["title"],
"doc_id": hit["doc_id"],
"offset": hit.get("offset", 0),
"chunk": hit.get("chunk", ""),
"context": ctx["text"], # 注意:响应字段是 text
"score": hit["score"]
})
return evidences
evidences = await gather_evidence(hits)
Step 4: 生成带引用的综述(可选增强)
将证据传给 LLM 生成结构化综述。此步骤依赖 Anthropic API Key,非 Sciverse 必需
from anthropic import Anthropic
client = Anthropic() # 自动读取 ANTHROPIC_API_KEY
evidence_text = "\
\
".join([
f"[{e['doc_id']}, offset={e['offset']}] {e['title']}\
{e['context']}"
for e in evidences
])
msg = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=4096,
messages=[{
"role": "user",
"content": f"""基于以下文献证据,生成一份关于 Transformer 在蛋白质结构预测中应用的综述。
每个论点必须标注来源 [doc_id, offset]。
不要编造任何未在证据中出现的信息。
{evidence_text}"""
}]
)
print(msg.content[0].text)
注意事项
- 所有引用必须来自 Sciverse 返回的真实 doc_id 和 offset,不要让 LLM 编造
- agentic-search 的 top_k 范围为 1–100,综述场景建议 top_k=20
- content 接口默认 limit=700 字符;如需更多上下文可传入更大值(如 2000–4096)
- 如需全文,可循环调用 content 并使用 next_offset 拼接
- 生产环境建议加 try/except 处理 404(文档无全文)和 429(账号配额限制)
FAQ
适合什么综述场景?
适合从开放研究问题出发生成初版文献综述,并保留引用证据。
如何保证综述可追溯?
每个结论都应绑定 doc_id、quote 和 offset,不能只输出模型总结。
需要人工复核吗?
需要,Agent 适合生成初稿和证据包,最终观点仍应由研究者确认。
和普通搜索结果有什么区别?
本案例强调证据链、上下文和引用位置,而不是只返回论文列表。
下一步
还没有 API Key?
登录控制台「密钥」即可创建。同一套 API Key 可用于已开通的 Sciverse、点石与 Skills 能力,提供基础试用额度,具体以账号权限为准。