寫在前面
ChatGPT 近期以強(qiáng)大的對(duì)話和信息整合能力風(fēng)靡全網(wǎng)。起初,她并沒有引起我很大的興趣。我認(rèn)為這不過又是互聯(lián)網(wǎng)公司尋求新的經(jīng)濟(jì)增長點(diǎn)的風(fēng)口而已。
就像幾年前的 區(qū)塊鏈 ,大大小小的公司趨之若鶩,記得我當(dāng)時(shí)的老東家也推出一款去中心化的 APP,用于存儲(chǔ)自己的基因數(shù)據(jù)。現(xiàn)在已經(jīng)沒有人談及區(qū)塊鏈技術(shù)了。
就像最近 1-2 年的 元宇宙 ,據(jù)說甚至有學(xué)校成立了元宇宙學(xué)院,自從扎克伯格曬出一個(gè)簡陋無比的元宇宙照片之后,簡直是將元宇宙的破爛底褲展示在世人面前。如今,元宇宙成了個(gè)笑話。
基于我淺薄的認(rèn)知,我并沒有過多關(guān)注 ChatGPT 。直到今天的一些私人原因,我才開始正式了解她。
ChatGPT 是什么
ChatGPT 的全稱是 Chat Generative Pre-trained Transformer 。我的理解她是一個(gè)基于 Transformer 模型 由預(yù)訓(xùn)練數(shù)據(jù)生成對(duì)話信息的應(yīng)用。(PS:Transformer 模型,是谷歌在 2017 年推出的 NLP 經(jīng)典模型)
由她的名字,我猜測(cè),ChatGPT 并不是在全網(wǎng)實(shí)時(shí)搜索最佳答案,而是根據(jù)預(yù)先訓(xùn)練的數(shù)據(jù),實(shí)時(shí)拼湊出一個(gè)答案。這個(gè)答案可能并不一定是正確的,但不管你信不信,反正 ChatGPT 自己是相信這個(gè)答案的。
ChatGPT 的前世今生
我們所說的 ChatGPT 其實(shí)是基于 GPT-3.5 模型 開發(fā)得到的。截至目前,OpenAI 公司并沒有開放 GPT-3.5 的接口。因此我們只能通過 OpenAI 的官方網(wǎng)站 https://chat.openai.com/ 來訪問 ChatGPT。(https://ai.com 這個(gè)地址是 OpenAI 花重金購買的,同樣可以跳轉(zhuǎn)到 ChatGPT 官網(wǎng))
現(xiàn)在網(wǎng)上出現(xiàn)的一些 ChatGPT 中文版,ChatGPT 微信版等等都是基于 2020 年的 GPT-3 模型 開發(fā)而來。雖然和基于GPT-3.5 模型演化而來的 ChatGPT 沒法比。但是同樣能帶我們體驗(yàn)人工智能的美妙。
而我們今天要搭建的 ChatGPT 同樣是基于GPT-3 模型開發(fā)。
用 Python 搭建 ChatGPT
獲取 OpenAI API Key
由我的另一篇博客 超詳細(xì)注冊(cè) OpenAI 接口賬號(hào)的教程 獲取 OpenAI API Key 。
安裝 openai 模塊
使用如下代碼安裝 openai 模塊。
pip install openai
調(diào)用接口獲取返回信息
代碼
調(diào)用 openai.Completion.create 函數(shù)獲取返回信息。
import os
import openai
# 填寫注冊(cè)O(shè)penAI接口賬號(hào)時(shí)獲取的 OpenAI API Key
openai.api_key = os.getenv("OPENAI_API_KEY")
# 提問
issue = '你是誰?'
# 訪問OpenAI接口
response = openai.Completion.create(
model='text-davinci-003',
prompt=issue,
temperature=0.9,
max_tokens=150,
top_p=1,
frequency_penalty=0.0,
presence_penalty=0.6
)
# 返回信息
resText = response.choices[0].text
print(resText)
參數(shù)
- model:使用的模型,可選內(nèi)容如下:
- prompt:提問,提問描述越詳細(xì),回答越準(zhǔn)確
- temperature:控制結(jié)果的隨機(jī)性,如果希望結(jié)果更有差異性 0.9,或者希望有固定結(jié)果可以嘗試 0.0
- max_tokens:生成結(jié)果時(shí)的最大 tokens 數(shù)。平均一個(gè)漢字是 2 個(gè) tokens,text-davinci-003 最多是 4000 個(gè) tokens,也就是 2000 個(gè)漢字左右
- top_p:一個(gè)可用于代替 temperature 的參數(shù),對(duì)應(yīng)機(jī)器學(xué)習(xí)中 nucleus sampling,如果設(shè)置 0.1 意味著只考慮構(gòu)成前 10% 概率質(zhì)量的 tokens
- frequency_penalty:控制字符的重復(fù)度,取值為 -2.0 ~ 2.0 之間的數(shù)字
- presence_penalty:控制主題的重復(fù)度,取值為 -2.0 ~ 2.0 之間的數(shù)字
測(cè)試 ChatGPT
別的不敢評(píng)價(jià),就是這個(gè)最后用 python 寫冒泡排序,我給打 99 分。代碼最后莫名其妙多出一個(gè)逗號(hào),原以為這代碼肯定會(huì)報(bào)錯(cuò),誰知道測(cè)試了下可以正常運(yùn)行,運(yùn)行結(jié)果也是對(duì)的。后來查了一下資料,原來 print()后面加上逗號(hào)可以讓回車符失效,ChatGPT 是故意這么做的,這是我不知道的知識(shí)點(diǎn)。給她扣掉一分,是因?yàn)檫@代碼空格和回車有點(diǎn)太隨意了,并不是特別工整。
最后
免費(fèi)的 API 接口是有額度限制的。每個(gè)賬號(hào)有 18 美元 的免費(fèi)額度,限期 3 個(gè)月 。 不同的模式計(jì)費(fèi)不同,text-davinci-003 這個(gè)模式大約每 1000 個(gè) tokens 扣費(fèi) 0.02 美元。
除此以外,OpenAI 的接口還有如下功能,靜待你的挖掘。
[站外圖片上傳中...(image-9f61b9-1677113856911)]