使用Python探究OpenAI API
譯文不妨了解可以從OpenAI享用的所有實用服務。
誰沒聽說過OpenAI?這家人工智能研究實驗室因其著名的產(chǎn)品ChatGPT而改變了世界。它改變了AI實施領域,許多公司現(xiàn)在急于成為下一大熱點。
盡管競爭激烈,OpenAI仍然是任何生成式AI業(yè)務需求的首選公司,因為它擁有最好的模型和持續(xù)的支持。該公司提供了許多最先進的生成式AI模型,能夠處理各種任務:圖像生成和文本到語音等。
OpenAI提供的所有模型都可以通過API調(diào)用獲得。借助簡單的Python代碼,您已經(jīng)可以使用該模型。
我們在本文中將探討如何結(jié)合使用OpenAI API和Python以及可以執(zhí)行的各種任務。但愿您能從這篇文章中學到很多。
OpenAI API設置
要閱讀本文,您需要準備好幾個方面。
最重要的是OpenAI的API密鑰,因為沒有密鑰就無法訪問OpenAI模型。要獲得訪問權(quán)限,您必須注冊OpenAI帳戶,并在帳戶頁面上申請API密鑰。收到密鑰后,將其保存在能夠記住的地方,因為它不會再次出現(xiàn)在OpenAI界面中。
需要做的下一件事是購買預付費積分以使用OpenAI API。最近,OpenAI宣布改變計費方式。我們需要為API調(diào)用購買預付費積分,而不是在月底支付。您可以訪問OpenAI定價頁面來估算所需的積分。還可以查看模型頁面,以了解您需要哪種模型。
最后,您需要在生產(chǎn)環(huán)境中安裝OpenAI Python軟件包。您可以使用下面的代碼做到這一點。
pip install openai
然后,您需要使用下面的代碼設置OpenAI Key環(huán)境變量。
import os
os.environ['OPENAI_API_KEY'] = 'YOUR API KEY'
一切設置完畢后,不妨開始使用Python探索OpenAI模型的API。
OpenAI API文本生成
OpenAI API的明星是其文本生成模型。這些大語言模型系列可以從名為提示的文本輸入生成文本輸出。提示實際上是關于我們期望從模型中得到什么的指令,比如分析文本和生成文檔草稿等。
不妨從執(zhí)行一個簡單的文本生成API調(diào)用入手。我們將使用OpenAI的GPT-3.5 Turbo模型作為基礎模型。它不是最先進的模型,但最便宜的模型常常足以執(zhí)行與文本相關的任務。
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)
- “釋放預測分析的力量,推動數(shù)據(jù)驅(qū)動的決策!”
- “深入挖掘數(shù)據(jù)海洋,發(fā)現(xiàn)有價值的見解?!?/li>
- “通過先進算法將原始數(shù)據(jù)轉(zhuǎn)化為實用的情報。”
文本生成模型的API調(diào)用使用API Endpoint chat.completions從提示創(chuàng)建文本響應。
文本生成需要兩個參數(shù):模型和消息。
至于模型,您可以檢查可以在相關模型頁面上使用的模型列表。
至于消息,我們傳遞一個含有兩個對的字典:角色和內(nèi)容。角色鍵指定了對話模型中的角色發(fā)送方。有三種不同的角色:系統(tǒng)、用戶和助手。
使用消息中的角色,我們可以幫助設置模型行為和模型應該如何回答提示的示例。
不妨使用角色助手擴展前面的代碼示例,以指導我們的模型。此外,我們將探索文本生成模型的一些參數(shù),以改進結(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)
當然!以下是基于提供的行語的三個內(nèi)容思路:
- “釋放數(shù)據(jù)處理的力量:數(shù)據(jù)科學家的逐步指南”——創(chuàng)建一篇博文或視頻教程,展示實際數(shù)據(jù)科學項目中數(shù)據(jù)處理的最佳實踐和工具。
- “預測分析的未來:數(shù)據(jù)科學的趨勢和創(chuàng)新”——撰寫一篇思想領袖文章,討論預測分析領域的新興趨勢和技術(shù),以及它們?nèi)绾嗡茉鞌?shù)據(jù)科學的未來。
- “駕馭特征工程:提升模型性能的技術(shù)”——開發(fā)一個信息圖表或社交媒體系列,著重介紹不同的特征工程技術(shù)及其對提高機器學習模型的準確性和效率的影響。
生成的輸出遵循我們提供給模型的示例。如果我們希望模型遵循某種樣式或結(jié)果,那么使用角色助手非常有用。
至于參數(shù),下面簡單解釋我們使用的每個參數(shù):
- max_tokens:該參數(shù)設置模型可以生成的最多字數(shù)。
- temperature:該參數(shù)控制模型輸出的不可預測性。該參數(shù)值越高,輸出越具有多樣性,越富有想象力??山邮艿姆秶菑?到無窮大,但大于2的值不尋常。
- top_p:又叫核抽樣,該參數(shù)有助于確定模型得出輸出所依賴的概率分布的子集。比如說,top_p值為0.1意味著模型只考慮抽樣概率分布的前10%。其值可以從0到1,值越大,輸出多樣性越大。
- frequency_penalty:這懲罰模型輸出中的重復token。懲罰值的范圍從-2到2,其中正值不鼓勵重復使用token,負值則相反,鼓勵重復使用單詞。值為0表示不會對重復進行懲罰。
最后,您可以使用以下代碼將模型輸出改為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": [
"利用預測分析發(fā)掘?qū)氋F的洞察力",
"深入研究先進機器學習算法的微妙細處",
"利用大數(shù)據(jù)的力量推動數(shù)據(jù)驅(qū)動的決策"
]
}
結(jié)果采用JSON格式,并遵循我們輸入到模型中的提示。
要獲得完整的文本生成API文檔,您可以在專門的頁面上查看。
OpenAI圖像生成
OpenAI模型對于文本生成用例很有用,也可以調(diào)用API以生成圖像。
使用DALL?E模型,我們可以按要求生成圖像。執(zhí)行起來很簡單,只需使用以下代碼。
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)
針對這些參數(shù),解釋如下:
- model:要使用的圖像生成模型。目前,API只支持DALL?E 3和DALL?E 2模型。
- prompt:這是文本描述,模型將在此基礎上生成圖像。
- size:決定生成圖像的分辨率。DALL?E3模型有三種選擇:1024x1024、1024x1792或1792x1024。
- quality:該參數(shù)影響生成圖像的質(zhì)量。如果需要計算時間,“標準”比“高清”快。
- n:指定基于提示生成圖像的數(shù)量。DALL?E3一次只能生成一個圖像。DALL?E2一次可以生成多達10個圖像。
還可以從現(xiàn)有的圖像生成一個衍變圖像,不過只能使用DALL?E2模型做到這點。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好,因為它使用舊模型。
OpenAI Vision
OpenAI是一家提供能夠理解圖像輸入的模型的領先公司。這個模型名為Vision模型,有時被稱為GPT-4V。該模型能夠根據(jù)我們給出的圖像回答問題。
不妨試一下Vision模型API。在本例中,我將使用從DALL?E3模型生成的白色鋼琴圖像,并將其存儲在本地。此外,我還將創(chuàng)建一個函數(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']
這個圖像顯示一架大鋼琴擺放在寧靜的海灘上。鋼琴是白色的,表明一種常與優(yōu)雅聯(lián)系在一起的色調(diào)。樂器放在海岸線的邊緣,輕柔的海浪輕撫沙灘,泛起泡沫,正好碰到鋼琴的底座和配套的凳子。海灘周圍的環(huán)境暗示著一種寧靜和隔絕的感覺,清澈的藍天,遠處蓬松的云,平靜的大海延伸到地平線。無數(shù)大小形狀各異的貝殼散落在沙灘上鋼琴的周圍,突出了環(huán)境的自然美和寧靜的氛圍。自然海灘環(huán)境中的古典樂器創(chuàng)造了超現(xiàn)實和畫面充滿詩意的構(gòu)圖。
您可以調(diào)整上面字典中的文本值以匹配您的Vision模型要求。
OpenAI音頻生成
OpenAI還提供了基于文本到語音模型生成音頻的模型。它非常易于使用,不過語音敘述風格很有限。此外,模型支持許多語言,您可以在語言支持頁面上看到這些語言。
要生成音頻,可以使用下面的代碼。
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)
您應該會在目錄中看到音頻文件。試著播放一下,看看是否符合標準。
目前,只有幾個參數(shù)可以用于文本到語音模型:
- model:要使用的文本到語音模型。只有兩種模型可用:ts-1或ts-1-hd,其中ts-1優(yōu)化速度,ts-1-hd優(yōu)化質(zhì)量。
- voice:使用的語音樣式,所有聲音都被優(yōu)化為英語。選擇有alloy、echo、fable、onyx、nova和shimmer。
- response_format:音頻格式文件。目前支持的格式有mp3、opus、aac、flac、wav和pcm。
- speed:生成的音頻速度。您可以選擇0.25到4之間的值。
- input:用于創(chuàng)建音頻的文本。目前,模型最多支持4096個字符。
OpenAI語音到文本
OpenAI提供了轉(zhuǎn)錄和翻譯音頻數(shù)據(jù)的模型。使用Whispers模型,我們可以將音頻從支持的語言轉(zhuǎ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ù)科學和機器學習。
還可以將音頻文件翻譯成英語。模型還無法翻譯成另一種語言。
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提供的幾項模型服務,從文本生成、圖像生成、音頻生成、視覺和文本到語音模型。每個模型都有自己的API參數(shù)和規(guī)范,您需要在使用它們之前有所了解。
原文標題:Exploring the OpenAI API with Python,作者:Cornellius Yudha Wijaya
鏈接:https://www.kdnuggets.com/exploring-the-openai-api-with-python。