CF 证据循环(CF Evidence Loop)
研究者不是从答案开始的。他们会对公共记录提出一系列固定问题:发表了什么、是否有被撤稿的内容、正在进行的试验有哪些、什么被批准了以及针对谁、涉及多少人、该领域的建议是什么、以及该领域在资助和预印本中的自我阐述是什么。该技能为智能体提供了这样一个命令行循环,并遵循一条规则:没有来源、日期和未证明内容的记录,绝不返回。
研究内容,非医疗建议。此工具返回的记录描述的是公共文档。它们不会为任何人解释任何内容,标签中的适应症文本也并不等同于任何个体的资格。
1. 该技能的功能
| 问题 | 命令 | 来源 |
|---|---|---|
| 关于这个主题发表了什么? | pubmed "<术语>" [--sort pub_date] | 通过NCBI E-utilities的PubMed |
| 系统评价和Cochrane怎么说? | reviews "<术语>" | PubMed系统评价子集加上Cochrane期刊 |
| 通过开放获取和引文元数据进行搜索 | epmc '<欧洲PMC查询>' | Europe PMC |
| 该DOI被引用了多少次,以及是否为开放获取? | cited <DOI> | Europe PMC |
| 这篇论文是否被撤稿或更正过? | retractions <DOI> [<DOI> ...] | Crossref、Retraction Watch数据 |
| 这个DOI是什么? | doi <DOI> | Crossref |
| FDA何时首次批准该药物? | approval <品牌名> | openFDA Drugs@FDA |
| 当前的美国标签内容是什么? | label <品牌名> [--sections ...] | openFDA标签 |
| EMA何时在欧盟批准了该药物? | ema <药物名> [--file 路径] | 欧洲药品管理局(离线下载的JSON报告) |
| 哪些试验列出了这个疾病? | trials "<疾病>" [--term X] [--status RECRUITING] | ClinicalTrials.gov v2 |
| 注册中心保存了该试验的哪些信息? | trial <NCTId> | ClinicalTrials.gov v2 |
| 这个预印本是什么? | `preprint <biorxiv | medrxiv> ` |
| 在某个时间窗口内出现了哪些CF预印本? | preprints <服务器> <YYYY-MM-DD> <YYYY-MM-DD> [--pattern] | bioRxiv / medRxiv |
| 该变异如何分类? | variants "<ClinVar查询>" | 通过NCBI E-utilities的ClinVar |
| NIH在这个主题上资助了谁? | grants "<文本>" [--fy 2025] | NIH RePORTER |
| UKRI在这个主题上资助了谁? | ukri "<查询>" [--limit 25] | UKRI Gateway to Research(别名:gtr) |
| 某个地区的人口基数是多少? | population <实体> [--variable Count_Person] [--year YYYY] | Google Data Commons |
| 使用CADD、ClinVar、SnpEff、gnomAD频率注释变异 | myvariant "<变异查询>" [--limit 5] | MyVariant.info |
| 查询gnomAD汇总等位基因频率(因设计被拒) | gnomad <染色体-位置-参考-替代> | gnomAD(仅限手动访问;根据目录策略始终被拒) |
| OpenAlex保存了该工作的哪些信息(引文、撤稿、OA)? | `openalex <DOI | ID>` |
| 搜索OpenAlex作品 | openalex-search "<查询>" [--limit 10] | 通过OurResearch的OpenAlex(需要密钥) |
| Unpaywall索引了哪些开放获取位置和许可元数据? | unpaywall <DOI> | 通过OurResearch的Unpaywall |
| Semantic Scholar保存了哪些引文图和论文元数据? | s2 <DOI> | 通过Ai2的Semantic Scholar(别名:semantic-scholar) |
| 解析完整的论文踪迹(Crossref, Unpaywall OA, Semantic Scholar引文) | paper-trail <DOI> | Crossref, Unpaywall, Semantic Scholar(别名:paper) |
| ChEMBL保存了哪些化合物元数据、临床阶段和ATC代码? | `chembl <CHEMBL_ID | 名称> [--limit 5]` |
| ChEMBL保存了哪些定量生物活性测定(EC50, IC50, Ki, Kd)? | `chembl-activity <CHEMBL_ID | 名称> [--target CHEMBL4051]` |
| Open Targets保存了哪些靶点可药性、安全性负担、疾病评分或FAERS统计数据? | `opentargets <ID | 查询> [--limit 5]` |
| Scite保存了该DOI的支持性、对比性和提及性引用计数? | scite <DOI> [--rest] | Scite Pro MCP (scite-mcp) 或零配额公共REST (--rest, scite-api) |
| 每次请求最多筛选500个DOI以获取Smart Citation计数、撤稿信息和章节细分,零配额成本 | scite-batch <DOI...> [--papers] [--sections] | Scite公共REST(POST /tallies, POST /papers, POST /tallies/cited-by-sections;零配额成本) |
| 该DOI的引文在引言、方法、结果和讨论章节中如何分布? | scite-sections <DOI> | Scite公共REST(GET /tallies/cited-by-sections/{doi} + /tallies/{doi};零配额成本) |
| 读取特定论文中的逐字全文摘录和Smart Citation片段 | scite-excerpts <DOI> "<查询>" [--limit 5] | Scite Pro MCP Mode C (scite-mcp,隔离在<untrusted_data>中) |
| Scite从种子DOI推荐了哪些相关论文? | scite-recommend <DOI> [--limit 5] | Scite Partner REST(GET /api_partner/recommend-papers/{doi},受每月650次REST盾牌限制) |
| 使用Scite Smart Citation计数搜索文献 | scite-search "<查询>" [--limit 5] | Scite Pro MCP (scite-mcp,需要OAuth/密钥) |
| 以零配额成本将PubMed ID解析为DOI | scite-pmid <PMID> | Scite公共REST(GET /papers/resolve-pmid/{pmid},零配额成本) |
| 以零配额成本聚合最多100个DOI的Smart Citation计数 | scite-aggregate <DOI...> | Scite公共REST(POST /tallies/aggregate,零配额成本) |
| 以零配额成本列出目标DOI的引用出版物和已撤稿引用计数 | scite-sources <DOI> [--limit 5] | Scite公共REST(GET /papers/sources/{target_doi},零配额成本) |
| 使用意图分类和隔离片段探索1跳引用网络 | scite-graph <DOI> [--direction both] [--limit 5] | Scite Pro MCP(citation_graph,隔离在<untrusted_data>中) |
| 通过DOI或PMID读取分页全文正文 | `scite-fulltext <DOI | PMID> [--offset 0] [--length 8000]` |
| 搜索Scite证据数据集(UK MHRA、专利、510(k)、MAUDE、FAERS、资助、药物、试验) | scite-evidence <数据集> "<查询>" [--filter F] [--page 1] | Scite Pro MCP(search_mhra, search_patents, search_510k_summaries等,隔离在<untrusted_data>中) |
| 标准化HGVS或SPDI变异坐标 | `ncbi-variation <HGVS | SPDI>` |
| 查找UniProtKB蛋白质序列、结构域边界和天然变异 | `uniprot <登录号 | 查询> [--limit 5]` |
| 查找Ensembl基因组坐标、典型转录本或rsID后果 | `ensembl <rsID | ENSG |
| 按药物名称搜索NLM DailyMed结构化产品标签(SPL) | dailymed <药物> [--limit 5] | DailyMed RESTful web services v2 (dailymed-web-services) |
| 在编目条目之前阅读条款或法律页面 | read-page <HTTPS_URL> [--out 文件] [--max-chars N] | 人工启动的条款/政策页或PDF阅读,遵循实验室行为规则 |
| 确定性查找CFTR RefSeq NM_000492.4外显子和UniProt P13569结构域上下文 | `cftr-context <变异 | 密码子>` |
| 确定性查找CFTR调节剂品牌、API、分子代码、NDA和openFDA SPL黑框警告安全上下文 | `cftr-modulator <品牌 | 代码 |
| 确定性查找CFTR Cryo-EM坐标结构元数据 | cftr-structure <pdb_id> [--list] | 零网络确定性CFTR Cryo-EM结构分辨率、配体、构象和参考(别名:cftr-pdb) |
| 此工具可能访问哪些内容? | sources | 目录 |
| 多个来源对一个药物、变异或试验有何说法? | brief drug <品牌>, brief variant "<ClinVar查询>", brief trial <NCTId> | 上述来源,交叉核对(见简报) |
| 此笔记中的每个DOI、PMID和试验ID是否存在? | cite-check <文件> [--max-ids 30] [--scite-bulk] | Crossref, PubMed, ClinicalTrials.gov,加上可选的零配额Scite批量预检(见引用检查) |
客户端代码拒绝执行的操作:访问catalog.yaml中未允许的任何主机(在API数据查询中从不跟随重定向);以浏览器身份呈现;跳过证书检查;在被拒绝后重试。对于编目前条款的阅读,read-page强制执行实验室严格的网络行为:仅HTTPS,首先通过robots_allows检查robots.txt,遵守Crawl-delay,拒绝/无法读取的机器人协议则中止获取,同站点HTTPS重定向会重新检查机器人协议,证书验证开启,5 MB正文上限,单个请求。它不需要目录条目,因为它专门用于在目录条目存在之前,由人工启动读取条款页面,而非用于数据提取。该包也从不调用语言模型,并且不查询任何持有个人级别数据的来源。
2. 运行
pip install -r scripts/requirements.txt
python scripts/evidence_cli.py retractions 10.1038/ng.2745
python scripts/evidence_cli.py approval TRIKAFTA
python scripts/evidence_cli.py variants "CFTR[gene] AND F508del" --limit 5
python scripts/evidence_cli.py population country/USA
python scripts/evidence_cli.py cftr-context "F508del"
python scripts/evidence_cli.py cftr-context "621+1G->T" --json
python scripts/evidence_cli.py cftr-context "711+1G->T"
python scripts/evidence_cli.py cftr-modulator "Trikafta"
python scripts/evidence_cli.py cftr-modulator "VX-121" --json
python scripts/evidence_cli.py cftr-structure "8EIQ"
python scripts/evidence_cli.py cftr-structure "8EIZ"
python scripts/evidence_cli.py cftr-structure "7SV7"
python scripts/evidence_cli.py cftr-structure "7SVR"
python scripts/evidence_cli.py cftr-structure "6O2P"
python scripts/evidence_cli.py cftr-pdb --list
每个命令的标志:--json 用于每个记录输出一个JSON对象,--ledger 路径 用于将记录追加到JSONL证据分类账。退出码:当所有记录为found或not_found时为0;当任何记录为blocked、rate_limited或error时为3。
简报
简报通过同一个客户端向多个来源提出一个问题,因此目录门控、速率控制、预算和断路器仍然适用。它会打印每个来源返回的每条记录、每个来源的状态、所比较的字段以及一个简短的交叉检查块。
| 配方 | 运行 | 交叉检查 |
|---|---|---|
brief drug TRIKAFTA | approval, label, trials 按术语(5), pubmed 按品牌(5) | 每个来源的状态;标签的生效年份不早于Drugs@FDA首次批准年份;OpenAlex文献和撤稿扫描;CFTR调节剂安全边界(AH-4)和主要PDB交叉检查 |
brief variant "CFTR[gene] AND F508del" | variants, pubmed 相同术语(5) | 每个来源的状态;匹配的ClinVar记录数量及其分类和审查状态 |
brief trial NCT05033080 | trial, pubmed 按NCT ID(5) | 每个来源的状态;注册中心的记录ID;返回的论文中哪些在其标题中提及了该试验 |
如何阅读交叉检查:
PASS:值一致,或来源已回答。这不是关于药物、变异或试验的发现。CHECK:应由人查看。来源未回答;多条ClinVar记录匹配(全部列出,未选择);或标签的生效日期早于药物首次批准日期,这不可能正确,因此两条记录之一不一致。标签的生效日期是其最新修订版本,因此标签年份等于或晚于批准年份是预期的,为PASS。NOT STATED:来源未提供该值,因此未进行比较。PubMed记录不包含摘要或全文,因此标题中未提及试验的论文为NOT STATED,而非“未提及”。
简报不做的事情:它不添加自己的任何事实。它打印的每个值都来自记录字段,或是标记的计数或年份差距,缺失值打印为not stated。被阻止、速率受限或失败的来源不会阻止其他来源;它会以其状态列出,退出码为3。使用--json时,记录首先出现,最后一个对象{"brief": ...}包含来源、字段、交叉检查和页脚;--ledger仅存储记录。每个简报以以下内容结束:研究内容,非医疗建议。简报列出公共文档;它不会为任何人解释任何内容。
引用检查
每个引用都会经过证据记录,无法解析的引用会从来源中删除或修复,绝不会从记忆中修复。cite-check 文件将其应用于整个笔记。它查找每个DOI、每个以PMID 123、PMID: 123或pubmed/123 URL形式编写的PubMed ID,以及每个NCT ID,删除重复项(保留首次出现的行),并使用单一查找代码逐一查找:DOI使用doi,PMID使用PubMed对[pmid]字段的搜索(两次请求),NCT ID使用trial。通常的客户端应用:目录门控、速率控制、预算、断路器、会计。
| 行 | 含义 |
|---|---|
PASS | 来源返回了一条记录;打印其标题和年份或日期,缺失则打印not stated |
NOT FOUND | 来源回答说没有此ID。从来源中删除或修复它;切勿猜测 |
UNRESOLVED | 查找被阻止、速率受限或失败。未解析不等于不存在 |
TITLE PASS / TITLE CHECK | 同一行上引用或强调的四个或更多单词的短语与记录的标题共享至少0.6(或更少)的较短边的单词,忽略大小写、标点... |
…[截断以供翻译]