前言
提示工程相當於提示設計,它涉及選擇正確的字、句子、符號及格式來指導模型產生高品質的相關文字。
例如以下會有不同的結果,
請告訴我人類的歷史。 VS 請用三句話告訴我人類的歷史。
在 Improving the prompt with prompt engineering 有一些改善 prompt 的方式,以下就來看看有前些做法吧 ^_^
改善 prompt 方式
在 AOAI 的 聊天遊樂場 來測試,prompt 是要取得使用者輸入的意圖以下的意圖是什麼? 我想向行銷團隊發送一封電子郵件,慶祝他們達到了目標
AI 會回 這個意圖是要寫一封慶祝行銷團隊達到目標的電子郵件。
但在程式中,我們需要它回覆的是可預測性的幾種選項就好,
以方便透過程式判斷去執行程式,所以可以進行以下幾種改善方式,
1.讓回覆內容更具體,例如提供項選讓它選擇
1 | 以下的意圖是什麼? |
AI 回答如下,
1 | 這個意圖是要進行 "SendEmail" 的動作,向行銷團隊發送一封電子郵件來慶祝他們達到目標。 |
它有輸出我們的意圖選項,但包含許多其他文字,
如果要程式拿來使用,不是很方便。
所以可以設定它的輸出格式,以利程式來利用 AI 輸出結果。
2.設定輸出 json 格式
1 | 以下的意圖是什麼? 請以 jsno {"intent":intent} 格式輸出 |
AI 回答如下,
1 | { "intent": "SendEmail" } |
3.few-shot
也可以提供一些範例讓它學習(few-shot
),沒提供範例的就叫 zero-shot
例如,
1 | 以下的意圖是什麼? 請以 jsno {"intent":intent} 格式輸出 |
4.告訴 AI 要做什麼才會避免做錯事
有時我們將 temputure 設定成 0 ,可能會得到完全無關的回應,
比較建議是當什麼狀況時,做什麼事,例如,
如果你不知道意圖,就不要猜測;而是回覆 “Unknow”
例如,
1 | 以下的意圖是什麼? 請以 jsno {"intent":intent} 格式輸出 |
5.提供背景訊息(上下文)給 AI
有時提供先前跟 AI 的對話,可以讓 AI 更了解使用者的意思,
例如,
1 | 以下的意圖是什麼? 請以 jsno {"intent":intent} 格式輸出 |
6.使用訊息角色
當對話逾來逾多,使用訊息角色可讓 AI 區分出 system instructions, user input 及 AI response,
例如,
1 | { |
7.加上改變規則
在上述如果因為使用者因素,所以要判斷是 Email 要改成 Message 時,
可以明確寫到規則之中,會比讓 AI 判斷更直接,例如,
1 | 以下的意圖是什麼? 請以 jsno {"intent":"{{intent}}"} 格式輸出 |
參考資源
Improving the prompt with prompt engineering
一二三四五六七,忠孝仁愛禮義廉(古謠): 說人不知恥辱之義(忘八無恥)