ARTICLE · 1227588
附Skill下载 | 这个Skill可以在ClinicalTrials.gov采集某个药物在全球开展的临床研究,并做成汇总表格!
Hi,我是AI医药提效哥,欢迎加入我们创建的《AI医学应用及提效俱乐部》知识星球,可获取下方所有AI材料及技能安装包【加助理微信coolkefu66,可获取50元优惠券,备注:AI知识星球优惠券】

首先长按下方二维码,加入《AI医学应用及提效俱乐部》知识星球,进星球下载本Skill及其他数十个实用Skill

写在前面
做医学事务或者医药情报的,大概都接过这种活:
「把这个药在全球的所有临床研究拉一张表出来,下周要跟老板过一遍。」
听起来不难——ClinicalTrials.gov 上搜一下、导出来、整理整理。真干起来是这样的:
同一个药有好几个代号,搜一个漏一半; 导出的是原始字段,RECRUITING、PHASE2、ESTIMATED 混在一起,得一个个换成人话; 地点那栏写着 China: 12, United States: 3, RoW: 5——RoW 到底是哪?其实多指中国中心,不是「海外」; 一份 200 行的表,光清洗就花掉半天,真正该分析的「这半年多了什么」反而没时间做。
今天就介绍这个 skill:ClinicalTrials 临床试验注册库检索与汇总。它把上面这件事变成一条命令。
它是什么
一套围绕 ClinicalTrials.gov 官方 API 建起来的检索与汇总技能。
ClinicalTrials.gov 是全球最大的临床试验注册库,由美国国家医学图书馆维护,API v2 公开、免认证、限速约每分钟 50 次请求。数据是现成的,麻烦的从来不是「拿不到」,而是「拿回来之后怎么变成能给人看的表」。
这个 skill 的价值就在后半段。它的主脚本 ct_portfolio.py 干一件事:
不是给你一堆 JSON 让你自己拼,是给你一个可以发给老板、发给专家的成品 Excel。
第一件功夫:先定义什么不算
先说什么不算。
注册库里很多研究,会在背景治疗或者摘要里提到目标药物——比如某化疗方案的对照组用了它。这类研究不纳入汇总表。
纳入标准是硬的:
这条看着简单,却是最容易翻车的地方。放宽一点,表里立刻多出几十条「只是提了一嘴」的研究,客户第一眼就会问「这个也算?」,整张表的可信度就没了。
12 列双语表头,是这套表的地基
列的顺序是固定的,中文在上、English 在下:
研究名称 / 研究标题 / 状态 / 分期 / 计划样本量 / 地区 / 干预措施 / 申办方 / 适应症 / 启动时间 / 主要终点完成 / 研究完成
为什么非要用双语表头?因为这张表通常要同时给两类人看:临床和注册的人看中文,外企总部或者对外交流时看英文。做两份表是最蠢的办法。
表的最上面还有一行合并的产品标识:
这一行别省。一个月后你再看这张表,才知道它是什么时候的数据。没有截止日的汇总表,本质上是一张不知道保质期的表。
五个页签,缺一不可
一条命令产出的不是一张表,是一个工作簿:
① 汇总表 Portfolio —— 上面那 12 列的主表,可排序可筛选。
② 统计概览 Overview —— 按分期、状态、地区、适应症四组计数,配一张适应症分布图。老板第一个翻的往往是这一页。
③ 重点研究 Key trials —— III 期及以上,或者样本量 ≥300 的大样本研究。给专家看的一页纸。
④ 变更对比 Changes —— 见下一节,这是最值钱的一页。
⑤ 数据说明 Methods —— 数据来源、截止日、检索式、命中数 / 剔除数、纳入规则、字段口径、地区与分期定义、待核项。
最后一页很多人会觉得多余,但它是这张表的免责底座:为什么地区是这样归并的、为什么有些条目没重新核验,全写在这里。没有这一页,表一被追问就站不住。
最容易被低估的一页:变更对比
假设你半年前做过一版,现在要更新。
一般人的做法是重新拉一遍,然后……然后就没有然后了。两版表放在一起,200 行,谁也说不出「到底变了什么」。
这个 skill 的 --baseline 参数会跟上一版逐条对比,把变化单独列成一页:
- 新增
了哪些研究(这半年新开的) 哪些研究状态变了(比如从招募中变成已完成) 哪些研究的样本量或终点日期改了 上一版里有、这一版没再检出的条目
说句实话,客户真正关心的就是这个——「这半年多了什么、谁推进到 III 期了」,而不是再读一遍早就看过的 200 行。
别名收敛:注册库里的药名靠不住
这是整个 skill 里我认为最见功力的设计。
第一层:同一个药的多个代号要收成一条。
一个药从研发到上市,会有代号、中文名、英文名,甚至中途改过名。这些都写在 --alias 里,最后统一成一个写法。
但有个例外必须守住:
A药 + 化疗、A药联合B药 这类方案,在表里原样保留。你要是把它简化成单药,这张表就错了——它本来考察的就是联合方案。
第二层:注册库自己会把药名写错。
这不是耸人听闻。实测某药在注册库里有四种拼写变体——字母顺序颠倒、l 和 I 混淆这种。你要是只搜标准写法,这四条研究就永远漏在表外。
脚本跑完会打印提示:
看到这个提示,确认后务必补进去重跑一次。
那为什么不干脆让脚本自动合并?因为字符串相似度不可靠。atezolizumab 和 pembrolizumab 的相似度能到 0.72——自动合并的话,两个不同的药直接串一起,这是灾难性的错误。
所以脚本的设计是:只提示、不自动改。这个分寸拿得很准。
几条不能破的纪律
这部分是给要拿这张表去做决策的人看的。
① 样本量是「登记值」,不是「入组数」。
那一列里的数字绝大多数标着 ESTIMATED(预计入组)。这是申办方填报的计划值,不代表真实入组进度。所以表里不写「入组」两个字——写了就是误导。
② 疗效数据一律不进主表。
ORR、PFS、OS 这些不该跟注册信息混在一张表里。想放,就另起一页,标明文献出处。混进去的后果是:读者会以为这些数字也是注册库里的官方数据。
③ 地区别用 RoW。
RoW(Rest of World)字面看像「海外」,在中文语境里极易被误读。按国家归并成 China / US / Europe / Canada / Japan / Global 才清楚;没有中心信息但能从上下文推断的,标 China* 并在脚注说明。
④ 非 ClinicalTrials.gov 的注册号,不能装成实时数据。
中国的 ChiCTR 没有公开 API。所以那部分条目只能沿用上一版,并在表里明确标注「未重新核验」。拿旧数据冒充实时拉取,是这张表最容易出的诚信问题。
⑤ 日期按注册库精度写。
注册库可能只精确到月(2024-12),也可能到日。统一写成 MM/YY,不补日——补出来的「日」是编的。
覆盖范围:它查不到什么
做「全球汇总」时这句话必须交代清楚:
这个 skill 只覆盖 ClinicalTrials.gov。中国的 ChiCTR、欧盟 CTIS、日本 jRCT、澳洲 ANZCTR 都不在内。
而且国内很多未强制注册的 IIT,只有 ChiCTR 号,在 ClinicalTrials.gov 上根本查不到——这类需要人工补录并标注来源。
知道边界在哪,比多查几条数据更重要。
国内网络那点事
ClinicalTrials.gov 的 API 在国内访问,常遇到两种失败:
① 环境变量里的代理已失效 → 所有请求超时。脚本会自动设 trust_env = False 走直连。
② 网络掐断 TLS 1.3 握手,报 SSLError: UNEXPECTED_EOF → 自动强制降级到 TLS 1.2。
这两个都已经内置,你不用改代码。遇到 429(限速)则按 20 秒、40 秒退避。
怎么安装
最省事的方式,不用手动复制任何目录:
把 skill 安装包(zip 或整个文件夹)直接发给 WorkBuddy,配一句话:「帮我安装这个 skill」。
WorkBuddy 会自动解压、归位、刷新索引。而且安装和调用可以一步到位——你直接说「拉一下这个药的全球临床研究汇总」,它就去做了。
怎么用
最常用的是这一条:
# 全景表:自动检索全部别名,出 5 个页签 $PY scripts/ct_portfolio.py --drug pembrolizumab \ --alias MSB0010718C --out portfolio.xlsx要跟上一版对比,加两个参数:
# 版本对比 + 沿用旧版里的 ChiCTR 条目 $PY scripts/ct_portfolio.py --drug pembrolizumab \ --baseline old.xlsx --carry-non-nct --out new.xlsx--carry-non-nct 就是「把上一版里的 ChiCTR 等非 NCT 条目带过来」——省得你每次手工补。
如果只是想临时查一下,用通用的检索脚本:
# 通用检索自检:检索→详情→翻页→CSV $PY scripts/query_clinicaltrials.py --demo "gastric cancer"它还提供 search_studies() / get_study_details() / search_with_all_results() / extract_study_summary() / to_csv() 几个函数,按疾病、药物、地点、申办方、状态、分期都能查,自动翻页。
实用提醒
- 第一次跑完一定要看「疑似别名」提示
,补进 --alias 重跑。这一步不做,表里就会出现同一个药的多种写法。 - --key-n-min 默认是 300
,指「重点研究」页签的样本量门槛。如果你的适应症普遍是小样本(比如罕见病),记得调低,否则这一页会是空的。 - --no-stats / --no-diff / --no-key-trials
可以关掉不想要的页签。只想要主表时很方便。 - 变更对比需要上一版文件真的存在
。第一次跑没有 baseline,这一页自然是空的,别以为是报错。 - 提示里的「疑似变体」不要看也不看全加进去
。要打开那条 NCT 记录确认干预措施里写的确实是这个药——加错就是串药。
一句话总结
这个 skill 真正省掉的,不是「查数据」的时间,而是把数据变成一份别人敢用的表的那几个小时——顺便还给你留了半年前后的可比性。
对天天要出管线表、竞品表、研究者汇报材料的人来说,这是一条能一直用下去的命令。
点击下方↓↓卡片,关注追踪AI在医学中提效及技能















































































