5分鐘實現呼叫ChatGPT介面API完成多輪問答
最近ChatGPT也是火爆異常啊,在親自使用了幾個月之後,我發現這東西是真的好用,實實在在地提高了生產力。那麼對於開發人員來說,有時候可能需要在自己的程式碼里加入這樣一個智慧問答的功能,我最近就出現了這樣的想法和需求,所以簡單研究了一下。網上類似的方法有很多,這裡我提供一種我目前測試成功的也正在使用的一種,有其他需求可以自行上網查詢。
我們可以直接使用Python中的openai庫來實現對ChatGPT的呼叫。
首先第一步就是下載,下載方式也很簡單,只需要一條命令pip install openai
。下載過程中可能會出現各種問題:比如pip版本太低,可以使用pip install --upgrade pip
命令來升級。如果在命令列已經顯示安裝成功,但是呼叫的時候找不到庫,可能是openai版本有問題,可以嘗試使用這條命令pip install -U openai
。
我的已經安裝成功了,所以給我顯示的是openai已安裝的版本資訊:
Windows進入命令列是WIN+R後輸入cmd,然後執行相關命令。但是有個點需要注意,最好選擇管理員許可權來執行cmd命令列視窗。如果還有其他問題,可以嘗試切換網路或者使用Anaconda來安裝。
在呼叫介面之前,我們需要申請一個API KEY來獲取使用許可權。獲取方式有兩種,可以自行去OpenAI官網(https://platform.openai.com/account/api-keys)註冊賬號,然後申請(需要魔法上網)。不過也可以選擇其他方式去獲取,網上有很多渠道,可以自行查詢。這個key的格式大概是這個樣子的:sk-[一大串混亂的字母和數位]。
OpenAI 開放了兩個新模型的api介面(也就是我們用的這個),專門為聊天而生的 gpt-3.5-turbo 和 gpt-3.5-turbo-0301。我查了一下這兩個模型的區別:
gpt-3.5-turbo 需要在 content 中指明具體的角色和問題內容,而 gpt-3.5-turbo-0301 更加關注問題內容,而不會特別關注具體的角色部分。另外,gpt-3.5-turbo-0301 模型有效期到 6 月 1 日,而 gpt-3.5-turbo 會持續更新。
首先介紹一下主要引數的含義:
messages欄位需要重點解釋一下:我們可以在程式碼中指定角色型別,在gpt-3.5-turbo模型中。主要包含三種角色,分別是系統system系統、user使用者和assistant助手。
下面這一段是對此比較官方的闡釋:
程式碼範例:
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "What year is this year?"},
{"role": "assistant", "content": "2023"},
{"role": "user", "content": " xxxx ?"}
]
在我們完成了openai庫的安裝並瞭解了上述引數的含義之後,就可以著手寫程式碼了,下面一個簡單的多次問答機器人程式碼範例:
# -*- coding: utf-8 -*-
import openai
api_key = "在這裡填入你的KEY"
openai.api_key = api_key
def askChatGPT(messages):
MODEL = "gpt-3.5-turbo"
response = openai.ChatCompletion.create(
model=MODEL,
messages = messages,
temperature=1)
return response['choices'][0]['message']['content']
def main():
messages = [{"role": "user","content":""}]
while 1:
try:
text = input('問:')
if text == 'quit':
break
# 問
d = {"role":"user","content":text}
messages.append(d)
text = askChatGPT(messages)
d = {"role":"assistant","content":text}
# 答
print('答:'+text+'\n')
messages.append(d)
except:
messages.pop()
print('ChatGPT:error\n')
if __name__ == '__main__':
main()
執行上述程式碼之後,在控制檯會提示我們輸入問題。每輸入一個問題並敲回車之後,等待片刻會顯示ChatGPT的回答,我們可以進行連續問答,下圖是執行效果(測試問題無任何價值導向)。
下面這段程式碼實現了單次問答呼叫,本質上和上面的程式碼是一樣的,各位按需自取:
# -*- coding: utf-8 -*-
import openai
def openai_reply(content, apikey):
openai.api_key = apikey
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo-0301", # gpt-3.5-turbo-0301
messages=[
{"role": "user", "content": content}
],
temperature=0.5,
max_tokens=2048,
top_p=1,
frequency_penalty=0.7,
)
# print(response)
return response.choices[0].message.content
if __name__ == '__main__':
content = '我比較喜歡大海,請給我推薦幾個景點。'
ans = openai_reply(content, '在這裡填入你的KEY')
print(ans)
原始的返回值資料格式範例如下:
{
"choices": [
{
"finish_reason": "stop",
"index": 0,
"message": {
"content": "xxxx",
"role": "assistant"
}
}
],
"created": 1683542226,
"id": "chatcmpl-",
"model": "gpt-3.5-turbo-0301",
"object": "chat.completion",
"usage": {
"completion_tokens": 373,
"prompt_tokens": 30,
"total_tokens": 403
}
}
以上就是針對程式呼叫ChatGPT介面的全部步驟了,如果執行程式碼出現了問題可以最後嘗試一下這個方法:找到目前所使用的python環境的安裝目錄,進入openai庫資料夾下(D:\environment\python39\Lib\site-packages\openai),替換api_requestor.py檔案。所需的替換檔案可以關注我的訂閱號【靠譜楊的挨踢生活】回覆【chat】獲取。
理性看待人工智慧的發展,正確認識人的不可替代性。讓AI作為一個越來越實用的工具服務於我們的生產和生活(僅代表個人觀點)。
好看請贊,養成習慣:) 本文來自部落格園,作者:靠譜楊, 轉載請註明原文連結:https://www.cnblogs.com/rainbow-1/p/17382852.html
關於筆者: 我的主頁
歡迎來我的51CTO主頁踩一踩~ 我的51CTO部落格
更多分享盡在我的訂閱號:靠譜楊的挨踢生活