[ blog · tutorial ]11 min read

Kết nối ClinicalTrials.gov v2 + openFDA + ChEMBL thành một endpoint tình báo dược phẩm sạch về giấy phép

Sarah ChoyĐăng ngày 3 tháng 5, 202611 phút đọc
Kết nối ClinicalTrials.gov v2 + openFDA + ChEMBL thành một endpoint tình báo dược phẩm sạch về giấy phép

Nghiên cứu & phát triển dược phẩm, các startup AI y tế và các nhóm cảnh giác dược đều muốn cùng một thứ: một endpoint kéo về thử nghiệm, nhãn thuốc, biến cố bất lợi và hoạt tính sinh học theo cách sạch về giấy phép. Đây là kiến trúc hoạt động được, cùng những cửa bẫy đã khiến nhiều nhóm bất ngờ khi lên production.

Tóm tắt

  • ClinicalTrials.gov v2 (REST + JSON) đã thay thế v1 cũ vào năm 2024 — lược đồ sạch hơn, nhưng phân trang, các trường tùy chọn và độ trôi lịch sử vẫn làm khó những người tích hợp mới.
  • openFDA bao phủ nhãn thuốc (SPL), báo cáo biến cố bất lợi FAERS và dữ liệu thu hồi, miễn phí; giới hạn 240 yêu cầu/phút khi không xác thực, 120 nghìn/ngày khi có khóa.
  • ChEMBL cung cấp hoạt tính sinh học (IC50, Ki, Kd, EC50), các đích tác dụng và các thử nghiệm sinh học — chiều cấu trúc / cơ chế mà các cơ sở dữ liệu khác thiếu.
  • Giấy phép thương mại của DrugBank chính là cái bẫy: sử dụng học thuật được phép; bất kỳ sản phẩm nào, kể cả một SaaS nhỏ, đều rơi vào các điều khoản cấp phép thương mại mà hầu hết người xây dựng không đọc cho đến khi bị gửi thông báo.
  • API Pick Clinical Search gói ClinicalTrials, openFDA, ChEMBL và dược lý DrugBank trong một endpoint POST duy nhất — 30 tín dụng mỗi lần gọi, sạch về giấy phép, chỉ tính phí khi thành công.

Hình hài của vấn đề

Ba nhóm đối tượng, vì những lý do khác nhau, cuối cùng đều cần gần như cùng một pipeline dữ liệu dược phẩm:

  • Các nhóm nghiên cứu & phát triển dược sinh học và tái định vị thuốc muốn ghép nối dữ liệu hoạt tính sinh học (ChEMBL), lịch sử thử nghiệm (ClinicalTrials.gov) và tín hiệu biến cố bất lợi (FAERS) để đánh giá một ứng viên.
  • Các startup AI y tế đang xây dựng chatbot hoặc các lớp hỗ trợ quyết định lâm sàng cần ghép nhãn thuốc (SPL của openFDA) và dữ liệu thử nghiệm để neo câu trả lời của LLM vào các nguồn pháp quy.
  • Các nhóm cảnh giác dược muốn FAERS cộng với các trường có cấu trúc của nhãn thuốc cộng với thông tin cơ chế từ ChEMBL/DrugBank để đánh giá tính hợp lý của một tín hiệu.

Mỗi nhóm đối tượng này cuối cùng đều kết nối bốn cơ sở dữ liệu với nhau: ClinicalTrials.gov, openFDA, ChEMBL và DrugBank. Mỗi cơ sở dữ liệu có lược đồ, giới hạn tốc độ và điều khoản giấy phép riêng. DrugBank là cái cắn — điều khoản sử dụng thương mại của nó bắt gặp những nhóm đã tích hợp nó trong quá trình phát triển mà không đọc giấy phép, và việc gửi thông báo cho những nhà sáng lập SaaS nhỏ là điều có thật.

Đây là kiến trúc chúng tôi khuyến nghị, bao gồm một hướng thay thế sạch về giấy phép để tránh cái bẫy DrugBank.

Bốn nguồn, mỗi nguồn một đoạn

ClinicalTrials.gov v2

US National Library of Medicine. Sổ đăng ký dứt khoát cho các thử nghiệm lâm sàng đăng ký tại Mỹ và là tiêu chuẩn toàn cầu trên thực tế. v2 ra mắt năm 2024 — REST + JSON, thay thế CSV/XML của v1 cũ. Miễn phí, có giới hạn tốc độ (10 yêu cầu/giây). Tài liệu tại clinicaltrials.gov/data-api/api. Điểm mạnh: có thẩm quyền, toàn diện, không vướng vấn đề giấy phép. Điểm yếu: các trường tùy chọn thưa thớt với nghiên cứu cũ, ma sát khi di trú lược đồ đối với các nhóm còn dùng v1.

openFDA

API công khai do FDA vận hành. Bao phủ nhãn thuốc (SPL — Structured Product Labels), FAERS (Adverse Event Reporting System), dữ liệu thu hồi và các tương đương cho thực phẩm/thiết bị. Miễn phí, giới hạn 240 yêu cầu/phút khi không xác thực và 120.000 yêu cầu/ngày với một khóa API. Điểm mạnh: nguồn pháp quy có thẩm quyền, dữ liệu có cấu trúc, độ bao phủ rộng. Điểm yếu: phân tích SPL đòi hỏi hiểu các quy ước HL7; việc khử trùng lặp FAERS là vấn đề của người dùng.

ChEMBL

EBI / EMBL-EBI. Cơ sở dữ liệu hoạt tính sinh học được biên soạn kỹ — các phép đo IC50, Ki, Kd, EC50 trên các hợp chất, đích tác dụng và thử nghiệm sinh học. Miễn phí, REST + JSON, không đau đầu về giới hạn tốc độ ở lưu lượng vừa phải. Điểm mạnh: dữ liệu cấu trúc và cơ chế mà không nguồn nào khác bao phủ. Điểm yếu: trọng tâm ở cấp độ nghiên cứu; các ánh xạ trị liệu/lâm sàng chỉ mang tính một phần.

DrugBank

Xuất phát từ University of Alberta, nay đã thương mại hóa. Ánh xạ thuốc-đích, dược lý, tương tác thuốc-thuốc, đa dược lý. Sử dụng học thuật miễn phí; sử dụng thương mại đòi hỏi giấy phép có phí. Giấy phép áp dụng cho bất kỳ sản phẩm thương mại nào, bao gồm cả các công cụ SaaS miễn phí — hãy đọc các điều khoản trước khi tích hợp.

API Pick Clinical Search (lựa chọn thay thế sạch về giấy phép)

Tìm kiếm ngữ nghĩa trên ClinicalTrials.gov, nhãn thuốc FDA, hoạt tính sinh học ChEMBL và siêu dữ liệu dược lý DrugBank mà chúng tôi cấp phép. JSON vào / JSON ra, 30 tín dụng mỗi lần gọi (~$0,03), tính phí chỉ khi thành công. Kết quả nhất quán với các điều khoản dữ liệu pháp quy và cấu trúc; không có cái bẫy giấy phép thương mại cho người dùng cuối.

Đặt cạnh nhau

Ảnh chụp tại thời điểm viết. Hãy xác minh giới hạn tốc độ và điều khoản cấp phép hiện hành trước khi tích hợp thương mại.
ClinicalTrials.gov v2openFDAChEMBLDrugBankAPI Pick Clinical
Phạm vi bao phủSổ đăng ký thử nghiệmNhãn + FAERS + thu hồiHoạt tính sinh học, đích, thử nghiệmThuốc + đích + tương tácCả bốn, ngữ nghĩa
Định dạngREST + JSONREST + JSONREST + JSONREST + JSON / bản kết xuất SQLJSON, đoạn trích đã được định hình sẵn
Giới hạn tốc độ10 yêu cầu/giây240/phút không xác thực, 120 nghìn/ngày với khóaHào phóngTùy theo bậc giấy phépTheo lần gọi (không giới hạn theo người dùng)
Giấy phépPhạm vi công cộngPhạm vi công cộngCC-BY-SAHọc thuật miễn phí / thương mại có phíTOS của API Pick
Phù hợp nhấtGiao thức thử nghiệm, phân biệt nhà tài trợNhãn pháp quy, tín hiệu BCBLCơ chế / cấu trúcTương tác thuốc-thuốc, đa dược lýTruy xuất bằng agent AI trên tất cả

Mã hoạt động: từng nguồn

ClinicalTrials.gov v2

import requests

# Trials for a specific condition + intervention
r = requests.get(
    "https://clinicaltrials.gov/api/v2/studies",
    params={
        "query.cond": "non-small cell lung cancer",
        "query.intr": "pembrolizumab",
        "filter.overallStatus": "RECRUITING",
        "pageSize": 25,
        "format": "json",
    },
)
studies = r.json()["studies"]
for s in studies[:3]:
    proto = s["protocolSection"]
    nct = proto["identificationModule"]["nctId"]
    title = proto["identificationModule"]["briefTitle"]
    sponsor = proto["sponsorCollaboratorsModule"]["leadSponsor"]["name"]
    print(f"{nct}: {title} (sponsor: {sponsor})")

openFDA: nhãn thuốc + tín hiệu FAERS

import requests
from collections import Counter

# Drug label lookup
r = requests.get(
    "https://api.fda.gov/drug/label.json",
    params={"search": "openfda.brand_name:Lipitor", "limit": 1},
).json()
label = r["results"][0]
print("Indications:", label.get("indications_and_usage", ["—"])[0][:200])

# FAERS — most reported adverse events for atorvastatin
r = requests.get(
    "https://api.fda.gov/drug/event.json",
    params={
        "search": 'patient.drug.medicinalproduct:"ATORVASTATIN CALCIUM"',
        "count": "patient.reaction.reactionmeddrapt.exact",
        "limit": 10,
    },
).json()
print("Top reported reactions:")
for r_ in r["results"]:
    print(f"  {r_['term']}: {r_['count']}")

ChEMBL: hoạt tính sinh học của đích tác dụng

import requests

# Target search → activity for a specific target
r = requests.get(
    "https://www.ebi.ac.uk/chembl/api/data/activity.json",
    params={
        "target_chembl_id": "CHEMBL204",      # PD-L1
        "standard_type": "IC50",
        "limit": 25,
    },
).json()
for a in r["activities"][:5]:
    cid = a["molecule_chembl_id"]
    val = a["standard_value"]
    unit = a["standard_units"]
    print(f"{cid}: IC50 = {val} {unit}")

API Pick Clinical Search: một lần gọi, tất cả các nguồn

import requests

r = requests.post(
    "https://www.apipick.com/api/search/clinical",
    headers={"x-api-key": "pk_yourkey"},
    json={"query": "PD-L1 inhibitors in NSCLC trials and adverse events"},
)
for hit in r.json()["results"][:5]:
    print(hit["title"], "→", hit["url"], f"(source: {hit.get('source')})")
# Returns ranked semantic matches across trials + labels + bioactivity.
# 30 credits per call, only on HTTP 200.

Ba mẫu hình xuất hiện trong production

1. Sàng lọc tái định vị thuốc

Lấy một loại thuốc đã được phê duyệt. Kéo về cơ chế của nó (các đích ChEMBL), các chỉ định hiện tại (nhãn openFDA) và bất kỳ thử nghiệm nào đang thử nó cho các chỉ định mới (ClinicalTrials.gov). Đối chiếu chéo với FAERS để tìm tín hiệu an toàn ở chỉ định mới. Agent lắp ráp cả bốn mảnh và làm nổi bật những ứng viên đáng để một dược lý học gia dành thời gian.

2. Phân loại tín hiệu cảnh giác dược

Một cron chạy mỗi giờ kéo về các báo cáo FAERS mới cho một danh sách theo dõi thuốc. Tính Reporting Odds Ratio so với phần còn lại của cơ sở dữ liệu. Đánh dấu bất kỳ tín hiệu nào có ROR > 2 với KTC 95% loại trừ giá trị 1. Ghép với ClinicalTrials.gov để kiểm tra xem chỉ định sử dụng là theo nhãn hay ngoài nhãn. Kết quả: một danh sách được ưu tiên cho buổi rà soát buổi sáng của nhóm — tương tự mẫu hình bản tin buổi sáng dành cho tin tức.

3. Neo dữ liệu cho trợ lý y tế AI

Với bất kỳ câu trả lời liên quan đến thuốc nào mà trợ lý đưa ra, hãy kéo về nhãn openFDA và dùng nó làm sự thật nền có thẩm quyền. Trích dẫn mục nhãn FDA một cách rõ ràng. Từ chối trả lời các câu hỏi liên quan đến liều dùng khi không truy xuất được nhãn. Đây là mẫu hình neo bằng trích dẫn từ bài viết về án lệ Anh Quốc áp dụng cho y học — với mức rủi ro còn cao hơn.

Cái bẫy DrugBank

Đáng để nhấn mạnh lại. Giấy phép học thuật của DrugBank được biết đến rộng rãi, nhưng các điều khoản của nó thay đổi ngay khoảnh khắc bạn thu tiền của bất kỳ ai cho bất kỳ thứ gì sử dụng dữ liệu — bao gồm cả một sản phẩm miễn phí mà bạn có ý định chuyển đổi người dùng sang trả phí sau này. Một số nhà sáng lập SaaS nhỏ đã phát hiện ra điều này theo cách khó khăn sau khi một thông báo rơi vào hộp thư của họ.

Hai hướng sạch:

  • Trả tiền cho giấy phép thương mại. Bảng giá tiêu chuẩn không minh bạch; hãy chuẩn bị thương lượng. Với các sản phẩm trưởng thành đã có vốn thì đây là câu trả lời đúng, bởi vì dữ liệu tương tác thuốc-thuốc của DrugBank rất khó sánh bằng.
  • Dùng các lựa chọn thay thế sạch về giấy phép cho giai đoạn đầu. ChEMBL bao phủ phần lớn dữ liệu cơ chế. RxNorm + DailyMed (NIH) bao phủ việc chuẩn hóa tên thuốc và nhãn. FAERS bao phủ các biến cố bất lợi. Sự kết hợp này bỏ lỡ một số dữ liệu đặc thù của DrugBank (bảng tương tác phong phú, đa dược lý) nhưng đủ cho hầu hết các sản phẩm giai đoạn đầu. API Pick Clinical Search gói sẵn tập con sạch về giấy phép cho bạn.

Nơi mẫu hình này khái quát hóa

Mẫu hình 'kết nối bốn cơ sở dữ liệu công khai với nhau kèm xử lý giới hạn tốc độ và kỷ luật giấy phép' xuất hiện ở nhiều lĩnh vực dọc chịu quản lý — hồ sơ tài chính (SEC + bản ghi công bố lợi nhuận + thống kê cổ phiếu), bằng sáng chế (USPTO + EPO + WIPO + JPO + KIPO + CNIPA), pháp lý (Find Case Law + legislation.gov.uk + các tương đương nước ngoài). Phiên bản dữ liệu dược phẩm khác thường chủ yếu vì nền tảng giấy phép nhiều tranh cãi hơn. Mọi trục khác — sự đa dạng lược đồ, giới hạn tốc độ, khử trùng lặp, ánh xạ định danh giữa các nguồn — đều khái quát hóa được.

Để truy xuất một lần gọi trên các nguồn dữ liệu dược phẩm sạch về giấy phép, API Pick Clinical Search lo phần kết nối. Với các tích hợp sâu hơn (phân tích SPL đầy đủ, tính tín hiệu FAERS, cây đích ChEMBL) bạn vẫn đến trực tiếp từng nguồn. Hãy chọn đúng mức trừu tượng cho từng phần của pipeline.

Câu hỏi thường gặp

ClinicalTrials.gov v2 đã thay đổi gì khiến các pipeline hỏng?

Ba điều. (1) Cấu trúc endpoint — v2 là REST + JSON thay vì CSV/XML của v1. (2) Tên trường — lớp bọc protocolSection mới và việc chuyển từ snake_case sang camelCase là những thay đổi cần tái cấu trúc phổ biến nhất. (3) Mức độ điền các trường tùy chọn — nhiều trường được ghi là 'có sẵn' lại được điền rất thưa thớt, đặc biệt với các nghiên cứu cũ. Việc di trú thường mất 2-3 ngày cộng với một tuần sửa lỗi khi các nghiên cứu ở tình huống biên xuất hiện.

Vấn đề với việc cấp phép của DrugBank là gì?

DrugBank miễn phí cho nghiên cứu học thuật và cá nhân. Bất kỳ hình thức sử dụng thương mại nào — bao gồm một sản phẩm SaaS miễn phí, một MVP của startup, hay một công cụ dùng trong dịch vụ tư vấn có tính phí — đều rơi vào các điều khoản cấp phép thương mại của DrugBank. Bài viết 'Sounding the alarm on DrugBank's new license' của Thinklab từ vài năm trước vẫn là bài phân tích kinh điển. Nhiều người xây dựng tích hợp DrugBank trong quá trình phát triển mà không nhận ra rằng ngay khi họ phát hành một sản phẩm, giấy phép sẽ có hiệu lực. Hãy đọc các điều khoản trước khi tích hợp, hoặc dùng một lựa chọn thay thế sạch về giấy phép.

Làm thế nào để phát hiện tín hiệu cảnh giác dược cơ bản?

Các thước đo bất tương xứng tiêu chuẩn — Reporting Odds Ratio (ROR), Proportional Reporting Ratio (PRR), BCPNN theo Bayes — trên cơ sở dữ liệu biến cố bất lợi FAERS. Các thư viện mã nguồn mở như vigipy triển khai những phương pháp này. Cái bẫy là việc khử trùng lặp của FAERS: nhiều báo cáo là các lần nộp trùng của cùng một ca do các bên khác nhau gửi; các thư viện như VigiMatch của WHO xử lý được điều này nhưng bạn phải trả giá. Với hầu hết các trường hợp dùng AI y tế, endpoint FAERS của openFDA cộng với một phép tính ROR đơn giản là đủ để làm nổi bật những tín hiệu đáng điều tra.

API Pick Clinical Search có tuân thủ HIPAA không?

Các nguồn dữ liệu mà chúng tôi gói lại (ClinicalTrials.gov, openFDA, ChEMBL, siêu dữ liệu dược lý DrugBank) không chứa thông tin sức khỏe được bảo vệ — chúng bao phủ giao thức thử nghiệm, nhãn thuốc, số liệu tổng hợp về biến cố bất lợi và dữ liệu cấu trúc/hoạt tính sinh học. Việc tuân thủ HIPAA áp dụng cho PHI, vốn không xuất hiện trong chỉ mục của chúng tôi. Nếu bạn đang xây dựng một sản phẩm hạ nguồn có xử lý PHI (ví dụ hỗ trợ quyết định lâm sàng trên hồ sơ bệnh nhân), bạn sẽ cần xử lý riêng phần đó. Dữ liệu chảy qua endpoint của chúng tôi nhất quán với dữ liệu pháp quy công khai.

Kết quả từ đây có thể dùng cho các quyết định lâm sàng không?

Không. Kết quả từ bất kỳ API truy xuất nào cũng chỉ mang tính thông tin; nó không cấu thành lời khuyên y tế hay hỗ trợ quyết định lâm sàng. Hãy dùng dữ liệu để hỗ trợ nhân sự có chuyên môn — dược sĩ, bác sĩ, chuyên gia pháp quy — chứ không phải để thay thế họ. Điều này áp dụng cho API Pick Clinical Search và cho mọi API khác trong lĩnh vực này.

Các API dùng trong bài viết này

Sarah Choy
Viết bởi
Sarah Choy
CEO, API Pick

Sarah Choy là CEO của API Pick. Cô viết về việc xây dựng các API sẵn sàng cho production cho AI agent và quy trình LLM.