🎯 什麼情境該想到我

當你「要在 prompt 裡放範例讓模型照著做,卻不知道該挑哪幾個、放幾個、怎麼排,換個範例結果就不一樣」的時候。

⚙️ 怎麼用(步驟 / 公式)

上下文學習(ICL):在 prompt 裡放任務說明和幾個示範,模型從上下文學到任務的規則,不需要額外訓練。

1. 先選形式

形式做法優點代價
零樣本只給任務說明泛化最廣效果完全看模型本身能力
單樣本給 1 個示範像「舉一反三」效果強烈依賴那一個示範夠不夠代表性
少樣本給幾個到十幾個特定任務明顯變好示範越多推理越貴;示範的代表性和多樣性決定效果

2. 挑示範:相似性 vs 多樣性

兩個原則:相似性(跟眼前問題越像越好)、多樣性(涵蓋不同面向,讓模型從多角度理解任務)。書整理三種做法:

做法代表怎麼挑缺點
直接檢索KATE用編碼器把問題和候選示範(拿掉標籤)轉成向量,取 cosine 最高的前 K 個不管多樣性,示範容易同質化
聚類檢索Self-Prompting先用 K-Means 把候選分成 K 群,每群挑一個跟問題最像的有些群跟問題根本不像,相似性不夠
迭代檢索RetICL每挑一個,就依「問題+已挑的示範」更新狀態再挑下一個計算比較複雜

書的判斷:前兩種常在相似性與多樣性之間顧此失彼;迭代檢索兼顧兩者,複雜任務上較好。
實務起點(我的整理):先用直接檢索,發現示範都長得一樣、模型只會照抄某一類時,再換聚類或迭代。

3. 示範本身的五個坑

  1. 格式:簡單分類只要「輸入 → 輸出」;算術、程式這類推理任務,示範要寫出中間推理步驟(CoT 形式),只給答案不夠(見 工具-思維鏈的變體怎麼選)。
  2. 標籤要對:標錯的示範會讓模型學到錯的對應。★ 越大的模型對錯誤標籤越敏感,小模型反而不太受影響。
  3. 數量:多放通常會變好,但邊際效益遞減;生成任務比分類任務更吃示範數量。
  4. 順序:不同順序表現會顯著不同,而且最佳順序依模型而定:對 A 模型有效的順序,換到 B 模型不一定有效,也跟資料集特性有關。所以換模型就要重新驗證順序。
  5. 任務說明:寫清楚的任務說明本身就能提升 ICL。

4. ICL 為什麼有效、什麼時候沒用

  • 書給的解釋(Xie et al. 2022,仍是開放研究問題):把 ICL 看成隱式貝葉斯推理。模型在預訓練時學到很多潛在「概念」,示範的作用是把模型錨定到其中相關的概念上。
  • 推論:預訓練裡沒什麼相關資料的垂直領域,光靠 prompt 做不到領域適配(書在第 4 章開頭也這樣說),這時要考慮微調或 RAG。
  • 模型要夠大:ICL 是規模夠大才出現的能力,書說通常要億級參數以上,舉出最小有 ICL 能力的是 Qwen2-0.5B。
  • 預訓練資料跨領域、任務多樣、含罕見類別與「突發性」分佈時,ICL 比較穩。即使單一領域語料跟目標任務高度相關,也不保證 ICL 最好。

5. 檢查清單

  • 示範的標籤都正確(大模型會被錯標帶偏)
  • 示範之間夠多樣,不是同一類的重複
  • 推理型任務的示範有寫中間步驟
  • 換模型時重測示範順序
  • 示範用分隔符和輸入清楚隔開:書的消融實驗中拿掉分隔符後,模型把示範也當成待分類的句子

🧪 我實際套用的紀錄

  • (尚無)

⚠️ 注意 / 什麼時候不適用

  • 書對這些因素幾乎沒給實驗數字,都是方向性結論;實際影響要在自己的評估集上量(見 工具-AI系統評估)。
  • 示範很長時成本會疊上去,要跟效益一起算。書提到 LLMLingua 壓縮 prompt 可壓到原長的 1/20、幾乎不掉效能,不過這是論文宣稱的數字。
  • 做過指令微調的對話模型零樣本就很強,未必需要示範;先試零樣本當基準線。

🔗 相關工具