用 Sciverse 做科学 RAG 数据源
RAGAgent进阶
用 Sciverse 做科学 RAG 数据源
将 Sciverse 作为 RAG pipeline 的检索后端,为 LLM 提供可信科学证据
用户场景
开发者构建科学问答系统或 RAG 应用,需要从权威学术文献中检索证据来 ground LLM 的回答,避免幻觉。
预估调用量
~5–15 次 API 调用 / 一次 RAG 查询
适用工具
agentic-searchcontent调用链路
agentic-search→ chunks + scores→ score 过滤→ LLM grounded answer
输入示例
RAG 系统收到用户问题: "mRNA 疫苗的脂质纳米颗粒递送系统有哪些最新改进?"
输出示例
{
"answer": "近年来 LNP 递送系统的改进主要集中在...[1][2]",
"citations": [
{"id": 1, "doc_id": "lnp_001", "title": "Ionizable lipids for...", "chunk": "...", "score": 0.92},
{"id": 2, "doc_id": "lnp_002", "title": "Biodegradable LNP...", "chunk": "...", "score": 0.87}
]
}Agent Prompt 示例
你是一个科学 RAG 系统。对于每个用户问题:
1. 调用 agentic-search 获取相关文献片段
2. 根据 score 筛选 top 片段作为证据(建议阈值 0.6–0.7)
3. 基于证据生成回答,每句话标注来源 [编号]
4. 如果证据不足以回答,明确告知用户"当前检索结果不足以回答该问题"分步实现
Step 1: 环境准备
安装依赖并配置环境变量
!pip install httpx openai
import os
os.environ["SCIVERSE_API_TOKEN"] = "sv-your-token-here" # 替换为你的真实值
import os
os.environ["OPENAI_API_KEY"] = "sk-..." # 替换为你的真实值
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 sciverse_retrieve(query: str, top_k: int = 10):
"""调用 agentic-search 获取相关文献片段"""
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()
data = resp.json()
return [
{"text": h.get("chunk", ""), "doc_id": h["doc_id"],
"title": h["title"], "score": h["score"]}
for h in (data.get("hits") or [])
]
Step 3: 证据过滤
按 score 阈值过滤低质量片段
def filter_evidence(hits: list, threshold: float = 0.65) -> list:
"""过滤低分片段,按 score 降序排列"""
filtered = [h for h in hits if h["score"] >= threshold]
return sorted(filtered, key=lambda x: x["score"], reverse=True)
async def main():
hits = await sciverse_retrieve("mRNA LNP delivery system improvements")
top_evidence = filter_evidence(hits, threshold=0.65)
print(f"Retrieved {len(hits)} chunks, filtered to {len(top_evidence)} high-quality")
return top_evidence
top_evidence = await main()
Step 4: 基于证据生成 Grounded Answer(可选增强)
将证据注入 LLM prompt,生成带引用的回答。此步骤依赖 OpenAI API Key,非 Sciverse 必需
from openai import OpenAI
client = OpenAI() # 自动读取 OPENAI_API_KEY
context = "\
\
".join([
f"[{i+1}] {e['title']}\
{e['text']}"
for i, e in enumerate(top_evidence[:5])
])
resp = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "基于提供的文献证据回答问题。每个论点用 [编号] 标注来源。如果证据不足,说明无法确定。不要编造未在证据中出现的信息。"},
{"role": "user", "content": f"问题:mRNA LNP 递送系统最新改进?\
\
证据:\
{context}"}
]
)
print(resp.choices[0].message.content)
注意事项
- agentic-search 的 top_k 范围为 1–100,RAG 场景建议 10–20
- score 阈值建议 0.6–0.7,过低会引入噪声,过高可能丢失相关证据
- 生产环境建议缓存高频查询结果,减少 API 调用和延迟
- 如需更精确的证据,可对 top hits 再调用 content(doc_id, offset) 接口获取完整段落上下文
FAQ
Sciverse 在 RAG 中负责什么?
负责提供可信科学证据检索和全文上下文,不负责向量库编排或最终回答生成。
为什么不用普通网页搜索?
Sciverse 返回论文级、证据级数据,更适合需要引用和溯源的科研回答。
是否需要自建向量库?
可以按业务需要自建,但 Sciverse 可作为实时科学证据召回层。
RAG 输出要保留哪些字段?
建议保留 doc_id、title、quote、offset、year 和检索 query。
下一步
还没有 API Key?
登录控制台「密钥」即可创建。同一套 API Key 可用于已开通的 Sciverse、点石与 Skills 能力,提供基础试用额度,具体以账号权限为准。