在 一場世足賽中,裁判不能憑自己的喜好隨便把球員紅牌驅逐出場。裁判必須嚴格遵守國際足總的規則:
當累積的黃牌與紅牌達到一定數量時,球員就會被正式判罰出場。
在基因診斷的世界裡也是!我們不能只因為 AlphaGenome 給出了高分,就冒然向病患家屬宣佈「這個變異 100% 就是致病元兇」。全球醫學界有一套權威的國際裁判標準——ACMG/AMP 指引(美國醫學遺傳學及基因體學學會指引)。
現在,如何讓 Gemini 依照 ACMG 裁判規則進行扣分,並組建包含四大專家的 Antigravity 多代理人系統 (Multi-Agent System),打造和規的臨床診斷報告!
在 ACMG 的標準中,每一個變異被收集到的證據,都會被賦予一個標準代碼:
當系統將所有證據代碼(如 1 個 PVS1 + 2 個 PM2)進行數學組合後,最終會將變異歸類為 五個臨床等級:
| ACMG 分級等級 | 白話意義 | 臨床代表燈號 | 醫生的後續處置 |
|---|---|---|---|
| 1. Pathogenic (致病) | 鐵證如山,這個變異就是引發疾病的真兇! | 🔴 紅燈 | 確立診斷,啟動標靶藥物或精準治療。 |
| 2. Likely Pathogenic (可能致病) | 有高達 90% 以上的把握是致病變異。 | 🟠 橘燈 | 進行家系驗證或濕實驗最終確認。 |
| 3. VUS (意義不明變異) | 證據不足,不確定是害蟲還是無害鄰居。 | 🟡 黃燈 | 暫不作臨床處置,持續追蹤最新文獻。 |
| 4. Likely Benign (可能良性) | 大機率是無害的正常基因多樣性。 | 🟢 綠燈 | 排除該變異,繼續排查其他候選者。 |
| 5. Benign (良性) | 確定無害,是一般健康的正常基因。 | ⚪ 灰燈 | 完全忽略。 |
為了完成如此嚴謹的 ACMG 診斷,單靠一個 AI 角色太累了。因此我們在 Google AI Studio 與系統後端設計了 Antigravity 多代理人分工協作架構,讓四位專家 AI 與一位總指揮官同台協作:
┌─────────────────────────┐
│ 👑 總控編排官 (Orchestrator)│
└────────────┬────────────┘
│ (派發診斷任務)
┌───────────────────────┼───────────────────────┐
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 🧬 基因代理人 │ │ 📈 軌跡代理人 │ │ 📚 文獻代理人 │
│ (Gene Agent) │ │ (Track Agent) │ │ (Lit Agent) │
│ 負責 VCF 頻率過濾│ │ 解析 AVI 與 Delta│ │ 搜尋 PubMed 論文 │
└────────┬────────┘ └────────┬────────┘ └────────┬────────┘
│ │ │
└───────────────────────┼───────────────────────┘
│ (匯集三方證據)
▼
┌─────────────────────────┐
│ 🩺 臨床裁決代理人 │
│ (ACMG / Clinical Agent) │ ➔ 輸出最終 ACMG 五級診斷報告
└─────────────────────────┘
現在,打開你的程式碼編輯器,建立 Python 腳本 antigravity_multi_agent.py。我們實作這套能整合 ACMG 條款的多代理人推理邏輯:
import os
import json
from dotenv import load_dotenv
import google.generativeai as genai
load_dotenv()
genai.configure(api_key=os.getenv("GEMINI_API_KEY"))
# 1. 定義【臨床裁決代理人】的 ACMG 判決 System Instruction
ACMG_AGENT_SYSTEM_INSTRUCTION = """
你是一位嚴謹的 ACMG/AMP 臨床遺傳學診斷專家 Agent。
請根據前端三位代理人(基因、軌跡、文獻)提供的綜合數據,自動套用 ACMG 指引進行條款計分:
1. 檢查變異人群頻率 < 0.0001 ➔ 賦予 PM2 條款 (Moderate)
2. 檢查 AlphaGenome AVI > 20 且 Delta Splicing > 0.5 ➔ 賦予 PP3/PS1 條款 (Supporting/Strong)
3. 檢查是否有文獻證明同基因功能喪失 ➔ 賦予 PP4/PS3 條款
【最終輸出】計算條款組合,輸出國際標準的 ACMG 分級 (Pathogenic / Likely Pathogenic / VUS / Likely Benign / Benign) 與 JSON 格式說明。
"""
def run_antigravity_acmg_pipeline(gene_data, track_data, literature_data):
"""整合三大代理人數據,交由 ACMG 臨床代理人進行最終裁決"""
model = genai.GenerativeModel(
model_name="gemini-1.5-pro",
system_instruction=ACMG_AGENT_SYSTEM_INSTRUCTION,
generation_config={"response_mime_type": "application/json"}
)
# 打包三位 Agent 收集到的證據包
evidence_payload = {
"gene_agent_evidence": gene_data,
"track_agent_evidence": track_data,
"literature_agent_evidence": literature_data
}
prompt = f"請針對以下四大代理人搜集到的證據包,進行 ACMG/AMP 自動化條款對照與最終分級:\n{json.dumps(evidence_payload, ensure_ascii=False)}"
print("🩺 [Antigravity Multi-Agent] 臨床裁決代理人正在進行 ACMG 綜合審查...")
response = model.generate_content(prompt)
return json.loads(response.text)
if __name__ == "__main__":
# 模擬前三大 Agent 傳回的綜合數據 (以六週大幼兒 DNM1 變異為例)
mock_gene_evidence = {"gene": "DNM1", "variant": "chr9:128225994:G:A", "gnomad_af": 0.0, "acmg_rule": "PM2"}
mock_track_evidence = {"avi_score": 24.7, "max_delta_splicing": 0.85, "tissue": "Glutamatergic_Neuron", "acmg_rule": "PP3_Strong"}
mock_lit_evidence = {"pubmed_pmid": "38212345", "finding": "In-frame insertion causes dominant-negative loss of function", "acmg_rule": "PS3"}
# 執行最終 ACMG 裁決
acmg_verdict = run_antigravity_acmg_pipeline(mock_gene_evidence, mock_track_evidence, mock_lit_evidence)
print("\n" + "="*50)
print("🏆 Antigravity 多代理人系統最終 ACMG 診斷判決報告 (JSON):")
print(json.dumps(acmg_verdict, ensure_ascii=False, indent=2))
print("="*50 + "\n")
執行這段腳本後,系統會自動輸出包含 ACMG_Classification: "Pathogenic" 的 JSON 報告,並詳細載明符合了 PM2 + PP3 + PS3 條款,提供了完整且符合國際醫療標準的數位報告!