為什麼需要 Few-Shot Learning?
在提示詞工程中,我們常通過「零樣本 (Zero-Shot)」指令向 AI 下達命令(例如:「請幫我將這個 C# 方法改為非同步」)。
面臨的痛點:
即使你寫了長篇大論的規則來約束它,AI 仍極易產生「語意幻覺」(例如:它雖然用了 async/await,但漏掉了 Task 返回值,或者沒有在方法名後加上 Async 後綴)。
少樣本學習 (Few-Shot Learning) 透過在提示詞中直接提供 1-2 組完美的「輸入與輸出對照範例」,讓 AI 透過「模式比對(Pattern Matching)」直接模仿人類的高質量實作,這是消除 AI 幻覺最有效率的手段。
Few-Shot 提示詞的黃金公式
一個標準的 Few-Shot 區塊應該具備以下特徵:
┌────────────────────────────────────────────────────────┐
│ Few-Shot Example │
├────────────────────────────────────────────────────────┤
│ 1. Input (輸入) ──▶ 包含典型的問題或舊代碼 │
│ │
│ 2. Thought (思維) ──▶ 簡短解釋重構的技術權衡 (可選) │
│ │
│ 3. Output (輸出) ──▶ 展示完美的合規新代碼與註釋 │
└────────────────────────────────────────────────────────┘
- 極度貼近真實場景:
範例中的程式碼結構必須與你當前面臨的代碼高度相似。如果專案是 .NET 4.8 WinForms,那麼 Few-Shot 範例就絕對不能使用 .NET 8 Minimal APIs。 - 包含「壞味道」與「好設計」:
清楚對比「修改前」與「修改後」的代碼,這能讓 AI 助手清晰看出哪些模式是被禁止的,哪些是被鼓勵的。 - 保持代碼緊湊:
範例代碼應精簡至 10-15 行以內,只保留核心變更邏輯,避免浪費額外的 Context Token。
實戰範例配置
在 Prompt Master 中,Few-Shot Generator 會自動從項目歷史 Commit 記錄中拉取相似的改動,重構為如下格式注入 AI:
<example>
<input>
public void Save(string data) {
File.WriteAllText("log.txt", data);
}
</input>
<output>
public async Task SaveAsync(string data) {
await File.WriteAllTextAsync("log.txt", data);
}
</output>
</example>
實踐證明,提供一組精準的 Few-Shot 對照,其效果勝過寫十條死板的文字約束規則。它讓 AI「看例題學寫字」,從源頭保障了生成代碼的架構合規度。