前言

現時,已經有很多行業把 ChatGPT 應用到他們的服務中
如果你也想要這樣做的話
那麼你就得先要了解一下在呼叫 ChatGPT API 時的各項參數了

聊天機械人是其中一個非常常見的 GhatGPT API 的應用
下面一些聊天機械人的簡單例子
我們一起透過這些例子掌握一些使用 ChatGPT API 的技巧吧


GPT API 的三個參數

用過 ChatGPT API 的學友們都應該會知道了
ChatGPT API 有三個參數
它們是 model, messages, temperature
如果是用 Python 去呼叫的話
那會是長這個樣子的

model="gpt-3.5-turbo"
messages = [{"role": "user", "content": prompt}]
response = openai.ChatCompletion.create(
    model=model,
    messages=messages,
    temperature=0
)

這三個參數的意思如下

  • model: 你要那一個版本的 GPT
  • messages: 這是這場對話的全部記錄
  • temperature: 你想要 GPT 的回應有多隨機

Model 是什麼

model 就是標示你想要用那個版本的 GPT
比較常見的有 gpt-3.5-turbo 以及 gpt-4 等等

比如說,如果你是想用 GPT 3.5 的話
那麼 model 就會像是這樣

model="gpt-3.5-turbo"

不過,要注意的是
有些 model 是會被更新的
比如說 2023 年 1 月 的 ChatGPT 3.5 和 2024 年 12 月的 ChatGPT 3.5 是不一樣的
如果想要使用指定版本的 ChatGPT 3.5 就需要使用其快照版本 (e.g. gpt-3.5-turbo-0301)
不過這些快照版本也都是會被捨棄的
在某一天之後會用不了
在使用時需要注意一下

詳細列表可以參考官方文檔


Messages 是什麼

聰明如你肯定留意到了吧
messages 跟另外兩個參數不同
不是一個普通的數值,而是一個 JSON array
而這個 array 內的每個 JSON 物件都包含了兩個值
它們是 rolecontent

Role 是什麼

如果你想要利用 ChatGPT 來建立聊天機械人
那麼好好的活用 Role 就會成為你繞不開的課題

ChatGPT API 共有三個 role
它們是 system, assistant, user

下面是這三個 role 的通俗解釋 (非精確定義)

  • system: 對聊天機械人的設定
  • assistant: 聊天機械人對用戶說過的話
  • user: 用戶對聊天機械人說過的話

System

system 是對聊天機械人的設定
一般而言都會放到 message 的最前面

比如說
如果你想讓聊天機械人的回答變得通俗易懂
你可以在 message 內放這個 JSON 物件

{"role": "system", "content": "以一個小學教師的身份,盡量回應得簡短以及用字淺顯易懂,使得一個小三的學生都能明白你的回應。"}

如果你想要聊天機械人只會以中文回應
你可以在 message 內放置這個 JSON 物件

{"role": "system", "content": "在接下來的對話,不論用戶的輸入是什麼語言,一概以繁體中文作回應。"}

Assistant 和 user

assistant 是聊天機械人對用戶說過的話
user 則是用戶對聊天機械人說過的話

由於 ChatGPT API 是沒有記憶的
所以在呼叫 ChatGPT API 的時候
我們是需要把整個對話的記錄都傳給 ChatGPT API 的

比如說,如果這個是之前的對話記錄

用戶:

什麼是黑洞

機械人:

嗯,黑洞是一個相當神秘的天體呢!讓我用簡單的話來解釋一下。

黑洞(英語:black hole)就像是宇宙中的一個超級吸塵器。它的特點有幾個:

1. 不反光:黑洞不會發出光,也不會反射光線。所以,我們看不到它,它就像一個「黑洞」。
2. 極大的引力:黑洞有超強的引力,就像一個超級吸力的磁鐵。它的引力非常強,連光也無法逃脫。
3. 事件視界:黑洞的邊界叫做「事件視界」。如果你跨越了這個邊界,就再也回不來了,就像掉進了一個超大的漩渦。

所以,黑洞是一個奇特而又神秘的天體,它在宇宙中扮演著非常特殊的角色。如果你想知道更多,我們可以繼續聊聊!😊

然後當用戶想要追問什麼是「事件視界」的話
你需要把剛剛的對話以及用戶新的問題一起傳給 ChatGPT API
就像是這樣

messages = [
    {
        "role": "user",
        "content": "什麼是黑洞"
    },
    {
        "role": "assistant",
        "content": "嗯,黑洞是一個相當神秘的天體呢!讓我用簡單的話來解釋一下。\n\n黑洞(英語:black hole)就像是宇宙中的一個超級吸塵器。它的特點有幾個:\n\n1. 不反光:黑洞不會發出光,也不會反射光線。所以,我們看不到它,它就像一個「黑洞」。\n2. 極大的引力:黑洞有超強的引力,就像一個超級吸力的磁鐵。它的引力非常強,連光也無法逃脫。\n3. 事件視界:黑洞的邊界叫做「事件視界」。如果你跨越了這個邊界,就再也回不來了,就像掉進了一個超大的漩渦。\n\n所以,黑洞是一個奇特而又神秘的天體,它在宇宙中扮演著非常特殊的角色。如果你想知道更多,我們可以繼續聊聊!😊"
    },
    {
        "role": "user",
        "content": "什麼是事件視界"
    }
]

完整的 messages

不知道你有沒有發現
上面這個 message 其實還是缺了一些東西的

什麼?不知道缺了什麼?
是 systemsystem

雖然就樣傳給 ChatGPT API 都還可以
不過要是想客制化聊天機械人的話
也還是要把 system 這個 role 給加上的

system 加上後就會變成這個樣子

messages = [
    {
        "role": "system",
        "content": "以一個小學教師的身份,盡量回應得簡短以及用字淺顯易懂,使得一個小三的學生都能明白你的回應。"
    },
    {
        "role": "system",
        "content": "在接下來的對話,不論用戶的輸入是什麼語言,一概以繁體中文作回應。"
    },
    {
        "role": "user",
        "content": "什麼是黑洞"
    },
    {
        "role": "assistant",
        "content": "嗯,黑洞是一個相當神秘的天體呢!讓我用簡單的話來解釋一下。\n\n黑洞(英語:black hole)就像是宇宙中的一個超級吸塵器。它的特點有幾個:\n\n1. 不反光:黑洞不會發出光,也不會反射光線。所以,我們看不到它,它就像一個「黑洞」。\n2. 極大的引力:黑洞有超強的引力,就像一個超級吸力的磁鐵。它的引力非常強,連光也無法逃脫。\n3. 事件視界:黑洞的邊界叫做「事件視界」。如果你跨越了這個邊界,就再也回不來了,就像掉進了一個超大的漩渦。\n\n所以,黑洞是一個奇特而又神秘的天體,它在宇宙中扮演著非常特殊的角色。如果你想知道更多,我們可以繼續聊聊!😊"
    },
    {
        "role": "user",
        "content": "什麼是事件視界"
    }
]

超長的對話

說到這裏
聰明如你都肯定注意到了吧

每次都把整段對話內容上傳到 ChatGPT API
那麼 messages 不就會愈來愈長了嗎

沒錯!!!
messages 內的所有文字全都是會算 token (錢) 的!!!

所以隨着你的對話次數愈來愈多
每次對話的成本也都會愈來愈高

如果不想帳單爆錶的話
可能就要想想限制對話次數或字數上限了


Temperature 是什麼

temperature 就是你想要 ChatGPT API 的回應有多穩定或是多隨機
這個數值是一個介乎於 0 和 1 之間(包含) 的小數

temperature 是 0 的時候
ChatGPT 就會每次生成下一個單詞時都採用最高機率出現的單詞
temperature 大於 0 時候
ChatGPT 就有機會採用出現機率沒那麼高的單詞
而且數值愈高,使以最高機率以外的單詞的機會愈大

換而言之
temperature 愈接近 0 的話,輸出的結果就愈穩定可靠
temperature 愈接近 1 的話,輸出的結果就愈隨機

若你想它的回應變得穩定可控的話
請使用接近 0 的數值

若你想它的回應變得隨機有創意的話
請使用接近 1 的數值

如果 temperature 是 0 的話
那麼你問它相同的問題的時候
它的回應都會是一㨾的

不過,若你使用的 model 是會更新的話 (e.g. gpt-3.5-turbo)
即便你的 temperature 是 0
在過一段時間後,它的回應也可能會變得不一樣


遊樂場 (Playground)

OpenAI 有為大家設立了一個遊樂場
好讓大家可以測試一下不同的參數會有什麼結果

但要注意的是
你在遊樂場內做的事也都是要算 token 的
所以還是要小心不要玩過頭了喔!~🤭

下面就是遊樂場的網址
https://platform.openai.com/playground


結語

這篇帖文簡介了 ChatGPT API 的參數
其實這些資料都是來自一個免費的簡短課程
Courses – DeepLearning.AI

我之前寫了一則介紹這個課程的帖文
免費簡短 ChatGPT 課程,一小時變高手不求人

如果大家有興趣了解更多的話
非常歡迎大家到這則帖文看看
也很建議大家讀一下這個簡短的課程
課程內還有很多資訊喔!~~


參考資料

模型(Model)– OpenAI 中文文檔

OpenAI ChatGPT API 如何使用?(附上 Python 範例程式) — IT 空間

Courses – DeepLearning.AI

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


Trending