提示詞工程 (Prompt Engineering) 基礎

2025年1月7日

ChatGPT 教學專書
不僅教你 ChatGPT 指令,更帶你實作出創新應用!前往了解

談到開發生成式 AI 產品,相信多數人前幾個會想到的名詞中,多半會有提示詞工程 (prompt engineering)。所謂的提示詞 (prompt) 如其名,代表著對 AI 模型的一種提示,讓人能藉由提示來把模型最好的回應引出來。

給定同樣的大型語言模型,高品質的提示詞與一般的提示詞,會有很不同的效果。對此,在這篇文章中,我們會來探討可以如何透過提示詞工程,協助開發出更好的生成式 AI 產品。

提示詞也能是工程嗎?

在往下深談提示詞工程前,相信有些讀者會有「提示詞也能被當做工程嗎」的疑問。畢竟很多人對提示詞的使用印象,就是按照一些常見的原則,然後下完提示詞後得到來自 AI 模型的回答,這樣為什麼會被稱為工程呢?

之所以提示詞工程能加上工程這兩個字,甚至許多公司會願意花大錢找提示詞工程師 (例如最有名的 Anthropic 提示詞工程師的年薪超過千萬台幣),是因為如同工程師在解決問題時,需要有系統且有方法,提示詞工程師也會透過工具,以及試誤 (trial and error) 與迭代 (iteration),從過程中去找出最理想的提示詞。

以 Anthropic 的提示詞工程師職缺描述來看,可以看到其中一項要求是交付、測試,與紀錄最佳實踐 (Discover, test, and document best practices)。從抽象的角度來看,這與其他工程師在做的事情是很相似的。都是需要先針對需求深入理解,然後提出相對應的解決方案,最後從解決問題中創造價值,並且記錄下最佳實踐。

企業級提示詞 (enterprise prompting) 的不同之處

進一步說,企業之所以願意花錢聘請專門的提示詞工程師,是因為企業級應用所需要的提示詞,與一般使用者平常在用 ChatGPT 或 Claude 這類應用有所不同。假如是一般的 AI 聊天機器人使用者,多半可以在使用時,自行調整提示詞。換句話說,假如今天某個輸出的格式不符合預期,可以直接換成另一個提示詞,然後再試一次。

但是企業級應用,或者說假如今天是要打造一個放上線的產品,就沒辦法這樣。舉例來說,目前市場上有許多 AI 履歷修改工具,讓使用者可以簡單上傳自己的履歷後,得到 AI 的回饋;然而,這時如果解析完履歷後給的回饋品質不好,使用者因為只能上傳履歷,不能像用 ChatGPT 一樣自己進一步調整,因此當收到品質不好的成果,使用者只會覺得這個產品沒幫助,然後就流失掉。

又或者現在有些 AI 履歷修改工具,不僅會給回饋,還能做到直接幫忙輸出一個新的版本的履歷。想要這樣做,可能需要 AI 在修改完後回傳某個特定格式 (例如 JSON 格式),然後再由伺服器根據該格式,套到某個履歷模板後輸出。在這種情況下,假如 AI 模型沒有按照預期的格式輸出,可能會導致伺服器無法處理,導致無法輸出修改後的履歷,那也會讓使用者覺得產品不好,然後就流失掉。

對比起一般使用者,在用 AI 聊天機器人時,如果沒按照預期輸出,可能罵一聲後換個提示詞,然後繼續用;企業級的應用不能這樣,所以企業級的提示詞需要試到非常穩定,各種輸入都能處理才行,這也是提示詞工程師的價值所在。

更進一步說來說,隨著模型的演進、產品的演進,提示詞也需要與時俱進,這需要有專門的人來做 (如果是由軟體工程師來做,那工程師本身也需要不斷精進相關知識),因此對企業來說,專門的提示詞工程師有其存在之必要。

如何為 AI 產品下好提示詞?

在了解完企業級產品的提示詞,與一般自己在使用 AI 助手的區別後,接著我們來談在打造 AI 產品時,可以如何下好提示詞。

透過系統訊息設定角色

假如過去你已經有在使用 ChatGPT 或 Claude 這類 AI 助手,相信在讀提示詞相關的內容,可能有讀過可以透過設定角色,來讓 AI 模型的回應更加貼近某個角色的回答。舉例來說,同樣是做資料分析,從商業分析師的角度來分析,會跟產品經理的分析角度有所區別,所以預先設定好角色,會讓模型的回答更貼近預期。

不過從開發產品的角度看,應該要盡可能做到,讓使用者不用做這件事。換句話說,產品本身就要把這件事情給做掉。舉例來說,假如現在使用 Cursor 或 Windsurf 等 AI 驅動的 IDE,在與 AI 對話時,不需用前面加上「請扮演一個資深軟體工程師」這種角色設定,因為 Cursor 或 Windsurf 已經把這件事做掉。

不過,具體要怎麼做呢? 可以透過系統訊息 (system message) 來做到。目前主流的模型,例如 ChatGPT、Claude 以及 Gemini 都有支援這個設定。

舉例來說,在 Claude 的文件當中有以下的範例

client.messages.create(
    model="claude-3-5-sonnet-20241022",
    max_tokens=2048,
    system="You are a seasoned data scientist at a Fortune 500 company.", # <-- role prompt
    messages=[
        {"role": "user", "content": "Analyze this dataset for anomalies: <dataset>{{DATASET}}</dataset>"}
    ]
)

可以在這個範例看到,在系統訊息 (system) 當中,傳入了 You are a seasoned data scientist at a Fortune 500 company,就先讓模型進入財星五百大資料科學家的角色。這會讓後面的回答角度,更往這個方向走。

清晰明確

除了設定角色外,清晰也是提示詞能否達到預期效果的關鍵之一。甚至目前社群多數提示詞工程師,普遍認為清晰是最重要的關鍵。先前 Anthropic 的提示詞工程師就有在一場對談講到,比起讓模型進入某個角色,在他的經驗當中,能否給足夠清晰的提示,更常是影響回覆品質的關鍵。

要做到清晰,首先得知道目標是什麼,然後具體的描述出來。

除此之外,對於預期的輸出結果,需要足夠明確。舉例來說,假如希望模型「簡短回答」,可以在提示詞中加上「請簡短回答」;然而,簡短回答是多短? 同樣的回覆,有些人可能覺得太長,同時可能有另一些人覺得太短,因此只用「簡短」這個詞,可能也會不夠明確,這時可以做的是給一個具體的數字。

當然,對於某些應用,具體的回覆數字該在什麼範圍,可能不是那麼重要;但對於另一些應用來說,可能會相對重要。舉例來說,假如要做 AI 履歷產生器,為了確保履歷的每個列點數字不會過長,精確要求 AI 的輸出就會相對重要一些。在這種情境下,就不要只是說簡短,而是要直接給數字,例如「每個列點使用少於 105 個字元」。

前史丹佛大學教授,同時為 DeepLearning.AI 的創辦人吳恩達,先前就分享在 AI 時代的產品開發,核心關鍵是不能夠模糊 (vague)。他提到假如要 AI 模型協助打造一個「可以回答跟使用者帳號資訊相關問題的聊天機器人」這樣的描述就很模糊。當模糊、能夠詮釋的空間變大,就可能導致 AI 模型產出看似不錯,但實際完全不符合預期的成果。

讀到這邊你可能會問「如何判斷自己寫的提示詞夠不夠清晰明確?」,一個簡單的做法,是當你寫下提示詞後,把提示詞給一個對該領域不太熟的人看 (例如別的部門的人),然後問對方假如要根據該提示詞去完成任務,能不能做到? 如果沒辦法的話,是有哪些是不夠清楚的? 透過這個做法,可以去補上那些可能你本來覺得很清楚,但其實仍有許多模糊不清的描述。

閱讀更多

如果你對「提示詞工程」這主題感興趣,我們在 E+ 有更深入的討論。有興趣的讀者,歡迎加入  E+ 成長計畫。我們在 E+ 有更深入的內容,談到更多能下好提示詞的原則與方法,例如如何讓模型思考 (CoT)、如何有效迭代提示詞 (iteration) 等。

本文為 E+ 成長計畫的深度內容,截取段落開放免費閱讀。歡迎加入 E+ 成長計畫閱讀完整版本 (點此了解 E+ 的詳細介紹)。

🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們