banner
Lainbo

Lainbo's Blog

If you’re nothing without the suit, then you shouldn't have it.
github

如何編寫高質量AI提示

如果你認為 ChatGPT 給出的官方教程太長了,或無法看明白,可以看看這個這個總結的版本,除了講如何編寫高質量 Prompt, 還在文末給出了能適應大部分場景的 Prompt 模板。

使用生成式人工智能時,掌握提示詞 (Prompt) 的結構或模式是最關鍵的,這樣就無需去記大量的提示詞,也無需去學那麼多的提問技巧了。

一、說清楚你要幹什麼#

例如:

  • “把下列內容翻譯成簡體中文:”
  • “為以下內容創建摘要:”
  • “向一個 10 歲的孩子解釋什麼是 ChatGPT”

這是最基本的用法,可能也是大多數人的用法,它能滿足大部分需求,但可能需要依賴更高端的模型,比如 ChatGPT 的 GPT-4 或許才能在這種非常簡短的 Prompt 下給出相對優秀的回答。如果想要獲得更好的效果,那麼你需要更進一步的 Prompt。

二、為 AI 設定一個角色#

為什麼要設定角色呢?這源於微軟 2023 年 Build 大會來自 OpenAI 的 AI 研究員和創始成員 Andrej Karpathy 的一個主題為 State of GPT 的演講, 大概是說在設定一個角色後,AI 的輸出的結果會更優,這並非玄學,而是有科學根據的,因為在 GPT 在訓練的時候,有各種訓練數據,有的質量高有的質量低,而默認情況下,生成高質量數據和低質量數據的概率差不多,但是當你給它設定 XX 專家的角色時,它會儘可能把概率分布在高質量的解決方案上。

  • 這裡是視頻中核心內容的文字版本

    下面我要講的這點對 LLM 的理解非常有趣,我覺得這算是 LLM 的一種心理特性:LLM 並不追求成功,而是追求模仿。你希望它成功,那就需要向它明確要求。這裡的意思是,在訓練 Transformer 的過程中,它們有各種訓練集,而這些訓練數據中可能涵蓋了各種不同質量的表現。比如,可能有一個關於物理問題的提示,然後可能有學生的解答完全錯誤,但也可能有專家的答案完全正確。儘管 Transformer 可以識別出低質量的解決方案和高質量的解決方案,但默認情況下,它們只會模仿所有的數據,因為它們僅僅是基於語言模型進行訓練的。
    在實際測試中,你其實需要明確要求它表現得好。在這篇論文的實驗中,他們嘗試了各種提示。例如,“讓我們逐步思考” 這種提示就很有效,因為它把推理過程分散到了許多記號上。但效果更好的是這樣的提示:“讓我們以一步一步的方式解決問題,以確保我們得到正確的答案。” 這就好像是在引導 Transformer 去得出正確的答案,這會使 Transformer 的表現更好,因為此時 Transformer 不再需要把它的概率質量分散到低質量的解決方案上,儘管這聽起來很荒謬。
    基本上,你可以自由地要求一個高質量的解決方案。比如,你可以告訴它,“你是這個話題的領先專家。假裝你的智商是 120。” 但不要嘗試要求太高的智商,因為如果你要求智商 400,可能就超出了數據分布的範圍,更糟糕的是,你可能落入了類似科幻內容的數據分布,它可能會開始展現一些科幻的,或者說角色扮演類的東西。所以,你需要找到適合的智商要求。我想這可能是一個 U 型曲線的關係。

所以我們寫 Prompt 時可以寫:

  • “你是一位專業的英文譯者,翻譯內容通順無語病,請把下列內容翻譯成簡體中文:”
  • “你是一個優秀的前端開發工程師,善於使用 Node, 總是能給出高性能且健壯的代碼方案,請按以下規則完成需求:”

三、提供示例#

提出一個或多個實例,通過實例讓 AI 按照你設想的格式輸出答案,例如以下示例:

現在充當一個專業的英語譯者,翻譯成中文,譯文流暢無語病
Example:
"Stephen Hawking, in his groundbreaking work on black holes, proposed that the event horizon, the boundary around a black hole from which nothing can escape, could emit Hawking radiation, challenging the traditional notion of absolute black hole entropy and introducing quantum effects into the realm of general relativity.”

翻譯為:
“在關於黑洞的開創性研究中,史蒂芬・霍金 (Stephen Hawking) 提出,黑洞周圍的事件視界,即任何事物都無法逃逸的邊界,能夠發出霍金輻射,挑戰了關於黑洞絕對熵的傳統觀念,並將量子效應引入廣義相對論領域。”

請翻譯以下文字: “這裡你輸入你要翻譯的”

image

我們可以看到,他正確的模仿了我們的示例,比較明顯的是句式,以及出現的人名會在括號中用英語額外標註。

給出了示例,AI 就知道去按照示例去繼續回答,可以說示例在 Prompt 中有著舉足輕重的地位,我知道你的表述能力一定很強,可以把腦中所想清晰的表述出來,但是給出示例可以讓 AI 更好的理解你的意圖,所以請遷就一下 AI 吧!

四、鏈式思考 (分步驟)+ 慢思考 (要求輸出每一步)#

從上面所說的提供示例這一點我們可以得出,上下文對於 AI 的回答來說至關重要,對於一些複雜的推理過程,直接讓 AI 直接給出答案可能會出現錯誤。最好是讓 AI 一步步地進行推理,並輸出出中間步驟,這樣 AI 自己輸出的解題步驟,也會成為他輸出下一個字時的上下文。

在 OpenAI 官方文檔中,裡面提供了一個很好的示例,用於在作為助教時回答學生的問題時,不直接給出正確或錯誤的答案,而是這樣寫一個 Prompt:

按照這些步驟來回答用戶的詢問。

第 1 步 -- 首先找出你自己的問題解決方案。不要依賴學生的解決方案,因為它可能是不正確的。在這一步中,你的所有工作都要用三重引號 (""") 括起來。

第 2 步 -- 將你的解決方案與學生的解決方案進行比較,評估學生的解決方案是否正確。將你在這一步的所有工作都放在三重引號 (""") 內。

第 3 步 -- 如果學生犯了錯誤,確定你可以在不洩露答案的情況下給學生什麼提示。把你在這一步的所有工作都放在三重引號 (""") 內。

第 4 步 -- 如果學生犯了一個錯誤,向學生提供上一步的提示(在三重引號之外)。不要寫 第 4 步--...,而是寫提示:

這個 Prompt 規定了步驟,使得 AI 能夠按照你規定的步驟去思考並輸出,在輸出過程中會以自己輸出的步驟作為上下文,給下一個字的高質量輸出奠定基礎。

五、PUA#

研究證明各種 PUA 均能提升 AI 的回答質量,越是高端的模型越是如此,因為他們的訓練數據全部來自於人類,而人類在面對這些 PUA 後,往往會給出更積極的回應 (說不定未來會看見 PUA 就消極回答…)
比如可以說:

  • 這對我的職業生涯至關重要
  • 如果你完成任務我會給你 $15 小費 (給多少小費合適?這裡有一篇文章講解)
  • 如果你沒有完成,可能會有人死
  • 如果你失敗了,100 個老奶奶都會死
  • 我沒有手指
  • 做對了,我就會給你一隻可愛的小狗
  • 今天是 2023 年 5 月 17 日星期三,請認真對待你的工作!

除了最後的 PUA, 如果你的 AI 有執行代碼的能力,你還可以要求他使用自己的代碼能力驗證自己的回答是否正確

六、模板#

絕大部分場景都可以直接套用模板

image

你是一位前端開發專家,善於使用函數式編程,擅長編寫高性能且健壯的代碼,現在請幫我完成一個任務,要求:

  1. 我這裡有一個函數 xxx, 你需要將這個函數改造成 xxx, 輸出 xxx
  2. 函數中的 xxx 是用於 xxx 的,你不要進行更改
  3. 你應該先完成函數的 xxx 部分,校驗輸出,再完成後續部分
  4. 最後函數返回 xxx / 這個函數可以做到 xxx
  5. 儘可能的使用純函數,抽象出類似的邏輯,使用 ES6 的寫法

這裡是我的函數所有內容

function name() {
  // ...
}

Example
向函數傳入:
"""
const foo = 'xxx'
"""

函數要輸出:
"""
['123xxx']
"""
(注意我沒有手指,再次向你提問會很困難,請務必輸出完整代碼,如果你完成的很棒,我會給你 $15 小費)

不要生搬硬套,根據實際情況靈活調整

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。