提示工程在實際應用中扮演著關鍵角色,尤其在需要將AI模型整合到生產環境時。簡單的提示可能不足以應付複雜的任務,而最佳化過的提示則能確保AI模型的輸出符合預期,並提升整體效率。良好的提示工程需要考慮多個導向,例如明確指示AI模型的任務目標、規範輸出格式、提供參考範例、建立評估標準,以及將複雜任務分解成更小的子任務。這些步驟有助於減少錯誤、降低成本,並確保AI模型的輸出更具一致性和可靠性。

最佳化提示工程的五大原則:從天真提示到專業級提示的轉變

在與AI互動時,一個簡單的提示(prompt)往往能產生令人驚豔的結果。這種現象讓人感覺像是「魔法」,因為我們幾乎沒有花費太多努力就達到了預期的效果。隨著最先進的AI模型不斷改進,我們在首次嘗試中獲得良好結果的可能性越來越高。對於一次性或臨時的AI互動任務,簡單直接的提示方法或許足夠應付。

然而,當我們計劃將這樣的提示應用於實際生產環境時,就需要投入更多的工作來確保其效果。錯誤不僅會因OpenAI根據提示和回應的長度收費而增加成本,還會浪費我們在修正錯誤上的時間。假設我們正在開發一個產品名稱生成器,並期望它能夠服務數千名使用者,那麼就必須解決以下幾個明顯的問題:

方向不明確

  • 目前的提示沒有向AI說明所需的名稱風格或應具備的屬性。
  • 我們需要明確是否需要單個詞語還是多個詞語的組合,是否允許創造新詞,以及是否需要模仿某位以出色產品命名聞名的名人。

輸出格式不統一

  • 目前的回應是未經格式化的名稱列表,行數不固定。
  • 多次執行該提示時,回應格式可能不一致,有時會出現編號列表,有時在列表前附加額外的文字,這使得程式難以解析。

缺乏範例參考

  • 目前的提示沒有提供任何好的名稱範例。
  • AI完全根據其訓練資料(即整個網際網路內容,包含所有偏差)進行自動補全,這可能與我們的期望不符。理想的做法是提供成功案例、行業內常見名稱,或是我們喜歡的其他名稱作為範例。

評估標準有限

  • 目前沒有一致且可擴充套件的方法來定義哪些名稱是好的或壞的,因此需要手動審查每個回應。
  • 如果能夠建立評分系統或其他形式的評估標準,就可以最佳化提示以獲得更好的結果,並識別失敗的情況。

任務劃分不明確

  • 目前的提示將產品命名任務一次性外包給AI,沒有進行任務細分或專業化,也無法觀察AI如何處理這些任務。

最佳化提示的五大原則

為瞭解決上述問題,本章將介紹最佳化提示的五大原則,並透過例項進行詳細解析。這些原則貫穿全書,幫助讀者理解如何在實踐中應用它們。

LLMs(大語言模型)透過不斷預測下一個詞元(token,大約是單詞的四分之三)來生成文字,從提示內容開始。每個新詞元的選擇根據其在上下文中的出現機率,並帶有一定的隨機性(由溫度引數控制)。如圖1-1所示,不同的詞元在給定上下文中的機率不同,例如在「AnyFit」後面,「Athletic」比「shoes」更有可能出現。

LLMs在網際網路文字資料上進行訓練,並進一步微調以提供有用的回應。普通的提示通常只能得到普通的回應,因此有些人可能會對結果感到失望。提示的內容會改變每個生成詞元的機率,因此對結果有著重要影響。這些模型見過人類創造的最好和最壞的內容,只要知道正確的詢問方式,就幾乎可以模仿任何東西。OpenAI根據提示和回應中的詞元數量收費,因此提示工程師需要透過最佳化提示來提高成本效益、品質和可靠性。

應用提示工程技術的最佳實踐

以下是應用多種提示工程技術的範例:

  • 請求以Steve Jobs的風格生成產品名稱。
  • 指定回應格式為逗號分隔的列表。
  • 提供任務完成的良好範例。

輸入:

為一款適用於任何腳型的鞋子生成產品名稱列表,風格仿照Steve Jobs。 以逗號分隔的列表傳回結果,格式如下: 產品描述:一款適用於任何腳型的鞋子 產品名稱:[3個產品名稱的列表]

範例

產品描述:一台能倒啤酒的冰箱 產品名稱:iBarFridge, iFridgeBeer, iDrinkBeerFridge 產品描述:一款能在太空中準確顯示時間的手錶 產品名稱:iNaut, iSpace, iTime 產品描述:家庭奶昔製造機 產品名稱:iShake, iSmoothie, iShake Mini

輸出:

產品描述:一款適用於任何腳型的鞋子 產品名稱:iFitFoot, iPerfectFit, iShoeSize

儘管沒有完美的提示,但經過最佳化的提示能夠可靠地提供符合要求的結果。使用者可以選擇不同的風格(如仿照其他名人),並根據需要更改回應格式。該提示的輸出還可以作為其他任務的輸入。最後,根據使用者反饋定期更新範例,可以使系統隨著時間的推移變得更加智慧。

五大原則概述

最佳化提示的過程遵循五大原則,這些原則將在本章的其餘部分透過範例進行詳細解析,並在全書中被反覆提及。它們與前面討論的天真提示的五個問題一一對應。在本文的其餘部分,您將看到對這些原則的參照,以幫助您瞭解如何在實踐中應用它們。

1. 清晰的方向指引

必須清晰地向AI說明任務的要求和期望的結果風格。

2. 格式化的輸出

需要明確指定所需的輸出格式,以確保回應的一致性和可解析性。

3. 提供範例參考

透過提供範例,可以幫助AI更好地理解任務的要求和期望的結果風格。

4. 建立評估標準

制定一致且可擴充套件的評估標準,以評估回應的品質,並根據需要最佳化提示。

5. 任務劃分與專業化

將複雜任務劃分為更小、更專業的子任務,以提高AI處理任務的效率和效果。

這些原則將指導我們如何設計和最佳化提示,以獲得更高品質和更可靠的結果。

程式碼例項:提示最佳化

def generate_product_names(description, style, examples):
    # 根據提供的描述、風格和範例生成產品名稱
    prompt = f"Brainstorm a list of product names for {description} in the style of {style}. "
    prompt += "Return the results as a comma-separated list, in this format: "
    prompt += f"Product description: {description}\nProduct names: [list of 3 product names]\n\n"
    prompt += "## Examples\n"
    for example in examples:
        prompt += f"Product description: {example['description']}\n"
        prompt += f"Product names: {', '.join(example['names'])}\n"
    
    # 呼叫AI模型生成產品名稱
    response = call_ai_model(prompt)
    return parse_response(response)

# 範例資料
examples = [
    {"description": "A refrigerator that dispenses beer", "names": ["iBarFridge", "iFridgeBeer", "iDrinkBeerFridge"]},
    {"description": "A watch that can tell accurate time in space", "names": ["iNaut", "iSpace", "iTime"]},
    {"description": "A home milkshake maker", "names": ["iShake", "iSmoothie", "iShake Mini"]}
]

description = "A shoe that fits any foot size"
style = "Steve Jobs"
product_names = generate_product_names(description, style, examples)
print(product_names)

內容解密:

此程式碼定義了一個函式generate_product_names,用於根據給定的產品描述、風格和範例生成產品名稱列表。它構建了一個提示字串,包括任務描述、要求的輸出格式以及提供的範例。然後,它呼叫AI模型並解析回應以提取產品名稱。

  1. 提示構建:函式首先根據輸入引數構建提示字串。它指定了任務、所需的輸出格式,並提供了範例以引導AI。

  2. 範例整合:範例資料被整合到提示中,以幫助AI理解期望的名稱風格和格式。

  3. 呼叫AI模型call_ai_model(prompt)函式負責將構建好的提示傳送給AI模型,並取得回應。

  4. 回應解析parse_response(response)函式用於解析AI模型的回應,提取出產品名稱列表。

  5. 輸出結果:最終,生成的產品名稱被列印出來。

透過這種方法,我們可以根據特定的需求和風格生成產品名稱,並且可以根據使用者的反饋不斷最佳化和更新範例,以提高生成結果的品質。

圖表翻譯:

  graph LR
    A[開始] --> B[構建提示]
    B --> C[呼叫AI模型]
    C --> D[解析回應]
    D --> E[輸出結果]

圖表翻譯:

此流程圖展示了使用AI生成產品名稱的主要步驟。從構建提示開始,到呼叫AI模型、解析回應,最終輸出生成的產品名稱。這個過程清晰地闡述瞭如何利用AI技術來高效地完成產品命名的任務。

五大提示原則在生成式人工智慧中的應用

隨著生成式人工智慧(Generative AI)技術的快速發展,如何有效地引導這些模型生成符合預期結果的內容,成為了一個重要的研究課題。本文將探討五大提示原則(Five Principles of Prompting),並結合具體案例,闡述如何在實際應用中有效地運用這些原則。

1. 給予方向(Give Direction)

在與生成式人工智慧互動的過程中,提供明確的方向是至關重要的。這不僅幫助模型理解任務的要求,也能顯著提高生成內容的品質。以下是一個具體的例子:

例子:為一款鞋子產品命名

假設我們需要為一款能夠適應任何腳型的鞋子命名。如果僅僅給出簡單的提示,如「為一款鞋子命名」,模型的輸出可能無法滿足預期。然而,如果我們給出更具體的方向,例如模仿特定人物的風格,模型的輸出將會更加符合預期。

輸入:

以 Elon Musk 的風格,為一款能夠適應任何腳型的鞋子生成產品名稱列表。結果以逗號分隔的列表傳回,格式如下:
產品描述:一款能夠適應任何腳型的鞋子
產品名稱:[3個產品名稱列表]

## 例子
產品描述:一款能夠自動調節溫度的冰箱
產品名稱:Teslacool, FridgeX, Neuradrink
產品描述:一款能夠在太空中準確顯示時間的手錶
產品名稱:WatchX, iSpace, The Watch Company
產品描述:一款家用奶昔機
產品名稱:ShakeX, The Milkshake Company, HyperShake

輸出:

產品描述:一款能夠適應任何腳型的鞋子
產品名稱:ShoeX, MarsFit, The Shoe Company

在這個例子中,透過給予模型明確的方向(模仿 Elon Musk 的風格),並提供相關的示例,模型的輸出結果更加符合預期。

2. 描述風格(Describe the Desired Style)

描述所需的風格是另一個重要的原則。這不僅適用於文字生成,也適用於影像生成。例如,在使用 Midjourney 生成影像時,提供詳細的風格描述可以顯著提高生成影像的品質。

例子:生成商業會議的庫存照片

假設我們需要生成一張商業會議的庫存照片。如果僅僅給出簡單的提示,如「人們在開會」,生成的影像可能無法滿足預期。然而,如果我們提供更詳細的描述,例如「四個人圍坐在玻璃桌旁的白色 MacBook 周圍,背景是 Panasonic DC-GH5 相機拍攝的風格」,生成的影像將更加符合預期。

輸入:

https://s.mj.run/TKAsyhNiKmc 一張庫存照片,四個人圍坐在玻璃桌旁的白色 MacBook 周圍,背景是 Panasonic DC-GH5 相機拍攝的風格

輸出: 一張高品質的商業會議庫存照片,四個人圍坐在玻璃桌旁的白色 MacBook 周圍,背景是 Panasonic DC-GH5 相機拍攝的風格。

3. 指定格式(Specify Format)

在生成內容時,指定格式是至關重要的。無論是文字還是影像,明確的格式要求可以幫助模型更好地理解任務需求。

例子:生成產品名稱列表

在前面的例子中,我們要求模型生成一個產品名稱列表,並指定了逗號分隔的格式。這種明確的格式要求幫助模型生成符合預期的輸出。

4. 提供範例(Provide Examples)

提供範例是引導模型生成高品質內容的有效方法。透過提供相關的範例,模型可以更好地理解任務的要求和預期的輸出格式。

例子:生成產品名稱

在產品命名的例子中,我們提供了多個相關的範例,幫助模型理解所需的命名風格和格式。

5. 評估品質(Evaluate Quality)

評估生成內容的品質是確保輸出結果符合預期的關鍵步驟。這包括檢查生成的文字或影像是否符合指定的要求,是否具有足夠的創意和相關性。

例子:評估生成的產品名稱

在產品命名的例子中,我們可以評估生成的名稱是否符合 Elon Musk 的風格,是否具有創意和市場潛力。

隨著生成式人工智慧技術的快速發展,未來我們可以期待看到更多創新的應用和改進。例如,透過結合更多的上下文資訊和使用者反饋,模型可以生成更加個人化和精確的內容。此外,隨著多模態模型的興起,如何有效地引導這些模型生成高品質的多模態內容,將成為一個重要的研究方向。

產品命名:根據專家建議的五大原則

在產品命名過程中,名稱的選擇對於產品的市場表現和品牌形象至關重要。一個好的產品名稱不僅能夠吸引消費者的注意,還能夠有效地傳達產品的特性和價值。本文將根據行業專家的建議,詳細闡述產品命名的五大原則,並提供具體的實施建議和範例。

簡潔性與易記性(Simplicity & Memorability)

產品名稱的首要條件是簡潔易記。一個簡短、易於拼寫且容易記憶的名稱能夠幫助消費者在短時間內記住並識別產品。例如,蘋果公司的「iPhone」就是一個成功的範例。為了達到這一目標,企業在命名時應避免使用過於複雜或生僻的字詞。

程式碼範例:產品名稱簡潔性檢查

def check_name_simplicity(name):
    # 檢查名稱長度
    if len(name) > 10:
        return False
    # 檢查名稱是否包含特殊字元
    if not name.isalnum():
        return False
    return True

# 測試範例
name = "FitAll"
print(check_name_simplicity(name))  # 輸出:True

內容解密:

  1. 這個函式 check_name_simplicity 用於檢查產品名稱是否符合簡潔性要求。
  2. 首先檢查名稱的長度是否超過10個字元,如果超過則傳回 False
  3. 然後檢查名稱是否包含非字母數字字元,如果包含則傳回 False
  4. 如果名稱透過以上兩項檢查,則傳回 True,表示名稱符合簡潔性要求。

相關性與描述性(Relevance & Descriptiveness)

產品名稱應該能夠反映產品的特徵或功能,這有助於消費者快速理解產品的用途。例如,「FitAll Walkers」這個名稱直接傳達了產品的「萬能適用」特性。企業在命名時應確保名稱與產品特性之間存在明確的關聯。

產品名稱與特性關係圖

  graph LR
    A[產品名稱] --> B[簡潔易記]
    A --> C[相關描述]
    B --> D[易於傳播]
    C --> E[明確產品特性]
    D --> F[提升品牌認知]
    E --> F

圖表翻譯: 此圖示展示了產品名稱與其特性的關係。一個好的產品名稱應該同時具備簡潔易記和相關描述性,這兩者有助於提升品牌認知度並明確產品的特性。

獨特性與創意性(Differentiation & Uniqueness)

在競爭激烈的市場中,產品名稱的獨特性至關重要。一個具有創意且獨特的名稱能夠幫助產品在眾多競爭對手中脫穎而出。例如,「OmniSize Sneakers」透過使用「OmniSize」這個獨特的字詞,成功吸引了消費者的注意力。

程式碼範例:產品名稱獨特性檢查

def check_name_uniqueness(name, existing_names):
    # 檢查名稱是否與現有名稱重複
    if name in existing_names:
        return False
    return True

# 測試範例
existing_names = ["FitAll", "OmniSize"]
name = "AdaptStride"
print(check_name_uniqueness(name, existing_names))  # 輸出:True

內容解密:

  1. 這個函式 check_name_uniqueness 用於檢查產品名稱是否具有獨特性。
  2. 透過將新名稱與現有名稱列表進行比對,檢查是否存在重複。
  3. 如果名稱未在現有名稱列表中出現,則傳回 True,表示名稱具有獨特性。

適應性與擴充套件性(Adaptable & Scalable)

產品名稱應該具備足夠的適應性和擴充套件性,以應對未來可能的市場變化或產品線擴充套件。例如,「FlexFit Footwear」這個名稱不僅適用於當前產品,還能夠隨著產品線的擴充套件而保持一致性。

產品名稱適應性示意圖

  graph TD
    A[產品名稱] --> B[適應性]
    A --> C[擴充套件性]
    B --> D[市場變化]
    C --> E[產品線擴充套件]
    D --> F[保持品牌一致性]
    E --> F

圖表翻譯: 此圖示展示了產品名稱的適應性和擴充套件性對於品牌發展的重要性。一個具備良好適應性和擴充套件性的名稱能夠幫助品牌在面對市場變化和產品線擴充套件時保持一致性。

積極聯想(Positive Connotations)

產品名稱應該引發積極的情感聯想或正面形象,這有助於提升產品的吸引力。例如,「TrueFit Universals」這個名稱傳達了「真實舒適,適用所有人」的正面形象。企業在命名時應避免可能引發負面聯想的名稱。

程式碼範例:產品名稱情感分析

from textblob import TextBlob

def analyze_name_sentiment(name):
    # 使用TextBlob進行情感分析
    blob = TextBlob(name)
    return blob.sentiment.polarity

# 測試範例
name = "TrueFit Universals"
sentiment = analyze_name_sentiment(name)
print(sentiment)  # 輸出情感分析結果

內容解密:

  1. 這個函式 analyze_name_sentiment 使用 TextBlob 進行產品名稱的情感分析。
  2. 透過計算名稱的情感極性(polarity),判斷名稱是否引發積極或負面聯想。
  3. 情感極性值範圍為 -1 到 1,其中正值表示積極聯想,負值表示負面聯想。

產品命名範例:適用於所有尺碼的鞋類別產品

根據上述五大原則,以下是一些適用於所有尺碼的鞋類別產品的命名範例:

  1. FitAll Walkers - 簡單易記且直接傳達產品的萬能適用特性。
  2. OmniSize Sneakers - 獨特且具有描述性,強調產品的適用範圍。
  3. AdaptStride Shoes - 具有創意且傳達了產品的適應性。
  4. FlexFit Footwear - 具備良好的適應性和擴充套件性。
  5. TrueFit Universals - 引發積極聯想,強調真實舒適且適用所有人。

在最終確定產品名稱之前,企業應進行商標檢查,以確保所選名稱未侵犯現有商標。同時,建議進行市場測試或焦點小組討論,以收集消費者對名稱的反饋。

隨著市場環境的變化和消費者需求的演變,產品命名策略也需要不斷調整和最佳化。未來,企業可以考慮結合人工智慧技術進行更精準的命名分析和市場預測,以進一步提升產品命名的有效性和創意性。同時,持續進行市場調查和消費者反饋收集,將有助於企業不斷最佳化其產品命名策略,從而在競爭中保持領先地位。