使用 OpenAI ChatGPT
OpenAI 是一個由馬斯克所創立的是人工智慧( AI )研究實驗室,在 2022 年底推出了 ChatGPT 的自然語言生成式模型,立刻造成了非常廣大的迴響,這篇教學會介紹如何使用 OpenAI ChatGPT,以及如何透過 Python 串接 OpenAI ChatGPT 的 API。
快速導覽:
- 本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )
- 因為 OpenAI 目前仍持續發展,如果遇到程式碼跑不起來,有可能因為 OpenAI 的 API 有進行調整,請回饋讓我知道,感謝!
註冊 OpenAI
前往 OpenAI 的網站。
- OpenAI 網站:https://openai.com/
- 體驗 ChatGPT:https://chat.openai.com/
- OpenAI 開發者平台:https://platform.openai.com/
點擊最上方的「Try」,會開啟註冊或登入的頁面 ( 點擊「API」按鈕,也會開啟註冊或登入的頁面 ),點擊 Sign up 按鈕進行註冊,註冊時需要使用可以接收簡訊認證碼的手機電話號碼。
透過 ChatGPT 和 AI 聊天
註冊 OpenAI 並登入完成後,在頁面的下方會出現能「輸入文字」的欄位。
體驗 ChatGPT:https://chat.openai.com/
輸入文字後按下送出,就能開始與 OpenAI 的 AI 機器人聊天。
因為每個註冊的帳號都可以和 AI 機器人聊天,也能夠透過 OpenAI 的 API 呼叫機器人,因此有時候會遇到 OpenAI 伺服器無法回應的狀況,這時候只能傻傻的等待,或在比較不熱門的時段和 AI 機器人聊天。
OpenAI 的使用額度
目前 OpenAI 提供「18 美金或三個月」的使用額度,會根據使用的字詞量多寡,或呼叫次數...等作業進行費用的扣除,使用範圍包含了在網站上與 AI 互動,或透過程式呼叫 API,當即將超過費用或是到達期限,就會先暫停使用權限並要求付費,初期適合嚐鮮或作為開發者使用 ( 下圖是 2022 年 12 月撰寫這篇文章時的用量 )。
OpenAI 開發者平台:https://platform.openai.com/
建立 OpenAI API Key
如果要比較深入的使用 OpenAI ( 例如使用 Python 串接、結合 LINE BOT...等 ),就必須要透過 OpenAI 的 API 來實現,從右上方「Personal」的選單裡,選擇「View API Keys」。
選擇後進入建立 API Keys 頁面,點擊「Create new secret key」按鈕,就能建立 API Keys。
注意!只有建立完成的當下可以複製 API Keys,請使用記事本或其他工具儲存 API Key,如果要刪除 API Key,必須再次建立新的 API Key 才能刪除舊的。
使用 Python 串接 OpenAI API
輸入下列指令安裝 openai 函式庫 ( 本機環境根據個人狀況使用 pip 或 pip3 ),如果安裝失敗,可以使用 pip install --upgrade pip
更新 pip 嘗試解決。
!pip install openai
安裝後,使用下列的程式碼,就能夠向 OpenAI 的 AI 機器人發送對話訊息,並接收 AI 機器人所回傳的訊息。
import openai
openai.api_key = '你的 API Key'
response = openai.Completion.create(
model="text-davinci-003",
prompt="講個笑話來聽聽",
max_tokens=128,
temperature=0.5,
)
completed_text = response["choices"][0]["text"]
print(completed_text)
上述的程式碼中使用了 openai.Completion.create
方法,方法的參數說明如下 ( 詳細參數參考:Create completion ):
參數 | 說明 |
---|---|
model | AI 所使用的引擎模組,如果是以自然語意為主,預設使用 text-davinci-003 ( 更多引擎參考:https://beta.openai.com/docs/models/gpt-3 )。 |
prompt | 要傳送的句子會詞彙。 |
max_tokens | 希望 AI 回傳的最大字數,預設 128,在某些情況下回傳的字數會大於這個數字。 |
temperature | 隨機文字組合,範圍 0~1,預設 0.5,0 表示不隨機,1 表示完全隨機。 |
language | 機器人處理的「程式語言」,預設 python,可設定 javascript、java、csharp、golang、ruby、php、cpp。 |
也因為 OpenAI 的 AI 機器人是一個大型語言模型,能夠被訓練成理解和回覆多種語言,因此回覆訊息所使用的語言,是根據輸入的文字訊息內容決定,以下的程式碼為例,執行後輸入「中文笑話」,回覆的訊息就是中文笑話,而如果是輸入「english joke」,就會回應一個英文的笑話。
import openai
openai.api_key = '你的 API Key'
while True:
msg = input()
response = openai.Completion.create(
model='text-davinci-003',
prompt=msg,
max_tokens=128,
temperature=0.5
)
completed_text = response['choices'][0]['text']
print(completed_text)
如果是使用 gpt-3.5-turbo 引擎模組,則要把 openai.ChatCompletion
改成 openai.ChatCompletion
,並將 prompt 參數改成 messages 參數,參數內容使用串列和字典的格式,透過字典格式表現上下文語句,例如下面的例子,ChatGPT 就會知道使用者的名字是 oxxo。
import openai
openai.api_key = '你的 API KEY'
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
max_tokens=128,
temperature=0.5,
messages=[
{"role": "user", "content": "我叫做 oxxo"},
{"role": "assistant", "content": "原來你是 oxxo 呀"},
{"role": "user", "content": "請問我叫什麼名字?"}
]
)
print(response.choices[0].message.content)
串連上下文語句
如果使用 text-davinci-003 模型,在傳送語句時,將之前對話的內容,使用「\n\n」兩個換行符號分隔 ( 實測這樣子的準確度最高 ),並連接目前要講的語句,傳送出去之後就可以讓 ChatGPT 了解過去的交談內容,實現串連上下語句的功能。
import openai
openai.api_key = '你的 API Key'
messages = ''
while True:
msg = input('me > ')
messages = f'{messages}{msg}\n' # 將過去的語句連接目前的對話,後方加上 \n 可以避免標點符號結尾問題
response = openai.Completion.create(
model='text-davinci-003',
prompt=messages,
max_tokens=128,
temperature=0.5
)
ai_msg = response['choices'][0]['text'].replace('\n','')
print('ai > '+ai_msg)
messages = f'{messages}\n{ai_msg}\n\n' # 合併 AI 回應的話
如果使用 gpt-3.5-turbo 模型,直接將回應語句使用字典的格式,添加到回應的 messages 串列中,ChatGPT 就能自動識別上下語句。
import openai
openai.api_key = '你的 API Key'
messages = []
while True:
msg = input('me > ')
messages.append({"role":"user","content":msg}) # 添加 user 回應
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
max_tokens=128,
temperature=0.5,
messages=messages
)
ai_msg = response.choices[0].message.content.replace('\n','')
messages.append({"role":"assistant","content":ai_msg}) # 添加 ChatGPT 回應
print(f'ai > {ai_msg}')
不過要注意的是,傳送歷史紀錄會造成整體 token 暴增!必須要評估自己的口袋深度 ( 有沒有把握可以支付費用 ),再決定是否要進行歷史紀錄的動作。
延伸閱讀
如果已經可以使用 Python 串接 OpenAI,就可以參考下方的文章,將 OpenAI 與 LINE BOT 串連,做出一個具有人工智慧的 LINE 聊天機器人囉!
小結
透過 Python 串接 OpenAI 的 API 其實非常簡單,只需要申請 API Key 就能串接,由於是免費版本,在使用上仍然會有每個月 18 美元的「額度」限制 ( 參考 OpenAI Usage ),但對於一般開發者來說應該是很足夠了,相信未來的生活裡,應該會充斥著許多 AI 代替真人的訊息或語音回覆,至於如何判斷訊息的好壞或是處理衍生的道德倫理問題,就有待人類智商來解決了吧。
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~