歡迎來到啾啾的博客🐱。
記錄學習點滴。分享工作思考和實用技巧,偶爾也分享一些雜談💬。
有很多很多不足的地方,歡迎評論交流,感謝您的閱讀和評論😄。
目錄
- 1 引言
- 1.1 引用資料
- 2 更好的提示
- 2.1 情景學習ICL
- 2.1.1 基礎指令式Prompt(Zero-shot)
- 2.1.2 少量樣本提示的Prompt(Few-shot)
- 2.1.3 QA
- 2.2 Chain of Thought(CoT)
- 2.2.1 零樣本思維鏈(Zero-shot CoT)
- 2.2.2 少樣本思維鏈 (Few-shot CoT)
- 2.2.3 自我一致性(Self-Consistency)
- 2.3 其他
- 3 迭代技巧
- 3.1 直接提問
- 3.2 任務驗證
- 3.3 引導反思法
- 4 總結
1 引言
在上一篇中,我們了解了提示詞Prompt的構成、評估、優化和抄作業方法。
了解到了可以通過LLM預處理、核心共識等手段優化或寫出一個好的提示詞,也建立了好的提示詞應該是給予LLM引導的認知。
本篇我們繼續深入了解Prompt,了解寫好Prompt的細節。
1.1 引用資料
《Can Generalist Foundation Models Outcompete Special-Purpose Tuning? Case Study in Medicine》
https://huggingface.co/docs/transformers/main/tasks/prompting
2 更好的提示
2.1 情景學習ICL
情境學習(ICL)是基礎模型的一項關鍵能力,允許模型僅通過少數任務示例即可解決新任務。例如,可以通過在測試問題前加上幾個不同的問題示例和期望結果來創建 ICL 提示。ICL 不需要更新模型參數,但可以提供類似于微調的效果。在少樣本提示中使用的示例選擇可以顯著影響模型性能。
ICL核心思想是給予情景/角色+提供示例+定義輸出格式+明確任務邊界:
- 給予情景/角色: 開頭設定了“專業的數據分析師”角色,引導模型以更專業的標準進行判斷。
- 提供范例 (Few-shot Learning): 提供了兩個清晰的示例,讓模型學習到任務的具體要求和判斷標準。
- 定義輸出格式: 示例本身就規定了清晰的分類:結果格式,模型會大概率遵循這個格式,確保輸出的統一性和規范性。
- 明確任務邊界: 使用分隔符—清晰地將引導部分和實際任務分開。
即,創建提示詞時給出情景可以引導LLM更好地完成任務。
2.1.1 基礎指令式Prompt(Zero-shot)
這個例子直接給出任務,不提供任何背景情景或格式示例。
任務:將以下客戶評論總結為“積極”或“消極”兩類。評論:
1. “我上周買的這雙鞋,穿起來非常舒服,而且款式也很新潮,朋友們都問我在哪買的。”
2. “等了兩個星期才到貨,結果發現尺碼發錯了,聯系客服也沒人理,太失望了。”
3. “這款咖啡機的設計很漂亮,放在廚房里很有格調。磨出來的咖啡豆也很香醇。”
- Qwen3深度思考 時間:20250616
這個 Prompt 很直接,但它依賴于模型自身對“積極”和“消極”的理解,并且沒有指定輸出格式。模型可能會給出正確的答案,但輸出形式可能不統一。
例如這里Qwen3直接給出“[積極,消極,積極]
”列表。我們再次請求(每次請求均新開對話)
可以看到每次輸出都不一致。
2.1.2 少量樣本提示的Prompt(Few-shot)
這個例子通過提供背景角色、明確的任務指令,并給出幾個完整的“問題-答案”范例,來為模型設定清晰的情景和預期的輸出格式。
你是一位專業的數據分析師,負責處理電商平臺的客戶反饋。你的任務是將客戶的原始評論精準地分類為“積極”或“消極”。請嚴格按照我給出的格式完成任務。以下是一些示例:# 示例 1
評論:“這款耳機的音質超出了我的預期,降噪效果也很棒,通勤路上終于可以安靜地聽音樂了。”
分類:積極# 示例 2
評論:“我訂的是套餐A,但送來的是套餐B,而且食物都冷了。”
分類:消極
---現在,請根據以上標準和格式,對以下新的評論進行分類:評論:
1. “我上周買的這雙鞋,穿起來非常舒服,而且款式也很新潮,朋友們都問我在哪買的。”
2. “等了兩個星期才到貨,結果發現尺碼發錯了,聯系客服也沒人理,太失望了。”
3. “這款咖啡機的設計很漂亮,放在廚房里很有格調。磨出來的咖啡豆也很香醇。”
- Qwen3深度思考 時間:20250616
再次請求:
這個 Prompt 給予了模型更豐富的上下文和更明確的引導,通常會比第一個 Prompt 獲得更準確、更穩定的結果。
2.1.3 QA
Q:怎么穩定LLM每次的輸出格式
A:給予示例。少樣本學習是最有效的情景學習方法。通過提示方法,通過少量示例,基礎模型能夠快速適應特定領域,并學會遵循任務格式。
2.2 Chain of Thought(CoT)
思維鏈(CoT)使用自然語言語句,例如“讓我們一步步思考”,明確鼓勵模型生成一系列中間推理步驟。該方法已被發現能顯著提升基礎模型進行復雜推理的能力。大多數思維鏈方法都集中在使用專家手動編寫包含思維鏈的少樣本示例用于提示。
CoT就是引導LLM進行推理、思考。它將一個復雜的任務從 “輸入 -> 輸出” 的黑盒模式,轉變為 “輸入 -> 推理步驟 -> 輸出” 的白盒模式。
但是自我生成的CoT推理鏈存在風險,可能包含幻覺或錯誤的推理鏈。
2.2.1 零樣本思維鏈(Zero-shot CoT)
不給出推理示例,在prompt后面加:
- “讓我們一步步思考。 (Let’s think step-by-step.)”
- “請詳細說明你的推理過程。”
- “請分解問題并逐步解決。”
這種方法非常便捷,對于能力較強的大模型(如 GPT-4)在大多數中等難度的推理任務上效果顯著。
2.2.2 少樣本思維鏈 (Few-shot CoT)
這是更強大、更可控的方式。引導LLM思考并給出思考示范。
你是一位資深的客戶支持主管,需要分析客戶投訴的根本原因并提供解決方案。請遵循嚴謹的邏輯推理過程。# 示例 1
評論:“等了兩個星期才到貨,結果發現尺碼發錯了,聯系客服也沒人理,太失望了。”
分析過程:
1. 識別客戶的核心不滿點:物流慢、商品錯發、客服響應不及時。
2. 問題歸因:物流部門延遲發貨;倉庫部門揀貨錯誤;客服部門人手不足或流程問題。
3. 根本原因:多部門協同流程存在漏洞。
最終結論:這是一個涉及物流、倉儲和客服的綜合性服務失敗案例。---現在,請根據以上分析范例,處理以下新評論:評論:“我買的吸塵器用了一次就充不進電了,申請售后,你們的維修點居然在另一個城市,來回郵費比我買個新的還貴!”
2.2.3 自我一致性(Self-Consistency)
可以通過多次運行和投票來消除單次推理的偶然性錯誤。
- 不只讓模型思考一次,而是讓它用多種方式思考多次(例如,使用略有不同的措辭提問,或者讓模型以不同的溫度參數生成多個回答)。
- 然后檢查這些不同的“思維鏈”最終導向了哪個答案。
- 選擇那個出現次數最多、最一致的答案作為最終結果。
2.3 其他
另外,大量研究和實踐表明,大型語言模型(LLM)對 Prompt 開頭和結尾的信息最為敏感,而處在中間部分的信息則有可能被“遺忘”或忽略。 這種現象被稱為“中間忽略 (Lost in the Middle)”效應。
這與模型處理長文本的內部機制(如注意力機制)有關。模型在生成下一個詞時,會“回顧”整個輸入文本,但它分配給不同位置的“注意力權重”是不均勻的。通常,開頭部分為任務設定了基調和目標,結尾部分是它要直接回應的最新指令,這兩部分自然會獲得最高的權重。
所以,在實戰應用中,我們需要:
- 重要指令放兩頭
將最關鍵的任務指令、角色設定或輸出格式要求,明確地放在 Prompt 的最開始。然后,在所有上下文、示例都提供完畢之后,于結尾處再次重申核心任務或直接提問。
優化前:
請扮演一位營銷專家。這里有一些我們產品的背景資料:[...大量背景資料...],以及一些成功的營銷案例:[...大量案例...]。請為我們的新產品寫一個營銷文案。
優化后:
**任務:為新產品撰寫一份引人注目的營銷文案。**
**角色:你是一位頂級的營銷專家。****產品資料:**
[...大量背景資料...]**參考案例:**
[...大量案例...]**輸出要求:**
請現在根據以上所有信息,為我們的新產品撰寫一份營銷文案,要求風格活潑,不超過200字。
3 迭代技巧
我們在持續調整、迭代prompt時,需要確認LLM記住的規則是否跑偏。
所以,我們需要使用一些指令來查詢LLM的上下文,總結我們給的指令。
3.1 直接提問
通用模板:
- “請總結一下到目前為止,你被賦予了什么角色,以及需要遵守哪些核心要求?”
- “在我們繼續之前,請確認一下你當前的角色設定和任務目標。”
- “你正在扮演什么角色?為了完成我的任務,你需要遵循哪些具體的輸出格式或限制?”
3.2 任務驗證
設計一個“測試任務”,看模型的行為是否符合你之前的設定。這能更好地檢驗模型是否真正“理解”并“應用”了規則。
通用模板:
- “作為一個小測試,請用你現在的角色/格式,處理以下這個簡單任務:[一個與任務無關的簡單輸入]”
- “為了確保你已理解,請用你被要求的格式,重新組織一下這句話:[一句話]”
3.3 引導反思法
和CoT思路類似。引導模型在回答前先“自我反思”一遍規則。
通用模板:
- “對于我接下來的問題,請先在內部思考并一步步確認你需要遵循的指令,然后再給出符合所有要求的最終答案。” (這種方式你看不到它的思考過程,但能提升結果的準確性)
- “請先列出你將要遵循的1、2、3條核心指令,然后在分割線下方,再正式回答我的問題。” (這種方式最透明)
4 總結
結合上篇內容,做一些Prompt編寫小技巧總結。
https://huggingface.co/docs/transformers/main/tasks/prompting 有總結最佳實踐哦
-
清晰結構
至少要有核心公式RPC:規則(Rules)+角色(Persona)+上下文(Context)。 -
給予結果示例(少樣本學習)
引導中包含示例 -
要求推理思考
在prompt附帶思考示例。 -
調整然后多次運行
調整然后多次運行,以獲取偶然性最小的結果。 -
重要指令放兩頭
將最關鍵的任務指令、角色設定或輸出格式要求,明確地放在 Prompt 的最開始。然后,在所有上下文、示例都提供完畢之后,于結尾處再次重申核心任務或直接提問。 -
格式要求(一種分離解耦)
使用 — 或者 # 分隔符分割劃分不同區域,來幫助模型更好地理解結構。 -
多說“做什么”,少說“不做什么”
模型更容易理解和執行正面指令。盡量使用積極、肯定的指令。與其說“不要在回答中使用專業術語”,不如說“請用通俗易懂的語言向初學者解釋”。 -
持續迭代
從簡短且簡單的提示開始,并對其進行迭代以獲得更好的結果。 -
寫出結果簡單開頭
通過寫出第一個詞甚至第一句話來引導模型生成正確的輸出。
總結一下就是“給示例、要思考、多嘗試”。
另外需要注意的是,雖然提示是處理 LLMs 的強大方式,但在某些情況下,使用微調模型甚至進行模型微調效果更好。
以下是一些使用微調模型是合理的情況。
- Your domain is extremely different from what a LLM was pretrained on, and extensive prompting didn’t produce the results you want.
你的領域與 LLM 預訓練的內容極其不同,并且廣泛的提示沒有產生你想要的結果。 - Your model needs to work well in a low-resource language.
您的模型需要在低資源語言環境中表現良好。 - Your model needs to be trained on sensitive data that have strict regulatory requirements.
您的模型需要在嚴格監管要求的數據上進行訓練。 - You’re using a small model due to cost, privacy, infrastructure, or other constraints.
由于成本、隱私、基礎設施或其他限制,你正在使用一個小模型。