附錄 4:Prompting 心法 — 讓 AI 幫你寫 code
這章教你怎麼跟 AI 要 code——本書整套「📋 複製這段話,貼給 AI」就是這套心法的成品。 速記版(三原則)在 附錄 1 §B;這裡是完整版 + 可複製模板 + 病人隱私守則。
一句話心法
AI 是一個「打字飛快、但完全不認識你的資料、也不懂你臨床情境」的住院醫師;你是主治。
它能在 3 秒內生出 50 行 R code,但它不知道你的欄位叫什麼、不知道 faricimab 怎麼給、會把統計細節講得很有自信卻是錯的。 你的工作不是「自己寫」,而是把情境講清楚、把產出驗證好。這章就是教你「把情境講清楚」。
一個好的 code prompt 的五個零件
幾乎所有「AI 寫出來的 code 跑不動 / 跑出怪東西」,都是因為少給了下面某一塊:
| 零件 | 你要給什麼 | 不給會怎樣 |
|---|---|---|
| ① 環境 | 「我在 RStudio / Posit.Cloud 跑 R」 | AI 給你 Python,或裝不起來的套件 |
| ② 資料長相 | 貼 glimpse(df) 或欄位名 + 型別 |
AI 幻想欄位名(寫 bcva_letters 但你的是 bcva)→ 跑出 NULL |
| ③ 明確任務 | 要做什麼、用哪個套件 / 函數 | AI 自由發揮,用跟同學不一樣的做法 |
| ④ 輸出格式 | 「可直接貼 Console 跑、最上面加 library()、加中文註解」 |
AI 給一堆解釋、漏掉 library()、要你自己拼 |
| ⑤ 慣例 / 限制 | 「用 tidyverse 的 \|>、用最新函數」 |
AI 給 5 年前的寫法(gather() 而非 pivot_longer()) |
②「資料長相」是新手最常漏、也最致命的一塊。 你不用貼整份資料,貼 glimpse(df) 的輸出(欄位名 + 型別 + 前幾筆)就夠 AI 對齊了。
萬用模板(複製去填)
把這個骨架存起來,每次要 code 就填空:
我在 Posit.Cloud 上的 RStudio 跑 R。
我有一個 data frame 叫 `___`,glimpse 長這樣:
[貼上 glimpse(df) 的輸出]
請給我 R code,用 `___`(套件 / 函數)做這件事:
1. ___
2. ___
要求:
- 可以直接複製貼到 RStudio Console 跑
- 最上面用 library() 載入需要的套件
- 用 tidyverse 的 |> pipe、用最新版函數
- 每段加繁體中文註解
- 先給 code,不用長篇解釋
填好之後再看一眼「五個零件」都齊了沒,就可以貼。
❌ vs ✅:四種常見情境
寫一段新的 code
❌ 「幫我畫 BCVA 隨時間的圖」
✅ 「我有 data frame fu_long,glimpse:[貼]。請用 ggplot2 畫 line plot:x = week、y = bcva_change、依 arm 上色,加 95% CI 的 error bar。可直接貼 Console 跑、加中文註解。」
Debug(最有價值的用法)
❌ 「我的 code 壞了,幫我看」
✅ 「我跑這段:[貼 code],出現這個錯誤:[貼完整紅字]。我的資料 head 長這樣:[貼 5 列]。請告訴我原因和怎麼改。」
改寫 / 套到新資料
❌ 「改一下」
✅ 「下面這段是 trial 資料的 code:[貼]。請幫我改成讀 data/my_hospital_baseline.csv、欄位名一樣,其他邏輯不變。」
看懂別人的 code
✅ 「請幫我逐行解釋這段在做什麼,用繁體中文,假設我沒學過 R:[貼 code]」——本書「參考程式碼」看不懂時就這樣問。
對話節奏:開新 vs 續前
呼應本書每個任務標的 🆕 / ↩︎️ 記號(見 Part 1 的「對話管理」說明):
- 🆕 開新對話:換新主題、或問一個獨立概念時。免費版 AI 上下文有限,別把所有東西塞進同一個對話,它會越來越鈍、忘記前面設定。
- ↩︎️ 續前對話:要 AI「改剛剛那段」「沿用剛剛的 model / 變數」時——它需要記得前文。
迭代回饋才是 AI 寫 code 的精髓,把它當 pair programming:
給情境 + 任務 → AI 給 code → 你跑 → 紅字 / 怪結果
↑ │
└────── 貼錯誤 / warning / 期望 回去 ◀────┘
(續前對話,一輪一輪逼近)跑出 deprecation warning?把 warning 貼回去:「請改用最新版 dplyr/tidyr 寫法」。
🔒 病人隱私:絕對不要貼真實 PHI
不要把可識別的真實病歷資料(姓名、病歷號、生日、真實檢查值整表)貼進 ChatGPT / Gemini / Claude 等公開 AI。 那等同把 PHI 上傳到第三方,違反院內資安與 IRB 規範。
正確做法:AI 要的是「資料長相」,不是「真實資料」。給它:
- 欄位名 + 型別(
glimpse()的結構,把值遮掉也行) - 2–3 列「假資料」(自己編的數字,schema 一樣就好)
本書全程用模擬資料正是這個道理——你跟 AI 練的是「拆需求、看 code」,真實資料留在院內 R 環境裡跑。
你一定要做的驗證
AI 會用非常有自信的語氣寫錯——尤其在「眼科專業」與「統計細節」:藥物分類、Q4W vs T&E、random effect 結構、CMH 權重公式、PSM 設定都常出錯。
把「驗證」當成你不可外包的責任:
- 對照教材:先翻本書對應任務的「參考程式碼」比對做法。
- 查 ref:方法概念不確定,回頭看
references.bib引到的論文(Cheung 2025、Austin 2011、Ho 2011 等)。 - 跑 sanity check:結果跟 paper / 常識差太多就是有問題(例:Table 1 兩臂年齡差 20 歲、proportion > 100%)。
- 課堂現場統一用教材的參考程式碼跑,AI 版本可能用不同套件、不同預設,產出跟同學對不上。
更多踩雷案例見 附錄 1 §C「三個常見坑」。
貼出去之前的健檢清單
六項都打勾,再按 Enter。
- AI = 打字快但不懂你資料的 RA;你是負責驗證的主治
- 好 prompt 五零件:環境、資料長相、明確任務、輸出格式、慣例
- 用「萬用模板」填空,最常漏的是「貼
glimpse(df)」 - Debug 就把完整錯誤訊息貼回去;迭代 = pair programming
- 絕不貼真實 PHI——給 schema + 假資料就好
- AI 會自信地寫錯統計,對照教材 + 查 ref + sanity check 是你的責任