十分鐘學(xué)會開發(fā)自己的Python AI應(yīng)用【OpenAI API篇】

最近 OpenAI 宣布 ChatGPT 將很快推出他們的 API。雖然我們不知道這需要多長時間,但這之前我們可以熟悉下OpenAI API,快速開發(fā)自己的AI應(yīng)用!

通過今天學(xué)習(xí) OpenAI API,你將能夠訪問 OpenAI 的強大模型,例如用于自然語言的 GPT-3、用于將自然語言翻譯為代碼的 Codex 以及用于創(chuàng)建和編輯原始圖像的 DALL-E。

這篇文章的例子將用Pyhon編寫。

生成 API 密鑰

在我們開始使用 OpenAI API 之前,我們需要登錄我們的 OpenAI 帳戶并生成我們的API 密鑰

這里要注意,OpenAI 不會在生成 API 密鑰后再次顯示它,因此請及時復(fù)制你的 API 密鑰并保存。我將創(chuàng)建一個名為 OPENAI_API_KEY 的環(huán)境變量,它將包含我的 API 密鑰并將在下一節(jié)中使用。

使用 Python接入 OpenAI API

要與 OpenAI API 交互,我們需要通過運行以下命令來安裝官方OpenAI包。

pip install openai

我們可以用這個 API 做很多事情。 在本文中,我們將分別完成文字、代碼和圖像的生成。

1.文本生成

文本生成可用于文字鑒別、文本生成、自動對話、轉(zhuǎn)換、摘要等。要使用它,我們必須使用completion endpoint并為模型提供觸發(fā)指令,然后模型將生成匹配上下文/模式的文本。

假設(shè)我們要對以下文本進行鑒別,我們向AI輸入指令(中英文都可以):

判斷以下Mike的發(fā)言情緒是正面、中立還是負(fù)面: Mike:我不喜歡做作業(yè)! Sentiment:

以下就是用到的代碼:

import os import openai
openai.api_key = os.getenv("OPENAI_API_KEY") prompt =  """
Decide whether a Mike's sentiment is positive, neutral, or negative.

Mike: I don't like homework!
Sentiment:
""" 
response = openai.Completion.create( model="text-davinci-003", prompt=prompt, max_tokens=100, temperature=0  )  print(response)

根據(jù) OpenAI 文檔,GPT-3 模型是與文本生成的endpoint一起使用。 這就是我們在此示例中使用模型 text-davinci-003 的原因。

以下是返回值的部分打印:

{
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "logprobs": null,
      "text": "Negative"
    }
  ],
...
}

在此示例中,推文的情緒被歸類為負(fù)面Negative。

讓我們看一下這個例子中使用的參數(shù):

model :要使用的模型的 ID(在這里你可以看到所有可用的模型)

Prompt:生成結(jié)果的觸發(fā)指令

max_token:完成時生成的最大token數(shù)量(這里可以看到OpenAI使用的tokenizer)

temperature:要使用的采樣策略。 接近 1 的值會給模型帶來更多風(fēng)險/創(chuàng)造力,而接近 0 的值會生成明確定義的答案。

2. 代碼生成

代碼生成與文本生成類似,但這里我們使用 Codex 模型來理解和生成代碼。

Codex 模型系列是經(jīng)過自然語言和數(shù)十億行代碼訓(xùn)練的 GPT-3 系列的后代。 借助 Codex,我們可以將注釋轉(zhuǎn)化為代碼、重寫代碼以提高效率等等。

讓我們使用模型 code-davinci-002 和下面的觸發(fā)指令生成 Python 代碼。

代碼生成一個序列,內(nèi)容包含上海的溫度。

import os
import openai

openai.api_key = os.getenv("OPENAI_API_KEY")

response = openai.Completion.create(
  model="code-davinci-002",
  prompt="\"\"\"\nCreate an array of weather temperatures for Shanghai\n\"\"\"",
  temperature=0,
  max_tokens=256,
  top_p=1,
  frequency_penalty=0,
  presence_penalty=0
)

print(response)

以下是返回值的部分打印:

{
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "logprobs": null,
      "text": "\n\nimport numpy as np\n\ndef create_temperatures(n):\n    \"\"\"\n    Create an array of weather temperatures for Shanghai\n    \"\"\"\n    temperatures = np.random.uniform(low=14.0, high=20.0, size=n)\n    return temperatures"
    }
  ],
...
  }
}

把text部分重新顯示格式化一下,你就會看到規(guī)整的代碼生成了:

import numpy as np

def create_temperatures(n):
    temperatures = np.random.uniform(low=14.0, high=20.0, size=n)
    return temperatures

如果想開發(fā)更多,我建議你在 Playground 中測試 Codex(這里有一些幫助你入門的示例)

3. 圖像生成

我們可以使用 DALL-E 模型生成圖像,我們使用圖像生成endpoint并提供文本指令。

以下是我的測試指令(我們在指令中提供的細(xì)節(jié)越多,我們就越有可能獲得我們想要的結(jié)果)。

一只毛茸茸的藍(lán)眼睛白貓坐在花籃里,可愛地抬頭看著鏡頭

import openai

response = openai.Image.create(
  prompt="A fluffy white cat with blue eyes sitting in a basket of flowers, looking up adorably at the camera",
  n=1,
  size="1024x1024"
)
image_url = response['data'][0]['url']
print(image_url)

以下是我得到的圖片:


當(dāng)然更有趣的是,還可以使用image edits and image variations endpoints編輯圖像并生成原圖像的調(diào)整。

好了,這篇文章就到這里,希望能激發(fā)你的創(chuàng)造力,更多OpenAI API的使用請參考官方文檔

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容