iT邦幫忙

2026 iThome 鐵人賽

DAY 15
0
Build on Google AI

《解構生命暗物質:用 AlphaGenome Atlas 破譯 98% 非編碼基因組的 30 天實戰》系列 第 15 篇

AlphaGenome Atlas 實戰 | Day 15 | 高通量飽和突變驗證 ——生物資訊學如何指導Wet lab閉環

  • 分享至 

  • xImage
  •  

💡 導讀:神探(AI)指認了嫌疑犯,但法官(Wet Lab)還需要鐵證如山!

想像一下,AI 就像是一位算力超強的神探。它在 400 萬個嫌疑犯中,幫我們抓出了深藏在 DNM1 基因內含子深處的變異,還推理出:「這傢伙在大腦神經元裡貼了假告示牌,造出了隱藏剪接點,讓蛋白質多長了 13 個胺基酸!」

這套推理聽起來完美無缺,但在嚴謹的醫學與科學界,沒有任何一家醫院或醫生會單憑 AI 的預測就直接下診斷或開藥。

AI 提出了極具說服力的「假說」,但最終的「定罪宣判」,必須回到培養皿、細胞與試管裡——也就是我們常說的 「Wet lab (是指需要使用液體試劑、化學藥品或生物材料進行實際動手操作與實驗驗證的研究實驗)」!

近年國內許多 AI 醫療專案(如國科會 NSTC 補助、台大團隊執行的計畫)也一再強調 「虛實整合」 的核心價值:AI 的任務是幫我們把範圍縮小數百萬倍,而最終的生物學因果關係,仍必須由 Wet lab來拍板定案。

今天,我們就來看這個六週大癲癇嬰兒案例的最終章:科學團隊如何用高通量實驗,在培養皿裡 100% 證實了 AlphaGenome 的神準預測!


一、 265 個字母的精準打擊:高通量飽和突變實驗

如果沒有 AI,科學家想要在培養皿裡驗證,可能得把整段幾萬個字母長度的基因全部試一遍,耗時費力又像在大海撈針。

但有了 AlphaGenome,AI 已經幫我們圈出了精確的地點!研究團隊精準鎖定 DNM1 外顯子(Exon 10a)上游的 265 個 DNA 字母(鹼基),並設計了一場「高通量飽和突變實驗(High-throughput Saturation Mutagenesis)」:

  1. 逐一替換:把這 265 個位置上的字母,一個一個人工替換成其他可能字母。
  2. 多細胞系測試:放入 5 種不同的細胞系培養皿中,觀察細胞會不會真的產生異常剪接。

這是一場教科書級別的假說驗證閉環:

實驗與分析階段 傳統盲目試錯流程 AI 指導的精準流程 實際Wet lab成果
目標鎖定 大海撈針,隨機挑選數百個 VUS 做全基因長度測試。 精準打擊:直接鎖定 AI 圈出的 DNM1 剪接區域。 精準限縮於外顯子上游 265 個鹼基 範圍。
測試載體 僅在常規血液細胞測試,容易看錯重點。 組織特異性驗證:針對大腦神經系統機制進行測試。 在 5 種細胞系中完成高通量檢驗。
最終結論 耗時數年,往往無法確立因果關係。 虛實閉環:電腦預測與細胞實驗高度吻合。 成功找到 12 個造成框內延長的變異(含 3 個已知致病變異)。

這場實驗的結果令人振奮:AlphaGenome 輸出的剪接預測分數,與實際培養皿實驗分類結果的相符程度(AUPRC)高達 0.943(滿分為 1.0)!

這證明了 AI 不僅沒有猜錯,甚至連腦細胞裡微小的剪接動態都算得一清二楚。這不僅為那個六週大的罕病嬰兒家庭找到了病因、評估了復發風險,更為未來的標靶藥物開發奠定了最堅實的起點。


💻 二、 實作:【VCF 檔案解析】用 Python 讀取病患的 VCF 基因身分證總清冊 (vcf_parser.py)

VCF (Variant Call Format) 是生醫界最核心的檔案格式。當醫院對病患進行基因測序後,只會把病患與標準基因組「不一樣的地方」印成這張身分證總清冊。

今天我們撰寫一個不需要安裝複雜外部套件(零依賴)的基礎 VCF 解析器,自動過濾掉品質不佳的雜訊(只保留 FILTER == 'PASS' 的變異):

💻 程式碼:vcf_parser.py

# vcf_parser.py - 零依賴 VCF 基因身分證解析器
import os
import config

def parse_vcf_file(vcf_path):
    """
    讀取並解析 VCF 檔案,自動過濾 quality 低於標籤的列,
    回傳格式化變異座標清單: ["chr9:128225994:G:A", ...]
    """
    variants_list = []

    # 若檔案不存在,自動生成一個測試用的模擬 VCF 檔案 (Mock VCF)
    if not os.path.exists(vcf_path):
        print(f"💡 [Mock 模式] 建立測試用 VCF 檔案: {vcf_path}")
        with open(vcf_path, "w", encoding="utf-8") as f:
            f.write("##fileformat=VCFv4.2\n")
            f.write("#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO\n")
            # 寫入 5 個候選變異,包含病患的 DNM1 致命變異與低品質雜訊
            f.write("chr9\t128225994\t.\tG\tA\t99\tPASS\tDP=45\n")
            f.write("chr9\t128225900\t.\tA\tG\t99\tPASS\tDP=50\n")
            f.write("chr9\t128225910\t.\tC\tT\t20\tLOW_QUAL\tDP=5\n") # 低品質應過濾
            f.write("chr9\t128225920\t.\tT\tC\t99\tPASS\tDP=40\n")
            f.write("chr1\t45678900\t.\tT\tC\t99\tPASS\tDP=60\n")

    print(f"📄 正在解析 VCF 檔案: {vcf_path} ...")

    with open(vcf_path, "r", encoding="utf-8") as f:
        for line in f:
            # 忽略註解開頭的標頭列 (#)
            if line.startswith("#"):
                continue

            parts = line.strip().split("\t")
            if len(parts) >= 7:
                chrom, pos, _, ref, alt, _, filter_status = parts[:7]

                # 1. 品質過濾:只保留通過品管 (PASS) 的變異
                if filter_status == "PASS":
                    # 組裝成 AlphaGenome API 標準格式 "chr:pos:ref:alt"
                    variant_str = f"{chrom}:{pos}:{ref}:{alt}"
                    variants_list.append(variant_str)

    print(f"✅ VCF 解析完成!成功提取 {len(variants_list)} 個高品質候選變異。")
    return variants_list

if __name__ == "__main__":
    vcf_file = "patient_sample.vcf"
    candidate_variants = parse_vcf_file(vcf_file)
    print("\n📦 提取到的變異座標清單:")
    for v in candidate_variants:
        print(f"  • {v}")


上一篇
AlphaGenome Atlas 實戰 | Day 14 | 隱藏的致命剪接 —— 從 AVI 指標看透 DNM1 基因異常
下一篇
AlphaGenome Atlas 實戰 | Day 16 | 環境建置與認證 —— 下載 Python SDK
系列文
《解構生命暗物質:用 AlphaGenome Atlas 破譯 98% 非編碼基因組的 30 天實戰》 共 19 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言