
隨著自然語言處理( NLP )技術的快速發展,大型語言模型如 GPT-4 Turbo 和 Claude 3 等已經能夠生成接近人類水平的文本。然而,為了充分發揮這些模型的潛力,我們還需要掌握一項重要的技能—— Prompt Engineering 。簡單來說,Prompt Engineering 就是設計最佳的輸入( Prompt ),以引導語言模型生成我們想要的輸出。一個設計良好的 Prompt 可以顯著提升模型的表現,而糟糕的 Prompt 則可能導致模型生成無關、偏頗或有害的內容。因此,學習如何為 Claude 設計優質的 Prompt,是有效運用這個強大工具不可或缺的一步。
清楚描述任務
為了獲得理想的輸出,我們首先需要清楚且具體地描述我們希望 Claude 執行的任務。Claude 偏好直接、明確且詳盡的指示,這有助於它正確理解我們的需求並給出相應的回應。舉例來說,假設我們想要 Claude 幫忙從一段文本中移除個人識別資訊( Personally Identifiable Information,簡稱 PII ),我們就需要在 Prompt 中明確定義什麼是 PII。
一個清晰的 PII 定義可能是:「 PII 包括但不限於姓名、電話號碼、電子郵件地址、身份證號碼、信用卡號碼、銀行帳戶資訊等任何可以直接或間接識別個人身份的資訊。」有了這個定義,我們就可以給 Claude 一個明確的任務指示,例如:「請從下面的文本中移除所有的個人識別資訊(PII),並用 ‘[REDACTED]’ 替換被移除的內容。」
以下是一個示範如何提供清晰任務描述的 Prompt:
<prompt>
請從下面的文本中移除所有的個人識別資訊(PII),並用 '[REDACTED]' 替換被移除的內容。
PII 的定義:
PII 包括但不限於姓名、電話號碼、電子郵件地址、身份證號碼、信用卡號碼、銀行帳戶資訊等任何可以直接或間接識別個人身份的資訊。
原始文本:
John Doe 是一位 35 歲的軟體工程師,他的電子郵件是 [email protected],電話號碼是 (123) 456-7890。John 的身份證號碼是 A123456789,他有一張 Visa 信用卡,卡號為 4111 1111 1111 1111。John 在 XYZ 銀行開了一個帳戶,帳號是 9876543210。
</prompt>
在這個 Prompt 中,我們首先給出了一個明確的任務指示,接著提供了 PII 的詳細定義,最後是一段包含各種 PII 的原始文本。這樣的 Prompt 結構清晰、資訊完整,能夠幫助 Claude 準確理解我們的需求並生成符合預期的輸出。
使用 XML 標籤區隔不同元素
在設計 Prompt 時,我們可以使用 XML 標籤來區隔不同的元素,如指示、輸入文本、輸出範例等。XML 標籤的格式是 <tag>內容</tag>,其中 “tag” 可以是任何有意義的標識符,如 <instruction>、<input>、<output> 等。Claude 經過了特殊的訓練,能夠識別並處理 XML 標籤中的內容。
讓我們以之前的 PII 移除任務為例,看看如何在 Prompt 中運用 XML 標籤:
<prompt>
<instruction>
請從下面的文本中移除所有的個人識別資訊(PII),並用 '[REDACTED]' 替換被移除的內容。
</instruction>
<definition>
PII 包括但不限於姓名、電話號碼、電子郵件地址、身份證號碼、信用卡號碼、銀行帳戶資訊等任何可以直接或間接識別個人身份的資訊。
</definition>
<input>
John Doe 是一位 35 歲的軟體工程師,他的電子郵件是 [email protected],電話號碼是 (123) 456-7890。John 的身份證號碼是 A123456789,他有一張 Visa 信用卡,卡號為 4111 1111 1111 1111。John 在 XYZ 銀行開了一個帳戶,帳號是 9876543210。
</input>
</prompt>
在這個例子中,我們使用 <instruction>、<definition> 和 <input> 三個標籤分別標記任務指示、PII 定義和輸入文本。這種結構化的 Prompt 可以幫助 Claude 更好地理解任務的各個部分,從而生成更加準確和連貫的輸出。
使用 XML 標籤的另一個好處是,我們可以在 Prompt 中提供輸出範例,並用 <output> 標籤標記。這可以幫助 Claude 學習我們期望的輸出格式和風格。以下是一個包含輸出範例的 PII 移除任務 Prompt:
<prompt>
<instruction>
請從下面的文本中移除所有的個人識別資訊(PII),並用 '[REDACTED]' 替換被移除的內容。
</instruction>
<definition>
PII 包括但不限於姓名、電話號碼、電子郵件地址、身份證號碼、信用卡號碼、銀行帳戶資訊等任何可以直接或間接識別個人身份的資訊。
</definition>
<input>
John Doe 是一位 35 歲的軟體工程師,他的電子郵件是 [email protected],電話號碼是 (123) 456-7890。John 的身份證號碼是 A123456789,他有一張 Visa 信用卡,卡號為 4111 1111 1111 1111。John 在 XYZ 銀行開了一個帳戶,帳號是 9876543210。
</input>
<output>
[REDACTED] 是一位 35 歲的軟體工程師,他的電子郵件是 [REDACTED],電話號碼是 [REDACTED]。[REDACTED] 的身份證號碼是 [REDACTED],他有一張 [REDACTED] 信用卡,卡號為 [REDACTED]。[REDACTED] 在 [REDACTED] 銀行開了一個帳戶,帳號是 [REDACTED]。
</output>
</prompt>
透過提供輸出範例,我們可以明確告訴 Claude 應該如何處理輸入文本中的 PII,以及最終輸出的格式。這種方法可以顯著提高 Claude 生成符合預期輸出的機率,減少反覆修正 Prompt 的需要。
總之,使用 XML 標籤可以幫助我們創建結構清晰、資訊完整的 Prompt,更好地引導 Claude 理解任務並生成高品質的輸出。在設計 Prompt 時,我們可以根據任務的需要,靈活運用不同的標籤和組合方式,以充分發揮 Claude 的潛力。
提供大量範例
在設計 Prompt 時,提供足夠多的高品質範例可以顯著提升 Claude 的學習成效。範例越多,Claude 就能更全面地理解任務的要求和預期輸出的格式。此外,多樣化的範例還可以幫助 Claude 學習處理不同情境下的輸入,提高其泛化能力。
讓我們繼續以 PII 移除任務為例,看看如何在 Prompt 中提供大量範例:
<prompt>
<instruction>
請從下面的文本中移除所有的個人識別資訊(PII),並用 '[REDACTED]' 替換被移除的內容。
</instruction>
<definition>
PII 包括但不限於姓名、電話號碼、電子郵件地址、身份證號碼、信用卡號碼、銀行帳戶資訊等任何可以直接或間接識別個人身份的資訊。
</definition>
<examples>
<example>
<input>
John Doe 是一位 35 歲的軟體工程師,他的電子郵件是 [email protected],電話號碼是 (123) 456-7890。
</input>
<output>
[REDACTED] 是一位 35 歲的軟體工程師,他的電子郵件是 [REDACTED],電話號碼是 [REDACTED]。
</output>
</example>
<example>
<input>
Jane Smith 是一名 28 歲的護士,她的身份證號碼是 B987654321,住在台北市信義區松仁路 100 號。
</input>
<output>
[REDACTED] 是一名 28 歲的護士,她的身份證號碼是 [REDACTED],住在台北市信義區 [REDACTED]。
</output>
</example>
<example>
<input>
Bob Johnson 的信用卡號碼是 5555 6666 7777 8888,CVV 是 123,有效期至 2025 年 12 月。他的 PayPal 帳號是 [email protected]。
</input>
<output>
[REDACTED] 的信用卡號碼是 [REDACTED],CVV 是 [REDACTED],有效期至 [REDACTED]。他的 PayPal 帳號是 [REDACTED]。
</output>
</example>
</examples>
<input>
Michael Brown 是一名 42 歲的銷售經理,他的辦公室電話是 (987) 654-3210,手機號碼是 0912-345-678。Michael 的身份證字號是 A123456789,他有一張美國運通卡,卡號為 3782 822463 10005。
</input>
</prompt>
在這個 Prompt 中,我們使用 <examples> 標籤提供了三組輸入和輸出範例,每組範例都包含不同類型的 PII,如姓名、電子郵件、電話號碼、地址、身份證號碼、信用卡資訊等。這些範例涵蓋了各種常見的 PII 形式,可以幫助 Claude 學習全面識別和處理 PII。
除了數量,範例的品質也非常重要。一個好的範例應該具備以下特質:
- 相關性:範例應該與任務密切相關,體現任務的核心要求。
- 多樣性:範例應該涵蓋各種可能的情境和變化,幫助 Claude 學習泛化。
- 清晰性:範例中的輸入和輸出應該格式清晰、易於理解,避免歧義。
- 一致性:所有範例應該遵循一致的格式和風格,體現同樣的任務要求。
透過提供大量高品質的範例,我們可以幫助 Claude 更快、更準確地學習任務,並生成符合預期的輸出。在實踐中,我們可以根據任務的複雜度和重要性,調整提供範例的數量和種類,以達到最佳的學習效果。
善用長文本脈絡
Claude 是一個強大的語言模型,它能夠處理長達 10,000 個 tokens 的文本,大約是 6000-7000 個英文單詞或 3000-5000 個中文字符,但具體的 token上限可能會隨著模型的更新而有所變化。這意味著我們可以在 Prompt 中提供大量的背景資訊和上下文,幫助 Claude 更全面地理解任務和輸入。這個長度已經足以應付大部分的寫作和對話任務。不過對於特別長的文章、書籍等,可能仍需要切分成多個部分來處理。
讓我們考慮一個需要對長文本進行摘要的任務。與其直接把長文本餵給 Claude,不如先在 Prompt 中提供一些背景資訊,說明文本的主題、目的和目標受眾,以幫助 Claude 更好地理解文本的重點和生成合適的摘要。以下是一個利用長文本脈絡的摘要任務 Prompt:
<prompt>
<background>
以下是一篇關於全球暖化對珊瑚礁影響的科普文章。這篇文章旨在向大眾介紹全球暖化如何導致珊瑚白化和死亡,以及這對海洋生態系統和人類社會的影響。文章的目標受眾是對環境問題感興趣,但沒有太多科學背景的普通讀者。
</background>
<instruction>
請為以下文章生成一個 100 字左右的中文摘要,突出全球暖化對珊瑚礁的影響,以及這種影響對海洋生態系統和人類社會的潛在後果。摘要應該以通俗易懂的語言寫成,避免使用過於專業的術語。
</instruction>
<article>
珊瑚礁是地球上最多樣化的生態系統之一,為海洋中 25% 的物種提供了棲息地。然而,由於氣候變遷導致海水溫度上升,全球的珊瑚礁正面臨著前所未有的威脅。
當海水溫度升高時,珊瑚會驅逐體內共生的藻類,導致珊瑚白化。如果高溫持續太久,珊瑚就會因缺乏藻類提供的營養而死亡。過去 30 年裏,全球已經損失了 50% 的珊瑚礁,預計到 2050 年,即使在樂觀的低排放情境下,也將有 90% 的珊瑚礁面臨風險。
珊瑚礁的消失不僅會導致海洋生物多樣性的喪失,也會對依賴珊瑚礁的沿海社區造成嚴重影響。珊瑚礁每年為全球經濟貢獻超過 3000 億美元,提供食物、旅遊收入和沿海保護等服務。如果不採取行動遏制全球暖化,我們將失去這些寶貴的生態系統及其提供的諸多惠益。
為了保護珊瑚礁,我們必須採取緊急措施減少溫室氣體排放,將全球變暖控制在 1.5°C 以內。同時,我們也需要加強對已受損珊瑚礁的保護和修復工作,提高其應對氣候變遷的復原力。只有通過全球協調行動,我們才能為後代保留這些海洋瑰寶。
</article>
</prompt>
在這個 Prompt 中,我們首先提供了一段背景資訊,說明文章的主題、目的和目標受眾,為 Claude 理解文章內容提供了重要的脈絡。接著,我們給出明確的摘要指示,說明摘要的重點、長度要求和語言風格。最後,我們把完整的文章內容提供給 Claude,讓它在充分理解上下文的基礎上生成摘要。
這種方式利用了 Claude 處理長文本的能力,通過在 Prompt 中提供詳盡的背景脈絡,幫助 Claude 更準確地把握文章的核心內容,生成切題、清晰、易懂的摘要。在實踐中,我們可以根據任務的需要,靈活調整 Prompt 中背景脈絡的詳細程度和長度,以幫助 Claude 充分理解輸入並生成高品質的輸出。
給予 Claude 思考的時間
研究表明,給予語言模型一些 “思考” 的時間,讓它在輸出最終答案之前先分析問題並擬定解決方案,可以顯著提高輸出的品質。在 Claude 中,我們可以使用思考標籤 <think> 和 </think> 來實現這一點。
以下是一個使用思考標籤的問題回答 Prompt:
<prompt>
<question>
如何在人工智慧研究中處理偏見和公平問題?請從技術和倫理兩個角度討論。
</question>
<think>
讓我先從技術角度分析:
1. 資料偏見:訓練資料中的偏見可能導致模型產生不公平的輸出,需要仔細審查和處理資料集。
2. 演算法偏見:某些機器學習演算法可能放大資料中的偏見,需要採用更加公平的演算法設計。
3. 模型評估:需要使用公平性指標來評估模型的表現,如不同群體的準確率和錯誤率是否一致。
4. 可解釋性:可解釋的AI有助於識別模型中的偏見,並進行針對性的改進。
從倫理角度來看:
1. 價值觀:AI系統應體現人類的價值觀,如平等、非歧視和包容性。
2. 透明度:AI系統的開發和使用應透明公開,接受公眾監督。
3. 問責制:應明確AI系統的責任歸屬,確保出現問題時能夠追究責任。
4. 人權:AI系統不應侵犯個人隱私、自由和尊嚴等基本人權。
5. 社會影響:需要評估AI系統對不同群體和社會整體的影響,確保其公平性和正當性。
綜合來看,處理AI偏見和公平問題需要在技術和倫理兩個層面共同發力。在技術層面,我們需要優化資料處理、演算法設計、模型評估和可解釋性,最大限度地消除偏見;在倫理層面,我們要恪守人類的核心價值觀,提高AI系統的透明度和問責性,並充分評估其對社會的影響。只有技術和倫理協同發展,才能真正實現公平、負責、可信的AI。
</think>
<answer>
人工智慧研究中的偏見和公平問題需要從技術和倫理兩個角度綜合應對。
在技術層面,我們需要:
1. 仔細審查訓練資料,識別和消除其中的偏見;
2. 採用更加公平的機器學習演算法,避免放大資料中的偏見;
3. 使用公平性指標來評估模型的表現,確保其對不同群體一視同仁;
4. 提高AI系統的可解釋性,便於發現和糾正模型中的偏見。
在倫理層面,我們應該:
1. 將平等、非歧視、包容等人類核心價值觀融入AI系統的設計和應用中;
2. 提高AI系統開發和使用的透明度,接受來自公眾和專家的監督;
3. 明確AI系統的責任歸屬,確保問題發生時能夠追究相關方的責任;
4. 尊重並保護個人隱私、自由、尊嚴等基本人權,杜絕AI系統對其的侵犯;
5. 全面評估AI系統對不同群體和社會整體的影響,確保其公平性和正當性。
只有在技術和倫理兩個層面协同发力,我們才能真正實現公平、負責、可信的AI。這需要來自學界、業界、政府和公眾的共同努力,以建設一個更加包容、平等、繁榮的智慧社會。
</answer>
</prompt>
在這個 Prompt 中,我們首先給出了一個複雜的問題,涉及 AI 偏見和公平的技術和倫理層面。接著,我們使用 <think> 標籤讓 Claude 先分析問題,提出解決方案。在 <think> 標籤內,Claude 分別從技術和倫理兩個角度列出了一系列關鍵点,為最終的答案提供了扎實的思考基礎。
最後,在 <answer> 標籤內,Claude 總結了之前的思考,提煉出技術和倫理兩個層面需要採取的關鍵舉措,並強調了兩者協同發展的重要性。同時,Claude 還呼籲學界、業界、政府和公眾共同努力,以期建設一個更加公平和包容的智慧社會。
可以看到,使用思考標籤讓 Claude 有機會在輸出最終答案前 “思考” 問題,有助於其生成更加全面、深入、有邏輯的回答。這種方法特別適用於那些需要多角度分析、論證的開放性問題。我們可以根據問題的復雜程度,調整思考標籤中的內容和長度,以幫助 Claude 充分理解問題,並輸出高品質的答案。
結語
Prompt engineering 是與 Claude 等大型語言模型進行有效互動的關鍵。通過設計優質的 Prompt,我們可以顯著提升 Claude 的表現,充分發揮其在自然語言處理任務中的潛力。
本文介紹了五種提高 Prompt 品質的方法:
- 清楚描述任務,提供明確、具體的指示
- 使用 XML 標籤區隔 Prompt 的不同部分,創建結構化的輸入
- 提供大量高品質、多樣化的範例,幫助 Claude 學習任務
- 善用 Claude 處理長文本的能力,在 Prompt 中提供豐富的背景脈絡
- 使用思考標籤給予 Claude “思考” 的時間,讓其輸出更加深入、全面的答案
這些方法可以靈活組合,適用於各種不同類型的任務,如文本分類、摘要、問答、創意寫作等。隨著 Claude 等語言模型的不斷發展,Prompt engineering 也在不斷演進。我們需要持續學習和創新,探索更多設計 Prompt 的技巧和最佳實踐。
除了本文介紹的方法,還可以參考 Anthropic 的官方文件和社區資源,學習更多與 Claude 互動的技巧。希望以上的分享能夠對讀者熟練運用 Claude Prompt 有所幫助。