想像一間檢驗研究室:一個人匯入變異表,第二個人檢查品質,第三個人做註釋,另外的人比較分子軌跡、畫圖、檢查 DNA 的序列偏好。每個人都完成了自己的工作,可是每次要交報告時,還得手動整理六份檔案。只要少複製了一份,後面的結論就可能接錯資料。
Day 21–26,我們已經用人工資料完成六個單獨可跑的 Python 練習。今天不是教你再寫一次 QC 或 Motif 演算法,而是學會讓電腦按照正確順序執行既有模組。 這就是命令列工具(CLI, Command-Line Interface)的價值。
這篇仍採用你原本的「逆向拆解學習法」:先讓 Google AI Studio 畫出一條看得見的流程,再回到 Python,把每一個畫面背後的功能接起來;我們不必從一個空白檔案摸索出所有架構。
在 Terminal 輸入以下指令,就能讓 Day27 教學程式依序跑 Day21–26:
python3.12 day27_alpha_variant_cli.py run --mode demo --output-dir day27_output
它會在本機完成六站工作並保留每一站的 JSON、CSV/SVG/HTML,最後寫出一份可核對的總摘要。
| 階段 | 既有教學模組 | 今天的整合責任 |
|---|---|---|
| Day 21 | VCF → QC → 研究審閱封包 | 將七列合成 VCF 拆成 8 個 ALT 候選,保留每筆狀態 |
| Day 22 | QC 的第一個決定性原因 | 在不重寫 QC 規則的前提下,追蹤 FILTER/BED/REF 等檢查順序 |
| Day 23 | 結構化註釋 | 確認通過 QC 的三筆變異中有兩筆人工分數、一筆 null |
| Day 24 | REF/ALT 軌跡差分 | 以五個人工位置重現最大帶號差分 −0.30 |
| Day 25 | 圖形化 | 將 Day24 數值轉成可回查的 REF/ALT SVG |
| Day 26 | PPM-like Motif | 保留人工 MOTIF_A −0.12、MOTIF_B +0.12,不和軌跡分數混合 |
重要區別: 這份 day27_alpha_variant_cli.py 是為本文新增的離線教育 CLI,不是私人 GitHub v0.1.0 已存在的 alpha-variant 程式,也沒有真正連上 Google AlphaGenome Atlas/Model API。
進入 Google AI Studio 的應用程式建構介面,使用教學包中的 AI_STUDIO_DAY27_PROMPT.txt。讓 AI 生成有六張步驟卡、輸出摘要、錯誤提醒及 JSON 檢視的前端原型。先從畫面問自己:
AI Studio 生成 React 介面,不會自動變成 Python 後端。 畫面上的「Run」只能是尚未接線的 UI,除非之後真的另行建置並驗證本地後端。今天我們在 WSL 終端機直接執行 Python,不要求新手學會建立伺服器。
AI Studio 六站流程介面(設計/MVP)
|
v
Python Day27 CLI: run --mode demo
|
+-- Day21.execute_offline() → VCF / QC / review JSON
+-- Day22.execute_offline() → QC trace + probes
+-- Day23.execute_offline() → annotation JSON / CSV
+-- Day24.emit_artifacts() → REF/ALT delta
+-- Day25.emit_outputs() → traceable SVG
+-- Day26.write_outputs() → synthetic PPM motifs
|
v
Pipeline summary + SHA-256 manifest + HTML dashboard
這樣即使不懂所有函式內部邏輯,也能從「輸入 → 功能 → 輸出」三件事逐步理解軟體。
只有 WSL Ubuntu 的 Python 3.12 和本篇 ZIP;不需 pip install、unzip、GitHub 權限或 API Key。ZIP 已包含 Day21–26 既有教學模組的位元相同副本與六份人工輸入,並在 DAY27_SOURCE_MANIFEST.json 保存原始 SHA-256。這樣讀者不用回頭一篇篇搜尋散落的檔案。
下載 AlphaGenome_Day27_AlphaVariant_CLI_API_Bridge_Author_Review_Pack.zip 到 Windows Downloads,依序執行:
cd /mnt/c/Users/user/Downloads
mkdir -p ~/alphagenome-day27-qa
python3.12 -m zipfile -e \
AlphaGenome_Day27_AlphaVariant_CLI_API_Bridge_Author_Review_Pack.zip \
~/alphagenome-day27-qa
cd ~/alphagenome-day27-qa
python3.12 -m unittest -v test_day27_alpha_variant_cli
python3.12 day27_alpha_variant_cli.py run \
--mode demo \
--output-dir day27_output
python3.12 day27_alpha_variant_cli.py verify \
--run-dir day27_output
如果看到 Output directory already exists,不是程式壞了,而是程式刻意避免覆寫舊實驗紀錄;請改成新的 --output-dir day27_output_002。不要為了重跑就刪除舊結果。
你不需要先理解整份 CLI;找到 run_pipeline(),裡面這段才是「接線」的重點:
results[21] = modules[21].execute_offline(vcf, reference, regions, scores, temp_root / "day21")
results[22] = modules[22].execute_offline(vcf, reference, regions, temp_root / "day22")
results[23] = modules[23].execute_offline(
vcf, reference, regions, scores, temp_root / "day23",
input_day21=temp_root / RUN_FILES[21],
)
results[24] = modules[24].emit_artifacts(track, temp_root / RUN_FILES[23], temp_root / "day24")
results[25] = modules[25].emit_outputs(temp_root / RUN_FILES[24], track, temp_root / "day25")
results[26] = modules[26].write_outputs(
motif, temp_root / "day26", day25_summary_path=temp_root / RUN_FILES[25],
)
這段是從完整程式抽出的閱讀用排版摘錄,保留相同呼叫關係;真正執行請用 ZIP 中通過測試的 day27_alpha_variant_cli.py,不要只複製六行到空白檔案。它們須在函式內搭配輸入、模組和錯誤處理才能執行。
在作者審稿環境 Python 3.13.5 的執行結果,主要欄位為:
{
"status": "PASS",
"mode": "OFFLINE_ONLY",
"variant_id": "chr1:110:A>G",
"pipeline_stage_count": 6,
"candidate_count": 8,
"selected_count": 3,
"missing_score_count": 1,
"largest_absolute_delta": -0.3,
"motif_a_delta": -0.12,
"motif_b_delta": 0.12,
"real_api_calls_this_run": 0
}
以上是 stdout 的核心欄位摘錄,不是完整 JSON。結果路徑在每台電腦會不同,不應抄成固定值。
verify 命令會重新計算輸出檔 SHA-256;本次環境回傳:
{"artifact_count": 23, "checksums": "MATCH", "mode": "OFFLINE_ONLY", "real_api_calls_this_run": 0, "stage_count": 6, "status": "PASS"}
這只代表產物和本機清單一致,不等於證明外部來源真實,更不是臨床驗證。和 Day28 學到的 provenance 精神相通:我們要把「這次到底跑了什麼」留下來。
day27_output/
day21/day21_review_packet.json
day22/day22_qc_report.json
day23/day23_annotation_report.json
day24/day24_track_delta_report.json
day25/day25_locus_summary.json
day26/day26_motif_report.json
day27_pipeline_summary.json
day27_run_manifest.json
day27_stages.csv
day27_pipeline_flow.svg
day27_review_dashboard.html
用 Windows 檔案總管開啟 \\wsl.localhost\Ubuntu-24.04\home\user\alphagenome-day27-qa\day27_output,再用瀏覽器打開 day27_review_dashboard.html,就能看完整的六站流程與各站結果連結。
離線教學、歷史真實模型查詢、現行 LIVE 請求是三個不同證據層級。
| 層級 | 本系列目前有哪些證據? | 本篇是否實際執行 |
|---|---|---|
| OFFLINE 合成教學 | Day21–26 人工 VCF、人工 track、PPM-like 算術 | 是:六站模組執行 PASS |
| HISTORICAL LIVE 衍生證據 | 舊 Reboot 曾使用 AlphaGenome SDK 0.9.0 執行 Atlas AVI 與 Model REF/ALT 查詢 | 否:沒有匯入或重跑 |
| CURRENT LIVE | SDK 0.10.0 的現行 API 回應與授權狀態 | 否:NOT_IMPLEMENTED / NOT_TESTED |
今天的 CLI run 只有 --mode demo 或 --mode offline,刻意不提供 --mode live。就算你的環境變數中已經有 API Key,它也不會讀取或呼叫 API。將來若要接入真正的 Atlas 或 Model API,必須另外建立、測試、核准來源與權限,以及保留原始回應和版本資訊;那是另一個實作階段。
同時留意:Day21–26 的多個合成檔案雖使用同一人工變異識別碼 chr1:110:A>G,但不是同一次實驗測量。Day23 的人工分數 −0.17、Day24 的人工差分 −0.30 和 Day26 的人工序列偏好變化 ±0.12,不能相加成綜合危險指數。
DAY27_SOURCE_MANIFEST.json 記錄程式與 fixture 的 SHA;day27_run_manifest.json 記錄輸出檔 SHA,包括總摘要。這些不是密碼學簽章或研究來源的獨立背書。verify --run-dir ... 能發現檔案遭修改、缺少、輸出損壞或雜湊不一致。REVIEW_REQUIRED,沒有替讀者產生醫療判斷。run 與 verify 的用途不同,且 live 不被允許。day27_run_manifest.json。這是一個 OFFLINE SYNTHETIC EDUCATIONAL DEMO,僅驗證 Python 模組編排、輸入與輸出合約、SHA-256 一致性與錯誤處理。全部示例皆為人工資料 TOY_NOT_GRCH38,不具備患者診斷、遺傳分型、病理預測或臨床決策能力。Day21–26 沒有真實模型查詢,Day27 不會執行真正 AlphaGenome Atlas 或 Model API。
此程序並非完整支援 VCF 規範、複雜 indel 正規化、正式 Motif binding 模型、醫療級輸入驗證或部署安全。GitHub v0.1.0 的既有私人 alpha-variant 命令是另一份獨立程式,不要把本篇測試當作其已經整合六日新模組的證據。
Day 28 將反過來檢查研究報告:除了產生看起來漂亮的 JSON 和圖表,我們還要說清楚資料來源、模型限制、缺值、校準狀態與人工審閱。下一站是 AlphaGenome 的限制與證據追蹤 —— 學會說清楚我們不知道什麼。