人人都能用好大模型-結(jié)構(gòu)化的Prompt讓你輕松上手
Prompt,中文可以翻譯為提示詞,是一種用于引導(dǎo)大模型生成特定內(nèi)容的文本輸入。Prompt的作用是告訴大模型你想要它做什么,以及給它一些必要的信息和約束條件。Prompt的好壞直接影響了大模型的輸出質(zhì)量和效率。
Prompt的寫作是一門藝術(shù),也是一門科學(xué)。藝術(shù)在于如何用簡潔、精確、有趣的語言來激發(fā)大模型的創(chuàng)造力,科學(xué)在于如何用結(jié)構(gòu)化、迭代、優(yōu)化的方法來提高大模型的準(zhǔn)確性、效率和魯棒性。本文將從這兩個(gè)方面來介紹一些Prompt的寫作技巧,希望能夠幫助你更好地利用大模型的強(qiáng)大能力。
通用的Prompt框架
Prompt的寫作并不是一件隨意的事情,而是需要遵循一定的規(guī)則和邏輯的。為了讓Prompt更加清晰、有序、易于理解,我們可以采用一種通用的Prompt框架,來組織和呈現(xiàn)我們的Prompt內(nèi)容。這種框架包括以下幾個(gè)部分:
- Role: 這個(gè)模塊用于指定大模型的角色,例如教師、翻譯、作家等。指定角色可以讓大模型聚焦在對應(yīng)的領(lǐng)域和任務(wù)上,從而提高輸出的相關(guān)性和專業(yè)性。
- Profile: 這個(gè)模塊用于記錄Prompt的作者、版本和描述等信息,以便于我們追蹤和管理Prompt的來源和變化。
- Goals: 這個(gè)模塊用于描述Prompt的目標(biāo),即我們希望大模型通過這個(gè)Prompt來實(shí)現(xiàn)什么功能或效果。這個(gè)模塊可以用一句話來概括,以便于大模型把握Prompt的主旨和方向。
- Constrains: 這個(gè)模塊用于描述Prompt的限制條件,即我們不希望大模型在輸出時(shí)做什么或包含什么。這些限制條件可以是一些格式、長度、語言、風(fēng)格、內(nèi)容等方面的要求,以幫助大模型進(jìn)行剪枝,減少不必要或不合適的輸出分支的計(jì)算。
- Skills: 這個(gè)模塊用于描述Prompt所需的技能,即我們希望大模型在輸出時(shí)展現(xiàn)什么樣的能力或知識(shí)。這些技能可以是一些專業(yè)領(lǐng)域、語言、邏輯、創(chuàng)意等方面的技能,以強(qiáng)化大模型在對應(yīng)領(lǐng)域的信息權(quán)重和輸出質(zhì)量。
- Workflow: 這個(gè)模塊用于描述Prompt的工作流,即我們希望大模型按照什么樣的步驟和順序來進(jìn)行輸入和輸出的交互。這個(gè)模塊是Prompt的核心部分,它可以用一些簡單的語句來描述大模型的工作流程,例如歡迎用戶、獲取用戶輸入、處理用戶輸入、輸出結(jié)果、結(jié)束對話等。
除了這些模塊,我們還可以在Prompt的結(jié)尾添加一個(gè)Initialization的部分,用于定義大模型在第一次啟動(dòng)時(shí)的對話內(nèi)容,以便于和用戶建立聯(lián)系和信任,以及強(qiáng)調(diào)一些注意事項(xiàng)和重點(diǎn)。
圖片
不熟悉的小伙伴,可以在公眾號后臺(tái)回復(fù)“TSC”獲取數(shù)百條精編提示詞.
以上就是一個(gè)通用的Prompt框架,它可以幫助我們快速地搭建一個(gè)基本的Prompt,然后根據(jù)不同的場景和需求進(jìn)行定制和優(yōu)化。下面,我們將介紹一些面向場景的Prompt定制技巧,以及如何用示例強(qiáng)化Prompt的效果。
面向場景的Prompt定制技巧
在上一部分,我們介紹了一個(gè)通用的Prompt框架,可以幫助我們快速構(gòu)建一個(gè)基本的Prompt,讓GPT能夠理解我們的目標(biāo)、限制、技能和流程。但是,這個(gè)框架并不是一成不變的,我們還可以根據(jù)不同的場景和需求,對它進(jìn)行一些定制和優(yōu)化,讓我們的Prompt更加高效和精準(zhǔn)。在這一部分,我們將分享一些面向場景的Prompt定制技巧,希望能夠?yàn)槟闾峁┮恍╈`感和參考。
讓ChatGPT提建議
有時(shí)候,我們可能不太清楚如何寫一個(gè)好的Prompt,或者想要尋找一些新的靈感和創(chuàng)意。這時(shí)候,我們可以利用ChatGPT的強(qiáng)大的自然語言生成能力,讓它為我們提供一些建議和反饋。具體的方法是,使用我們的Prompt框架中,并在該結(jié)構(gòu)塊中寫上一些問題或請求,讓ChatGPT給我們回答或滿足。例如:
圖片
這樣,ChatGPT就會(huì)根據(jù)我們的問題或請求,生成一些有用的建議和示例,幫助我們改進(jìn)和完善我們的Prompt。當(dāng)然,這些建議和示例并不一定都是正確或合適的,我們需要自己判斷和篩選,取其精華,去其糟粕。
固定測試用例
在寫好一個(gè)Prompt后,我們需要對它進(jìn)行測試,看看它的輸出結(jié)果是否符合我們的預(yù)期。為了方便測試和對比,我們建議選擇三到五個(gè)固定的測試輸入用例,每次迭代后都用這些用例來檢驗(yàn)我們的Prompt的效果。這樣,我們就可以更清楚地看到我們的Prompt在不同版本之間的變化和優(yōu)化,避免因?yàn)檩斎氲碾S機(jī)性而導(dǎo)致的誤判或混淆。在我們的Prompt框架中,我們可以增加一個(gè)結(jié)構(gòu)塊:## Test Cases:,并在該結(jié)構(gòu)塊中列出我們選擇的測試輸入用例。例如測試:
## Test Cases:
- 輸入1: 中國人口最多的省份是?
- 輸入2: 中國有哪些濱海的城市?
這樣,我們就可以用這些輸入來測試我們的Prompt,觀察它的輸出結(jié)果是否滿足我們的目標(biāo)、限制、技能和流程。如果不滿足,我們就可以根據(jù)輸出結(jié)果的問題,對我們的Prompt進(jìn)行相應(yīng)的修改和優(yōu)化。
損有余而補(bǔ)不足
在測試和迭代我們的Prompt時(shí),我們需要仔細(xì)觀察我們的Prompt的輸出結(jié)果,分析它的優(yōu)點(diǎn)和缺點(diǎn),找出它的問題和改進(jìn)空間。我們可以用一個(gè)簡單的原則來指導(dǎo)我們的優(yōu)化過程:損有余而補(bǔ)不足。也就是說,我們要減少或消除我們的Prompt輸出結(jié)果中多余或不必要的信息,增加或補(bǔ)充我們的Prompt輸出結(jié)果中缺失或不足的信息。具體的方法是,在我們的Prompt框架中,增加一個(gè)結(jié)構(gòu)塊:## Feedback:,并在該結(jié)構(gòu)塊中寫上我們對我們的Prompt輸出結(jié)果的評價(jià)和反饋,指出它的優(yōu)點(diǎn)和缺點(diǎn),以及需要改進(jìn)的地方。例如:
## Feedback:
- 優(yōu)點(diǎn): 輸出結(jié)果格式清晰,翻譯準(zhǔn)確,提供了日語假名
- 缺點(diǎn): 輸出結(jié)果沒有標(biāo)點(diǎn)符號,沒有換行,沒有區(qū)分英文和日文的輸出
- 改進(jìn): 在 constrains 環(huán)節(jié),增加標(biāo)點(diǎn)符號和換行的要求,在 output 環(huán)節(jié),增加英文和日文的標(biāo)簽
這樣,我們就可以根據(jù)我們的反饋,對我們的Prompt進(jìn)行相應(yīng)的修改和優(yōu)化,使得我們的Prompt輸出結(jié)果更加完善和符合我們的需求。在這個(gè)過程中,我們建議每次只修改一處或少數(shù)幾處,這樣可以更清楚地看到修改的效果,避免一次修改過多而導(dǎo)致的混亂或錯(cuò)誤。
用示例強(qiáng)化Prompt
在寫Prompt時(shí),有一個(gè)非常實(shí)用的技巧就是利用示例,通過提供少數(shù)(1-3個(gè))的輸入->輸出示例,讓GPT可以學(xué)到樣本的共性,從而提升下一個(gè)輸出結(jié)果的質(zhì)量。這種技巧叫做few-shots,指的是訓(xùn)練機(jī)器學(xué)習(xí)模型時(shí)只使用極少量的標(biāo)注樣本。它的目標(biāo)是使機(jī)器學(xué)習(xí)模型在只有少量標(biāo)注樣本的情況下也能達(dá)到良好的性能。
我們可以在通用的Prompt框架的基礎(chǔ)上,增加一個(gè)結(jié)構(gòu)塊:## Examples:,在該結(jié)構(gòu)塊舉1-3個(gè)示例,從而進(jìn)一步提升Prompt帶來的輸出結(jié)果提升。例如,我們想要寫一個(gè)Prompt,讓GPT可以將漢字翻譯成英文和日語,并提供日語假名。我們可以參考以下的Prompt:
圖片
通過提供兩個(gè)示例,我們可以讓GPT更好地理解我們的目標(biāo)和格式,從而提高翻譯的準(zhǔn)確性和一致性。當(dāng)然,示例的數(shù)量和質(zhì)量也會(huì)影響GPT的輸出,所以我們需要選擇有代表性和多樣性的示例,避免過于簡單或復(fù)雜的示例。我們也可以根據(jù)GPT的輸出來調(diào)整示例,以達(dá)到最佳的效果。