系统综述初筛助手
综述Agent高级

系统综述初筛助手

用 meta-catalog → meta-search → agentic-search 做 PRISMA-style 初筛

用户场景
医学、生命科学、材料等领域的研究者需要做系统综述,第一步是 PRISMA-style 初筛:从海量文献中筛选出符合纳入标准的候选论文。
预估调用量
~30–80 次 API 调用 / 一次初筛任务
适用工具
meta-catalogmeta-searchagentic-searchcontent
调用链路
meta-catalog→ 确认可筛字段→ meta-search 广撒网→ agentic-search 精筛→ PRISMA 流程图

输入示例

系统综述主题:“CAR-T 细胞疗法在实体瘤中的临床试验”
纳入标准:2019–2024年、英文、临床试验类型
排除标准:综述文章、动物实验

输出示例

PRISMA Flow:
- Identification: 2,847 records (meta-search)
- Screening: 892 records (agentic-search relevance > 0.7)
- Eligibility: 156 records (full-text review)
- Included: 43 studies

Export: CSV with title, DOI, year, relevance_score, inclusion_reason

Agent Prompt 示例

你是一个系统综述初筛 Agent。按 PRISMA 流程执行:
1. meta-catalog 确认可用筛选字段
2. meta-search 广撒网(年份+关键词)
3. agentic-search 语义精筛
4. content 读取摘要判断纳入/排除
5. 输出 PRISMA 流程图和纳入文献列表

分步实现

Step 1: 环境准备

安装依赖并配置 API Token

!pip install httpx pandas
import os
os.environ["SCIVERSE_API_TOKEN"] = "sv-your-token-here"  # 替换为你的真实值

Step 2: 查询可用筛选字段

用 meta-catalog 确认数据库支持哪些筛选条件

import os
import asyncio
import httpx

BASE = "https://api.sciverse.space"
TOKEN = os.environ["SCIVERSE_API_TOKEN"]
HEADERS = {"Authorization": f"Bearer {TOKEN}"}

async def get_catalog():
    async with httpx.AsyncClient(timeout=30) as client:
        resp = await client.get(f"{BASE}/meta-catalog", headers=HEADERS)
        resp.raise_for_status()
        return resp.json()["fields"]

fields = await get_catalog()
for f in fields:
    print(f"{f['name']} ({f.get('type','')}): operators={f.get('operators', [])}")

Step 3: 广撒网检索

用 meta-search 按年份和关键词获取候选池

import pandas as pd

async def broad_search(query: str, year_from: int, year_to: int, page_size: int = 100):
    """\u5e7f\u6492\u7f51: \u6309\u5e74\u4efd\u8303\u56f4\u68c0\u7d22\u6240\u6709\u5019\u9009\u6587\u732e"""
    all_results = []
    page = 1
    while True:
        async with httpx.AsyncClient(timeout=30) as client:
            resp = await client.post(
                f"{BASE}/meta-search", headers=HEADERS,
                json={
                    "query": query,
                    "filters": [
                        {"field": "publication_published_year", "operator": "FILTER_OP_GTE", "value": year_from},
                        {"field": "publication_published_year", "operator": "FILTER_OP_LTE", "value": year_to},
                    ],
                    "page": page, "page_size": page_size
                }
            )
            resp.raise_for_status()
            data = resp.json()
            all_results.extend((data.get("results") or []))
            if len(all_results) >= data.get("total_count", 0) or len((data.get("results") or [])) < page_size:
                break
            page += 1
    return all_results, data.get("total_count", 0)

INCLUSION_QUERY = "CAR-T cell therapy solid tumor clinical trial"
results, total = await broad_search(INCLUSION_QUERY, 2019, 2024)
print(f"Identification: {total} records found")

Step 4: 语义精筛与纳入判断

用 agentic-search 对候选文献做语义相关性评分,筛选符合纳入标准的论文

async def semantic_screen(candidates: list[dict], query: str, top_k: int = 100):
    """\u8bed\u4e49\u7cbe\u7b5b: \u7528 agentic-search \u5bf9\u5019\u9009\u6587\u732e\u8bc4\u5206"""
    candidate_ids = {r["doc_id"] for r in candidates if r.get("doc_id")}
    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()
        hits = (resp.json().get("hits") or [])
    return [h for h in hits if h.get("doc_id") in candidate_ids]

hits = await semantic_screen(
    results,
    "CAR-T cell therapy clinical trial solid tumor patients outcomes"
)

# \u6309\u76f8\u5173\u6027\u5206\u6570\u7b5b\u9009
# screening 现在是 identification 候选池的子集
screened = [h for h in hits if h["score"] >= 0.7]
print(f"Screening: {len(screened)} records (score >= 0.7)")

# \u8f93\u51fa PRISMA \u6d41\u7a0b\u6570\u636e
prisma = {
    "identification": total,
    "screening": len(screened),
    "included": len([h for h in screened if h["score"] >= 0.85])
}
print(f"\
PRISMA Flow: {prisma}")

# \u5bfc\u51fa CSV
df = pd.DataFrame(screened)
df.to_csv("screened_papers.csv", index=False)
print("Exported to screened_papers.csv")

注意事项

  • 适合医学、生命科学、材料等高频系统综述场景
  • meta-search 广撒网阶段可能需要分页拉取,注意 page_size 上限,建议设置 max_pages 防止无限循环
  • agentic-search 的 score 阈值建议根据领域调整(0.7–0.85)
  • 完整 PRISMA 流程还需人工全文审阅,本案例覆盖自动化初筛部分
  • 建议将筛选结果导出为 CSV 便于团队协作审阅

FAQ

是否能替代人工系统综述?

不能,只适合自动化初筛和候选集整理,最终纳入仍需人工判断。

如何控制筛选条件?

用 meta-catalog 确认字段,再用 meta-search 和 agentic-search 逐步筛选。

输出应包含什么?

建议包含候选数量、纳入理由、排除理由、关键字段和可复核证据。

如何降低漏筛?

先用宽条件构建候选池,再逐步加入语义筛选和人工复核。

下一步

还没有 API Key?

登录控制台「密钥」即可创建。同一套 API Key 可用于已开通的 Sciverse、点石与 Skills 能力,提供基础试用额度,具体以账号权限为准。

前往控制台