極簡 Python:10分鐘會(huì)用 OpenAI / Kimi API
共 6259字,需瀏覽 13分鐘
·
2024-05-01 16:48
背景
之前寫了一份:寫給不會(huì)代碼的你:20分鐘上手 Python + AI,但感覺還不夠簡單粗暴。
于是就有了這篇 10 分鐘版的,讓你快速的開始使用各 AI 廠的 API。
作為準(zhǔn)備工作,請(qǐng)先打開 Colab 的網(wǎng)站,并新建一個(gè)筆記本。
網(wǎng)址: https://colab.research.google.com
基礎(chǔ)版
一切之前,你需要先獲取你 API key
對(duì)于 OpenAI 用戶,訪問這里:
https://platform.openai.com/api-keys
對(duì)于 Kimi 用戶,訪問這里:
https://platform.moonshot.cn/console/api-keys
對(duì)于其他用戶...你自己看著找吧
如果你是 OpenAI 的用戶,請(qǐng)將下面的代碼復(fù)制進(jìn) Colab:
!pip install openaifrom openai import OpenAIclient = OpenAI(api_key="sk-yTmYibGsJ637VUkki2GZUzZ9vh7EWFEJ",)completion = client.chat.completions.create(model="gpt-3.5-turbo",messages=[{"role": "user", "content": "你好"}])print(completion)
如果你是其他 AI 的用戶,以 Kimi 為例,復(fù)制這個(gè):
!pip install openaifrom openai import OpenAIclient = OpenAI(api_key="sk-yTmYibGsJ637VUkki2GZUzZ9vh7EWFEJ",base_url="https://api.moonshot.cn/v1")completion = client.chat.completions.create(model="moonshot-v1-8k",messages=[{"role": "user", "content": "你好"}])print(completion)
注意:你要把 api_key 換成你的
細(xì)心的你會(huì)發(fā)現(xiàn),無論是什么 AI API,大家的接口調(diào)用方法,都幾乎一致。唯變化的,是 base_url 和 model 的值。
選擇代碼單元格,點(diǎn)擊左側(cè)的“運(yùn)行”按鈕或快捷鍵 Ctrl + Enter,開始運(yùn)行代碼。
剛開始運(yùn)行時(shí),Colab 會(huì)安裝 OpenAI 庫,可能需要幾十秒,并輸出類似這樣的內(nèi)容:
安裝完成后,你會(huì)看到回復(fù)被打印出來,類似這樣:
仔細(xì)看這里的中文部分:‘你好!今天我能幫你做什么?’
接口是通的!恭喜,你已經(jīng)成功地與 AI 完成了第一次對(duì)話!
仔細(xì)看回復(fù),是不是很奇怪?里面有著 id、choices 這樣的詞。
其實(shí),這就像一個(gè)包裹,AI 的回復(fù)內(nèi)容被裝在了好幾層「盒子」里面。我們要一層一層地打開,才能看到最里面的回復(fù)內(nèi)容。 completion 就是最外面的那個(gè)大「盒子」,我們需要先打開它。 接下來是 choices,"choices"的意思是「選擇」,這里面裝著幾個(gè)備選的回復(fù),但通常我們只需要第一個(gè)。
在 Python 里,我們用 [0] 來表示第一個(gè)。再打開 choices[0],我們會(huì)看到一個(gè)叫 message 的盒子。這里面裝的就是 ChatGPT 的回復(fù)了,但還差一點(diǎn)點(diǎn)。 最后,message 里面還有一層叫 content 的盒子,打開它,我們就能看到 ChatGPT 的回復(fù)內(nèi)容了。
所以,想要看到 ChatGPT 的回復(fù),我們需要一步一步地「拆盒子」: completion → choices → [0] → message → content 在代碼里,就是這樣寫: completion.choices[0].message.content。
現(xiàn)在,讓我們把 print(completion) 改成 print(completion.choices[0].message.content) :
!pip install openaifrom openai import OpenAIclient = OpenAI(api_key="sk-yTmYibGsJ637VUkki2GZUzZ9vh7EWFEJ",)completion = client.chat.completions.create(model="gpt-3.5-turbo",messages=[{"role": "user", "content": "你好"}])print(completion.choices[0].message.content)
這時(shí)候再運(yùn)行代碼,你就能看到 ChatGPT 干凈利落的回復(fù)了:
雖然這些"盒子"的名字看起來有點(diǎn)復(fù)雜,但你只需要記住用 completion.choices[0].message.content 就能打開最后一個(gè)"盒子",看到回復(fù)內(nèi)容。 以后如果你在學(xué)習(xí) Python 時(shí)遇到了類似的情況,不要害怕,就想象成在拆一個(gè)套娃,一層一層地打開,最后你就能得到你想要的結(jié)果了。
到這里,你已經(jīng)學(xué)會(huì)使用 OpenAI API 了!
高級(jí)一點(diǎn)
如果每次提問,都要重復(fù)改代碼,就太累了
所以,我們可以試試函數(shù)
函數(shù)是一段可以不斷被復(fù)用的代碼,給定輸入后,就可以按邏輯給出輸出,你可以把很多東西都封裝成函數(shù)。
舉個(gè)例子,給手游充值,就是一個(gè)函數(shù)。現(xiàn)在定義一個(gè)函數(shù):充值(金額),輸入一個(gè)金額后,就會(huì)返回對(duì)應(yīng)的結(jié)果:
充值(0元),返回:「想一想,不充錢你會(huì)變得更強(qiáng)嗎?」
充值(6元),返回:「想一想,就充這么一點(diǎn),你會(huì)變得更強(qiáng)嗎?」
充值(618元),返回:「想一想,再充一點(diǎn),你就更強(qiáng)了」
充值(114514元),返回:「你真是個(gè)大冤種」
再來個(gè),可放在代碼里的例子,詩詞填空:_______,從此君王不早朝
def poem(s):print(f"{s},從此君王不早朝")
在這個(gè)代碼里,把值放到 s 所在的位置,然后調(diào)用,它就會(huì)把你輸入的內(nèi)容+“從此君王不早朝”一并輸出,比如:
poem("春宵苦短日高起")poem("但使龍城飛將在")poem("我為將軍解戰(zhàn)袍")poem("雞哥練習(xí)兩年半")
則你會(huì)得到:
春宵苦短日高起,從此君王不早朝但使龍城飛將在,從此君王不早朝我為將軍解戰(zhàn)袍,從此君王不早朝雞哥練習(xí)兩年半,從此君王不早朝
注意:這里說一些代碼規(guī)范
def poem(s): 其中的 def 是定義函數(shù)的意思,poem 是函數(shù)名,s 是參數(shù)名。
def 是固定寫法,別改
poem 和 s 你隨便改,看你喜歡
print(f"{s},從此君王不早朝"):是函數(shù)的輸出
在函數(shù)里,內(nèi)容都要有一個(gè)縮進(jìn)(我通常是打一個(gè) tab)
print() 的括號(hào)是英文括號(hào)
f"{s},從此君王不早朝" 的意思是,將"{s},從此君王不早朝"中的{s}替換成 s 的值,比如替換成:雞哥練習(xí)兩年半
現(xiàn)在,讓我們來用更正式的方式來重寫上面的調(diào)用。
第一步,通過 pip 安裝 openai 的庫,并運(yùn)行(因?yàn)椋悴⒉恍枰看芜\(yùn)行代碼前,都重新安裝一遍環(huán)境):
!pip install openai
第二步,定義一個(gè)名為 ask 的函數(shù),將之前的提問代碼封裝起來,然后運(yùn)行,如:
from openai import OpenAIclient = OpenAI(api_key="sk-yTmYibGsJ637VUkki2GZUzZ9vh7EWFEJ")def ask(question):completion = client.chat.completions.create(model="gpt-3.5-turbo",messages=[{"role": "user", "content": f"{question}"}])print(completion.choices[0].message.content)
這里我問了 GPT-3.5 三個(gè)問題:
ask("隕石為什么總落在坑里?")ask("ATM 機(jī)里一般有幾個(gè)工作人員?")ask("GPT-5 啥時(shí)候發(fā)布?")
運(yùn)行后,得到了:
隕石總落在坑里是因?yàn)榭涌梢蕴峁┮欢ǔ潭鹊谋Wo(hù)和集中力量,有助于減輕隕石沖擊時(shí)的壓力和破壞力。此外,坑也可能會(huì)吸引和引導(dǎo)隕石朝向更集中的區(qū)域落下。因此,隕石在落下時(shí)通常會(huì)選擇坑陷落。通常情況下,ATM 機(jī)內(nèi)部不需要工作人員駐守。ATM 機(jī)是自助式設(shè)備,用戶可以直接在機(jī)器上進(jìn)行各種操作,如取款、存款、轉(zhuǎn)賬等。不過ATM 機(jī)由銀行或金融機(jī)構(gòu)負(fù)責(zé)維護(hù)和監(jiān)控,他們可能會(huì)派遣技術(shù)人員定期檢查和維護(hù)機(jī)器。目前還沒有官方消息表明GPT-5什么時(shí)候發(fā)布。OpenAI可能會(huì)在未來一兩年內(nèi)發(fā)布GPT-5或其他技術(shù)升級(jí)版本,但具體時(shí)間表尚不清楚。建議關(guān)注OpenAI官方發(fā)布的消息以獲取最新動(dòng)態(tài)。
到這里,你已經(jīng)足以用 OpenAI API 來處理各種日常工作了!
最后
如果你希望學(xué)習(xí)更多模型的調(diào)用,比如聲音轉(zhuǎn)文字、文字轉(zhuǎn)圖片,或者更加細(xì)致的定義處理風(fēng)格(嚴(yán)謹(jǐn)還是更有創(chuàng)意的),可以參考 OpenAI 的官方文檔。
文檔地址:
https://platform.openai.com/docs/api-reference
接下來本大聰明還會(huì)「以實(shí)用為核心」,再更新一篇新手極其友好的「Python Cheat Sheet」,幫助大家溫故知新。
