重新定義性價比!人工智能AI聊天ChatGPT新接口模型gpt-3.5-turbo閃電更新,成本降90%,Python3.10接入

北國春遲,春寒料峭略帶陰霾,但ChatGPT新接口模型gpt-3.5-turbo的更新為我們帶來了一絲暖意,使用成本更加親民,比高端產(chǎn)品ChatGPT Plus更實惠也更方便,畢竟ChatGPT Plus依然是通過網(wǎng)頁端來輸出,Api接口是以token的數(shù)量來計算價格的,0.002刀每1000個token,token可以理解為字數(shù),說白了就是每1000個字合0.01381人民幣,以ChatGPT無與倫比的產(chǎn)品力而言,如此低的使用成本讓所有市面上其他所有類ChatGPT產(chǎn)品都黯然失光。

本次讓我們使用Python3.10光速接入ChatGPT API的新模型gpt-3.5-turbo。

OpenAI庫的SDK方式接入

OpenAI官方同步更新了接口Api的三方庫openai,版本為0.27.0,如果要使用新的模型gpt-3.5-turbo,就必須同步安裝最新版本:

pip3 install openai==0.27.0

隨后建立chat.py文件:

import openai  
  
openai.api_key = "openai的接口apikey"   
  
completion = openai.ChatCompletion.create(  
  model="gpt-3.5-turbo",   
  messages=[{"role": "user", "content": "北國風光,千里冰封,萬里雪飄,請接著續(xù)寫,使用沁園春的詞牌"}]  
)  
  
print(completion["choices"][0]["message"]["content"])

程序返回:

瑤池冰緣,雪舞凄美, 隔窗寒意,似乎鉆進衣袖。  
寒塘渡鴨,雪中梅影, 孤獨是一片銀白的姿態(tài)。  
冰雪如花,開放在草莓園里, 可愛的雪人,瑟瑟發(fā)抖著歡呼。  
北風凜冽,寒暄難擋, 四季明媚,但冬日尤甜美。  
千里冰封,萬里雪飄, 窗外天下壯觀,此時正是京城美。

閃電般秒回,讓用慣了ChatGPT網(wǎng)頁端的我們幾乎不能適應。

gpt-3.5-turbo,對得起turbo的加成,帶渦輪的ChatGPT就是不一樣。

ChatGPT聊天上下文

我們知道ChatGPT的最大特色就是可以聯(lián)系語境中的上下文,換句話說,ChatGPT可以根據(jù)之前的回答來優(yōu)化之后的回答,形成上下文關(guān)系,讓人機對話更加連貫和富有邏輯性。

這里取決于輸入?yún)?shù)中的role參數(shù),每一個role的取值,對應的場景不一樣,其中system用于在對話開始時給ChatGPT一個指示或聲明,有點像引導詞,使得后續(xù)的回答更具有個性化和專業(yè)化。user是用于給用戶提問的或者說是用來給用戶輸入引導詞的。assistant顧名思義,是用于輸入ChatGPT的回答內(nèi)容:

import openai  
  
openai.api_key = "apikey"   
  
  
class ChatGPT:  
    def __init__(self,chat_list=[]) -> None:  
        # 初始化對話列表  
        self.chat_list = []  
      
    # 顯示接口返回  
    def show_conversation(self,msg_list):  
        for msg in msg_list:  
            if msg['role'] == 'user':  
                print(f"Me: {msg['content']}\n")  
            else:  
                print(f"ChatGPT: {msg['content']}\n")  
  
    # 提示chatgpt  
    def ask(self,prompt):  
        self.chat_list.append({"role":"user","content":prompt})  
        response = openai.ChatCompletion.create(model="gpt-3.5-turbo",messages=self.chat_list)  
        answer = response.choices[0].message['content']  
        # 添加歷史對話,形成上下文關(guān)系  
        self.chat_list.append({"role":"assistant","content":answer})  
        self.show_conversation(self.chat_list)

這里每一次會話都會加入chat_list的聊天列表,角色為assistant,為了讓ChatGPT分析上下文,下面開始測試:

if __name__ == '__main__':  
  
    chat = ChatGPT()  
  
    chat.ask("你是一位南宋詞人,詞風婉約,有點類似李清照女士,請使用蝶戀花詞牌描寫北國春光")

程序返回:

Me: 你是一位南宋詞人,詞風婉約,有點類似李清照女士,請使用蝶戀花詞牌描寫北國春光  
  
ChatGPT: 北國春光,清冽宜人。望眼欲穿的遠山如翠起伏,遙遠而縹緲。層層疊疊的林木,新綠徜徉,婆娑搖曳。風兒吹起,沁人心脾,點點梅花飄至,宛如仙境。  
  
花間蝶戀,春色滿園。鶯鶯燕燕,鳥鳴花落,時時惹人遐思。碧空萬里,藍天白云,彩云飄飄,繽紛奪目。柳絮飄飄,輕羽翩翩,小河潺潺,流水聲聲,婉轉(zhuǎn)動人。  
  
清風拂面,落英繽紛。聽著草蟲唱起,充滿陽光的氣息,輕輕飄蕩,仿佛一條無形的小河,展開春天的美好,留下美好的記憶。人間萬象,卻只有這春色無邊,似乎奔向遠方的快樂。

此時再次發(fā)問:

chat.ask("請使用另外一種粗狂陽剛的風格再寫一遍上面的詞")

程序返回:

Me: 請使用另外一種粗狂陽剛的風格再寫一遍上面的詞  
  
ChatGPT: 北國春光,不柔不媚,金色的陽光照在地上,充滿了男子氣概。  
草原上風吹不斷,那些瘋狂的野花,在春風中舞蹈。  
看!那些猛禽靜靜地盤旋在高空,監(jiān)視著整片草原,威武雄壯。  
花叢間,一只雄性蜂鷹躍躍欲飛,看上去仿佛要沖破天際。  
這里的春天有時帶著風沙,但這并不能阻止狂放豪邁的草原奔騰前行,而這樣的北國春光,怎會輕易被遺忘!

雖然內(nèi)容有些尬,但確實聯(lián)系了上下文。

需要注意的是,token不僅計算ChatGPT的接口返回內(nèi)容,也會計算用戶的發(fā)送內(nèi)容,token的計算方法不是簡單的一詞一個,例如中文輸入,一個中文漢字占2個字節(jié)數(shù),而對于一次中文測試中,50個漢字被算為100個tokens,差不多是英文的一倍,而token還計算api發(fā)送中的角色字段,如果像上文一樣實現(xiàn)上下文操作,就必須發(fā)送ChatGPT接口返回的歷史聊天列表,這意味著ChatGPT上下文聊天的成本并不是我們想象中的那么低,需要謹慎使用。

原生ChatGPT接口異步訪問

除了官方的SDK,新接口模型也支持原生的Http請求方式,比如使用requests庫:

pip3 install requests

直接請求openai官方接口:

import requests  
h = {  
    'Content-Type': 'application/json',  
    'Authorization': 'Bearer apikey'  
}  
d = {  
    "model": "gpt-3.5-turbo",  
    "messages":[{"role": "user", "content": "請解釋同步請求和異步請求的區(qū)別"}],  
    "max_tokens": 100,  
    "temperature": 0  
}  
u = 'https://api.openai.com/v1/chat/completions'  
r = requests.post(url=u, headers=h, json=d).json()  
print(r)

程序返回:

{'id': 'chatcmpl-6qDNQ9O4hZPDT1Ju902coxypjO0mY',   
'object': 'chat.completion',   
'created': 1677902496, 'model': 'gpt-3.5-turbo-0301',   
'usage': {'prompt_tokens': 20, 'completion_tokens': 100, 'total_tokens': 120},   
'choices': [{'message':   
{'role': 'assistant',   
'content': '\n\n同步請求和異步請求是指在客戶端向服務器發(fā)送請求時,客戶端等待服務器響應的方式不同。\n\n同步請求是指客戶端發(fā)送請求后,必須等待服務器響應后才能繼續(xù)執(zhí)行后續(xù)的代碼。在等待服務器響應的過程中,客戶端的界面會被阻塞,用戶無法進行'},   
'finish_reason': 'length', 'index': 0}]}

ChatGPT原生接口也支持異步方式請求,這里使用httpx:

pip3 install httpx

編寫異步請求:

h = {  
    'Content-Type': 'application/json',  
    'Authorization': 'Bearer apikey'  
}  
d = {  
    "model": "gpt-3.5-turbo",  
    "messages":[{"role": "user", "content": "請解釋同步請求和異步請求的區(qū)別"}],  
    "max_tokens": 100,  
    "temperature": 0  
}  
u = 'https://api.openai.com/v1/chat/completions'  
  
import asyncio  
import httpx  
  
async def main():  
    async with httpx.AsyncClient() as client:  
        resp = await client.post(url=u, headers=h, json=d)  
        result = resp.json()  
        print(result)  
  
asyncio.run(main())

程序返回:

{'id': 'chatcmpl-6qDNQ9O4hZPDT1Ju902coxypjO0mY',   
'object': 'chat.completion',   
'created': 1677902496, 'model': 'gpt-3.5-turbo-0301',   
'usage': {'prompt_tokens': 20, 'completion_tokens': 100, 'total_tokens': 120},   
'choices': [{'message':   
{'role': 'assistant',   
'content': '\n\n同步請求和異步請求是指在客戶端向服務器發(fā)送請求時,客戶端等待服務器響應的方式不同。\n\n同步請求是指客戶端發(fā)送請求后,必須等待服務器響應后才能繼續(xù)執(zhí)行后續(xù)的代碼。在等待服務器響應的過程中,客戶端的界面會被阻塞,用戶無法進行'},   
'finish_reason': 'length', 'index': 0}]}

我們也可以將異步請求方式封裝到對話類中,完整代碼:

import openai  
import asyncio  
import httpx  
  
openai.api_key = "apikey"   
  
h = {  
    'Content-Type': 'application/json',  
    'Authorization': f'Bearer {openai.api_key}'  
}  
d = {  
    "model": "gpt-3.5-turbo",  
    "messages":[{"role": "user", "content": "請解釋同步請求和異步請求的區(qū)別"}],  
    "max_tokens": 100,  
    "temperature": 0  
}  
u = 'https://api.openai.com/v1/chat/completions'  
  
  
class ChatGPT:  
    def __init__(self,chat_list=[]) -> None:  
        # 初始化對話列表  
        self.chat_list = []  
  
    # 異步訪問  
    async def ask_async(self,prompt):  
  
        d["messages"][0]["content"] = prompt  
        async with httpx.AsyncClient() as client:  
            resp = await client.post(url=u, headers=h, json=d)  
            result = resp.json()  
            print(result)  
  
      
    # 顯示接口返回  
    def show_conversation(self,msg_list):  
        for msg in msg_list:  
            if msg['role'] == 'user':  
                print(f"Me: {msg['content']}\n")  
            else:  
                print(f"ChatGPT: {msg['content']}\n")  
  
    # 提示chatgpt  
    def ask(self,prompt):  
        self.chat_list.append({"role":"user","content":prompt})  
        response = openai.ChatCompletion.create(model="gpt-3.5-turbo",messages=self.chat_list)  
        answer = response.choices[0].message['content']  
        # 添加歷史對話,形成上下文關(guān)系  
        self.chat_list.append({"role":"assistant","content":answer})  
        self.show_conversation(self.chat_list)  
  
  
if __name__ == '__main__':  
  
    chat = ChatGPT()  
  
    chat.ask("你是一位南宋詞人,詞風婉約,有點類似李清照女士,請使用蝶戀花詞牌描寫北國春光")  
  
    chat.ask("請使用另外一種粗狂陽剛的風格再寫一遍上面的詞")  
  
    asyncio.run(chat.ask_async("請解釋同步請求接口和異步請求接口的區(qū)別"))

結(jié)語

低成本ChatGPT接口模型gpt-3.5-turbo更容易接入三方的客戶端,比如微信、QQ、釘釘群之類,比起ChatGPT網(wǎng)頁端,ChatGPT接口的響應速度更加迅速且穩(wěn)定,ChatGPT,永遠的神,沒有之一,且不可替代,最后奉上異步上下文封裝項目,與君共觴:github.com/zcxey2911/chatgpt_api_Contextual_async

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 昨晚 2 點半,OpenAI 給注冊用戶群發(fā)了一封郵件,大致內(nèi)容就是已經(jīng)開放 chatGPT 相同的模型 g...
    潘高PG閱讀 18,635評論 0 2
  • 1.什么是chatGPT ChatGPT是美國人工智能研究實驗室OpenAI新推出的一種人工智能技術(shù)驅(qū)動的自然語言...
    lovefy閱讀 7,280評論 0 1
  • 簡介 2022年11月,OpenAI推出了一款AI聊天機器人程序,其強大的問答能力瞬間引爆全網(wǎng)關(guān)注度。 組成部分:...
    臻甄閱讀 1,998評論 0 0
  • 本文參考的博客鏈接: chatGPT的出現(xiàn)給大家?guī)砹撕芏囿@喜,展示了很多語言能力: 文本生成的能力prompt ...
    心機蔥閱讀 1,917評論 0 0
  • 平時我們都會收到很多短信,由于微信等即時通訊工具的普及,短信已經(jīng)成為了一個驗證碼接收器,但是偶爾也有不少垃圾短信,...
    大鵬學開發(fā)閱讀 326評論 0 0

友情鏈接更多精彩內(nèi)容