使用Python探究OpenAI API 原創(chuàng)
不妨了解可以從OpenAI享用的所有實(shí)用服務(wù)。
誰(shuí)沒聽說過OpenAI?這家人工智能研究實(shí)驗(yàn)室因其著名的產(chǎn)品ChatGPT而改變了世界。它改變了AI實(shí)施領(lǐng)域,許多公司現(xiàn)在急于成為下一大熱點(diǎn)。
盡管競(jìng)爭(zhēng)激烈,OpenAI仍然是任何生成式AI業(yè)務(wù)需求的首選公司,因?yàn)樗鼡碛凶詈玫哪P秃统掷m(xù)的支持。該公司提供了許多最先進(jìn)的生成式AI模型,能夠處理各種任務(wù):圖像生成和文本到語(yǔ)音等。
OpenAI提供的所有模型都可以通過API調(diào)用獲得。借助簡(jiǎn)單的Python代碼,您已經(jīng)可以使用該模型。
我們?cè)诒疚闹袑⑻接懭绾谓Y(jié)合使用OpenAI API和Python以及可以執(zhí)行的各種任務(wù)。但愿您能從這篇文章中學(xué)到很多。
OpenAI API設(shè)置
要閱讀本文,您需要準(zhǔn)備好幾個(gè)方面。
最重要的是OpenAI的API密鑰,因?yàn)闆]有密鑰就無法訪問OpenAI模型。要獲得訪問權(quán)限,您必須注冊(cè)O(shè)penAI帳戶,并在帳戶頁(yè)面上申請(qǐng)API密鑰。收到密鑰后,將其保存在能夠記住的地方,因?yàn)樗粫?huì)再次出現(xiàn)在OpenAI界面中。
需要做的下一件事是購(gòu)買預(yù)付費(fèi)積分以使用OpenAI API。最近,OpenAI宣布改變計(jì)費(fèi)方式。我們需要為API調(diào)用購(gòu)買預(yù)付費(fèi)積分,而不是在月底支付。您可以訪問OpenAI定價(jià)頁(yè)面來估算所需的積分。還可以查看模型頁(yè)面,以了解您需要哪種模型。
最后,您需要在生產(chǎn)環(huán)境中安裝OpenAI Python軟件包。您可以使用下面的代碼做到這一點(diǎn)。
pip install openai
然后,您需要使用下面的代碼設(shè)置OpenAI Key環(huán)境變量。
import os
os.environ['OPENAI_API_KEY'] = 'YOUR API KEY'
一切設(shè)置完畢后,不妨開始使用Python探索OpenAI模型的API。
OpenAI API文本生成
OpenAI API的明星是其文本生成模型。這些大語(yǔ)言模型系列可以從名為提示的文本輸入生成文本輸出。提示實(shí)際上是關(guān)于我們期望從模型中得到什么的指令,比如分析文本和生成文檔草稿等。
不妨從執(zhí)行一個(gè)簡(jiǎn)單的文本生成API調(diào)用入手。我們將使用OpenAI的GPT-3.5 Turbo模型作為基礎(chǔ)模型。它不是最先進(jìn)的模型,但最便宜的模型常常足以執(zhí)行與文本相關(guān)的任務(wù)。
from openai import OpenAI
client = OpenAI()
completion = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Generate me 3 Jargons that I can use for my Social Media content as a Data Scientist content creator"}
]
)
print(completion.choices[0].message.content)
- “釋放預(yù)測(cè)分析的力量,推動(dòng)數(shù)據(jù)驅(qū)動(dòng)的決策!”
- “深入挖掘數(shù)據(jù)海洋,發(fā)現(xiàn)有價(jià)值的見解?!?/li>
- “通過先進(jìn)算法將原始數(shù)據(jù)轉(zhuǎn)化為實(shí)用的情報(bào)?!?/li>
文本生成模型的API調(diào)用使用API Endpoint chat.completions從提示創(chuàng)建文本響應(yīng)。
文本生成需要兩個(gè)參數(shù):模型和消息。
至于模型,您可以檢查可以在相關(guān)模型頁(yè)面上使用的模型列表。
至于消息,我們傳遞一個(gè)含有兩個(gè)對(duì)的字典:角色和內(nèi)容。角色鍵指定了對(duì)話模型中的角色發(fā)送方。有三種不同的角色:系統(tǒng)、用戶和助手。
使用消息中的角色,我們可以幫助設(shè)置模型行為和模型應(yīng)該如何回答提示的示例。
不妨使用角色助手?jǐn)U展前面的代碼示例,以指導(dǎo)我們的模型。此外,我們將探索文本生成模型的一些參數(shù),以改進(jìn)結(jié)果。
completion = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Generate me 3 jargons that I can use for my Social Media content as a Data Scientist content creator."},
{"role": "assistant", "content": "Sure, here are three jargons: Data Wrangling is the key, Predictive Analytics is the future, and Feature Engineering help your model."},
{"role": "user", "content": "Great, can you also provide me with 3 content ideas based on these jargons?"}
],
max_tokens=150,
temperature=0.7,
top_p=1,
frequency_penalty=0
)
print(completion.choices[0].message.content)
當(dāng)然!以下是基于提供的行語(yǔ)的三個(gè)內(nèi)容思路:
- “釋放數(shù)據(jù)處理的力量:數(shù)據(jù)科學(xué)家的逐步指南”——?jiǎng)?chuàng)建一篇博文或視頻教程,展示實(shí)際數(shù)據(jù)科學(xué)項(xiàng)目中數(shù)據(jù)處理的最佳實(shí)踐和工具。
- “預(yù)測(cè)分析的未來:數(shù)據(jù)科學(xué)的趨勢(shì)和創(chuàng)新”——撰寫一篇思想領(lǐng)袖文章,討論預(yù)測(cè)分析領(lǐng)域的新興趨勢(shì)和技術(shù),以及它們?nèi)绾嗡茉鞌?shù)據(jù)科學(xué)的未來。
- “駕馭特征工程:提升模型性能的技術(shù)”——開發(fā)一個(gè)信息圖表或社交媒體系列,著重介紹不同的特征工程技術(shù)及其對(duì)提高機(jī)器學(xué)習(xí)模型的準(zhǔn)確性和效率的影響。
生成的輸出遵循我們提供給模型的示例。如果我們希望模型遵循某種樣式或結(jié)果,那么使用角色助手非常有用。
至于參數(shù),下面簡(jiǎn)單解釋我們使用的每個(gè)參數(shù):
- max_tokens:該參數(shù)設(shè)置模型可以生成的最多字?jǐn)?shù)。
- temperature:該參數(shù)控制模型輸出的不可預(yù)測(cè)性。該參數(shù)值越高,輸出越具有多樣性,越富有想象力??山邮艿姆秶菑?到無窮大,但大于2的值不尋常。
- top_p:又叫核抽樣,該參數(shù)有助于確定模型得出輸出所依賴的概率分布的子集。比如說,top_p值為0.1意味著模型只考慮抽樣概率分布的前10%。其值可以從0到1,值越大,輸出多樣性越大。
- frequency_penalty:這懲罰模型輸出中的重復(fù)token。懲罰值的范圍從-2到2,其中正值不鼓勵(lì)重復(fù)使用token,負(fù)值則相反,鼓勵(lì)重復(fù)使用單詞。值為0表示不會(huì)對(duì)重復(fù)進(jìn)行懲罰。
最后,您可以使用以下代碼將模型輸出改為JSON格式。
completion = client.chat.completions.create(
model="gpt-3.5-turbo",
response_format={ "type": "json_object" },
messages=[
{"role": "system", "content": "You are a helpful assistant designed to output JSON.."},
{"role": "user", "content": "Generate me 3 Jargons that I can use for my Social Media content as a Data Scientist content creator"}
]
)
print(completion.choices[0].message.content)
{
"jargons": [
"利用預(yù)測(cè)分析發(fā)掘?qū)氋F的洞察力",
"深入研究先進(jìn)機(jī)器學(xué)習(xí)算法的微妙細(xì)處",
"利用大數(shù)據(jù)的力量推動(dòng)數(shù)據(jù)驅(qū)動(dòng)的決策"
]
}
結(jié)果采用JSON格式,并遵循我們輸入到模型中的提示。
要獲得完整的文本生成API文檔,您可以在專門的頁(yè)面上查看。
OpenAI圖像生成
OpenAI模型對(duì)于文本生成用例很有用,也可以調(diào)用API以生成圖像。
使用DALL?E模型,我們可以按要求生成圖像。執(zhí)行起來很簡(jiǎn)單,只需使用以下代碼。
from openai import OpenAI
from IPython.display import Image
client = OpenAI()
response = client.images.generate(
model="dall-e-3",
prompt="White Piano on the Beach",
size="1792x1024",
quality="hd",
n=1,
)
image_url = response.data[0].url
Image(url=image_url)
針對(duì)這些參數(shù),解釋如下:
- model:要使用的圖像生成模型。目前,API只支持DALL?E 3和DALL?E 2模型。
- prompt:這是文本描述,模型將在此基礎(chǔ)上生成圖像。
- size:決定生成圖像的分辨率。DALL?E3模型有三種選擇:1024x1024、1024x1792或1792x1024。
- quality:該參數(shù)影響生成圖像的質(zhì)量。如果需要計(jì)算時(shí)間,“標(biāo)準(zhǔn)”比“高清”快。
- n:指定基于提示生成圖像的數(shù)量。DALL?E3一次只能生成一個(gè)圖像。DALL?E2一次可以生成多達(dá)10個(gè)圖像。
還可以從現(xiàn)有的圖像生成一個(gè)衍變圖像,不過只能使用DALL?E2模型做到這點(diǎn)。API也只接受4 MB以下的正方形PNG圖像。
from openai import OpenAI
from IPython.display import Image
client = OpenAI()
response = client.images.create_variation(
image=open("white_piano_ori.png", "rb"),
n=2,
size="1024x1024"
)
image_url = response.data[0].url
Image(url=image_url)
生成的圖像可能不如DALL?E 3好,因?yàn)樗褂门f模型。
OpenAI Vision
OpenAI是一家提供能夠理解圖像輸入的模型的領(lǐng)先公司。這個(gè)模型名為Vision模型,有時(shí)被稱為GPT-4V。該模型能夠根據(jù)我們給出的圖像回答問題。
不妨試一下Vision模型API。在本例中,我將使用從DALL?E3模型生成的白色鋼琴圖像,并將其存儲(chǔ)在本地。此外,我還將創(chuàng)建一個(gè)函數(shù),接受圖像路徑并返回圖像描述文本。別忘了將api_key變量改為您的API Key。
from openai import OpenAI
import base64
import requests
def provide_image_description(img_path):
client = OpenAI()
api_key = 'YOUR-API-KEY'
# Function to encode the image
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode('utf-8')
# Path to your image
image_path = img_path
# Getting the base64 string
base64_image = encode_image(image_path)
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {api_key}"
}
payload = {
"model": "gpt-4-vision-preview",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": """Can you describe this image? """
},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image}"
}
}
]
}
],
"max_tokens": 300
}
response = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=payload)
return response.json()['choices'][0]['message']['content']
這個(gè)圖像顯示一架大鋼琴擺放在寧?kù)o的海灘上。鋼琴是白色的,表明一種常與優(yōu)雅聯(lián)系在一起的色調(diào)。樂器放在海岸線的邊緣,輕柔的海浪輕撫沙灘,泛起泡沫,正好碰到鋼琴的底座和配套的凳子。海灘周圍的環(huán)境暗示著一種寧?kù)o和隔絕的感覺,清澈的藍(lán)天,遠(yuǎn)處蓬松的云,平靜的大海延伸到地平線。無數(shù)大小形狀各異的貝殼散落在沙灘上鋼琴的周圍,突出了環(huán)境的自然美和寧?kù)o的氛圍。自然海灘環(huán)境中的古典樂器創(chuàng)造了超現(xiàn)實(shí)和畫面充滿詩(shī)意的構(gòu)圖。
您可以調(diào)整上面字典中的文本值以匹配您的Vision模型要求。
OpenAI音頻生成
OpenAI還提供了基于文本到語(yǔ)音模型生成音頻的模型。它非常易于使用,不過語(yǔ)音敘述風(fēng)格很有限。此外,模型支持許多語(yǔ)言,您可以在語(yǔ)言支持頁(yè)面上看到這些語(yǔ)言。
要生成音頻,可以使用下面的代碼。
from openai import OpenAI
client = OpenAI()
speech_file_path = "speech.mp3"
response = client.audio.speech.create(
model="tts-1",
voice="alloy",
input="I love data science and machine learning"
)
response.stream_to_file(speech_file_path)
您應(yīng)該會(huì)在目錄中看到音頻文件。試著播放一下,看看是否符合標(biāo)準(zhǔn)。
目前,只有幾個(gè)參數(shù)可以用于文本到語(yǔ)音模型:
- model:要使用的文本到語(yǔ)音模型。只有兩種模型可用:ts-1或ts-1-hd,其中ts-1優(yōu)化速度,ts-1-hd優(yōu)化質(zhì)量。
- voice:使用的語(yǔ)音樣式,所有聲音都被優(yōu)化為英語(yǔ)。選擇有alloy、echo、fable、onyx、nova和shimmer。
- response_format:音頻格式文件。目前支持的格式有mp3、opus、aac、flac、wav和pcm。
- speed:生成的音頻速度。您可以選擇0.25到4之間的值。
- input:用于創(chuàng)建音頻的文本。目前,模型最多支持4096個(gè)字符。
OpenAI語(yǔ)音到文本
OpenAI提供了轉(zhuǎn)錄和翻譯音頻數(shù)據(jù)的模型。使用Whispers模型,我們可以將音頻從支持的語(yǔ)言轉(zhuǎn)錄到文本文件中,并將其翻譯成英語(yǔ)。
不妨從我們之前生成的音頻文件中嘗試簡(jiǎn)單的轉(zhuǎn)錄。
from openai import OpenAI
client = OpenAI()
audio_file= open("speech.mp3", "rb")
transcription = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file
)
print(transcription.text)
我喜歡數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)。
還可以將音頻文件翻譯成英語(yǔ)。模型還無法翻譯成另一種語(yǔ)言。
from openai import OpenAI
client = OpenAI()
audio_file = open("speech.mp3", "rb")
translate = client.audio.translations.create(
model="whisper-1",
file=audio_file
)
結(jié)論
我們已經(jīng)探討了OpenAI提供的幾項(xiàng)模型服務(wù),從文本生成、圖像生成、音頻生成、視覺和文本到語(yǔ)音模型。每個(gè)模型都有自己的API參數(shù)和規(guī)范,您需要在使用它們之前有所了解。
原文標(biāo)題:Exploring the OpenAI API with Python,作者:Cornellius Yudha Wijaya
鏈接:https://www.kdnuggets.com/exploring-the-openai-api-with-python。
