iT邦幫忙

2023 iThome 鐵人賽

DAY 7
1

在上一篇文章中,我們詳細探討了OpenAI的Chat Completion的基礎使用方法,並解釋了在使用過程中需考慮的幾個關鍵參數。本篇將進一步為大家介紹如何設計複雜問題的提示結構。

本文同時提供了Colab實驗室的連接,讓有興趣的讀者可以親自嘗試實驗以更深入地理解這些概念:Colab連接點這裡。希望你們會發現這些資訊有用,並在實際操作中得到實用的體會跟驗證。

提示指令(Prompt)

https://ithelp.ithome.com.tw/upload/images/20230911/20154415siTAkTZnF8.png

當你希望利用Chat Completion來完成特定任務時,一個直觀的做法就是把它視為一個對話窗口,在傳入的訊息結構內自然的輸入你的問題或指令。以下是一個簡單的提示指令範例,該範例展示如何請求推薦三個與旅遊相關的詞彙。

#這裏是使用者的訊息
user_message = f"""推薦給我三個旅遊相關的詞彙~"""

messages =  [
    {
        'role':'user',
        'content': f"{user_message}"
    }
]

# 呼叫 ChatCompletion
response = get_completion_from_messages(messages, verbose=False)
print(response)

您將會得到如下的輸出:

1. 風景名勝 (fēng jǐng míng shèng) - 指的是美麗的自然景觀或具有歷史文化價值的地方,如山川、湖泊、古建築等。例如:長城是中國最著名的風景名勝之一。

2. 自助旅行 (zì zhù lǚ xíng) - 指的是旅行者自己安排行程、選擇住宿和交通方式等,不依賴旅行社或導遊。例如:我喜歡自助旅行,可以更自由地探索不同的地方。

3. 美食之旅 (měi shí zhī lǚ) - 指的是以品嚐當地特色美食為主題的旅行。例如:我計劃去泰國進行一次美食之旅,品嚐當地的辣椒蝦和綠咖喱。

角色扮演

https://ithelp.ithome.com.tw/upload/images/20230911/201544155tbdFNpE7O.png

除了用直觀的方式提供任務指令,另一個簡單且效果顯著的提示技巧是利用角色扮演。當你在對話中給予機器人一個特定的角色,你會發現它的回應品質會明顯提升。下面是一個實際的範例:

#這裏是使用者的訊息
user_message = f"""
你是一個專業的英語老師
推薦給我三個旅遊相關的詞彙
~"""

messages =  [
    {
        'role':'user',
        'content': f"{user_message}"
    }
]

# 呼叫 ChatCompletion
response = get_completion_from_messages(messages, verbose=False)
print(response)

得到的輸出會是:

1. Sightseeing - 觀光旅遊
2. Adventure - 冒險
3. Souvenir - 紀念品

從這個例子中,我們可以清楚地看到,僅僅通過一個簡單的「專業英語老師」角色扮演指令,機器人的回應立即變得更加專業和貼近該角色,仿佛真的是一位專業英語老師在回答。

這種角色扮演的技巧非常適用於需要特定領域知識或特殊語境下的對話。它不僅可以提升對話品質,還能使得整個對話更為貼近實際應用場景,讓你更有效地獲取所需的資訊。

小樣本學習(Few-shot prompting)

https://ithelp.ithome.com.tw/upload/images/20230911/20154415BPlwNAnC2G.png

小樣本學習是一種極為有效的提示技巧,整體結構如上圖左側所示。其核心概念是提供幾個具體的回覆範例,讓機器人能夠依據這些範例進行更精確的回應。這個技巧不僅易於掌握,也是一種在多種情境下常見而有效的方法。以下是一個示例:

#這裏是使用者的訊息
user_message = f"""
給我一個詞彙

旅遊:我愛旅遊
揹包: 這揹包真重

你的答案:
~"""

messages =  [
    {
        'role':'user',
        'content': f"{user_message}"
    }
]

# 呼叫 ChatCompletion
response = get_completion_from_messages(messages, verbose=False)
print(response)

我們得到的輸出:

夢想:我追尋夢想的旅程

這個範例展示了如何通過提供一系列指定格式的範例("旅遊:我愛旅遊"、"揹包:這個揹包真重")來引導機器人提供類似的回應。這樣的方式使得機器人能更精確地理解你的需求,並給出相對應的答案,這在需要特定格式或特殊情境的回應時尤其有用。

完整的常用提示結構

https://ithelp.ithome.com.tw/upload/images/20230911/20154415atxIVl8VZF.png

將之前介紹的幾個小技巧結合起來,再加上特定問題背後的獨特情境,我們就能設計出更有效的提示訊息。這種綜合應用不僅使訊息更結構化,也讓語言模型更容易掌握我們的需求和解決方案。

下面是一個實際的提示範例:

#這裏是使用者的訊息
user_message = f"""
你是一個專業的外語老師
你的任務是推薦給學生三個學習的詞彙

你的回覆會類似下面格式
travel(旅遊): <使用travel的例句>
Backpack(揹包): <使用backpack的例句>

學生的學習背景
學生的母語: 中文
學生學習的語言: 英文
學習主題: 商業用語

隨機再從學習主題中挑選三個詞彙後回覆:
~"""

messages =  [
    {
        'role':'user',
        'content': f"{user_message}"
    }
]

# 呼叫 ChatCompletion
response = get_completion_from_messages(messages, verbose=False)
print(response)

我們得到的回應:

market(市場):In order to expand their business, companies need to conduct market research to understand consumer needs and preferences. (為了擴大業務,公司需要進行市場研究,以了解消費者的需求和偏好。)

negotiation(談判):Successful business professionals need strong negotiation skills to reach mutually beneficial agreements with clients and partners. (成功的商業專業人士需要具備強大的談判技巧,以達成與客戶和合作夥伴的互利協議。)

investment(投資):Understanding the risks and potential returns of different investment opportunities is crucial for making informed financial decisions. (了解不同投資機會的風險和潛在回報對於做出明智的財務決策至關重要。)

這樣一來,得到的回應不僅專業,也非常符合學生的學習需求,彷彿是由專屬的外語老師親自提供的。

此外,我們還使用了特殊的分隔符號來指示填空部分——例如 <使用travel的例句>。這種方式就像是給語言模型出了一道填空題,它將根據這些指示來填入適當的內容。這是一個在設計提示時相當有用的小技巧。當然,你也可以自由選擇其他分隔符號,比如使用"### 這裡是提示 ###"這樣的格式,以適應你自己的需要。

總結

通過本篇文章,我們詳細地探討了如何設計複雜問題的提示結構,包括基本的提示指令、角色扮演和小樣本學習等。這些技巧不僅提供了更精確的結果,還有助於優化你和語言模型間的互動體驗。

如果你對於如何實際應用這些技巧有更多的興趣,不妨參考我們提供的Colab實驗室。透過實作,你將能更深入地理解這些概念,並掌握如何有效地運用它們。

如果你有任何疑問或者建議,請隨時在評論區留言,我們非常期待聽到你的回饋與看法。我們下篇文章見!


上一篇
[D6] OpenAI API 入門 - 基本觀念
下一篇
[D8] OpenAI API 入門 - Chat Completion 訊息角色
系列文
以 OpenAI 以及 LangChain 實做我的聊天機器人41
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言