十分鐘學會開發自己的Python AI應用【OpenAI API篇】

語言: CN / TW / HK

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

通過今天學習 OpenAI API,你將能夠訪問 OpenAI 的強大模型,例如用於自然語言的 GPT-3、用於將自然語言翻譯為程式碼的 Codex 以及用於建立和編輯原始影象的 DALL-E。

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

生成 API 金鑰

在我們開始使用 OpenAI API 之前,我們需要登入我們的 OpenAI 帳戶並生成我們的API 金鑰

這裡要注意,OpenAI 不會在生成 API 金鑰後再次顯示它,因此請及時複製你的 API 金鑰並儲存。我將建立一個名為 OPENAI_API_KEY 的環境變數,它將包含我的 API 金鑰並將在下一節中使用。

使用 Python接入 OpenAI API

要與 OpenAI API 互動,我們需要通過執行以下命令來安裝官方OpenAI包。 pip install openai 我們可以用這個 API 做很多事情。 在本文中,我們將分別完成文字、程式碼和影象的生成。

1.文字生成

文字生成可用於文字鑑別、文字生成、自動對話、轉換、摘要等。要使用它,我們必須使用completion endpoint併為模型提供觸發指令,然後模型將生成匹配上下文/模式的文字。

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

判斷以下Mike的發言情緒是正面、中立還是負面: \ Mike:我不喜歡做作業! \ 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) ``` 根據 OpenAI 文件,GPT-3 模型是與文字生成的endpoint一起使用。 這就是我們在此示例中使用模型 text-davinci-003 的原因。

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

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

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

讓我們看一下這個例子中使用的引數:

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

Prompt:生成結果的觸發指令

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

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

2. 程式碼生成

程式碼生成與文字生成類似,但這裡我們使用 Codex 模型來理解和生成程式碼。

Codex 模型系列是經過自然語言和數十億行程式碼訓練的 GPT-3 系列的後代。 藉助 Codex,我們可以將註釋轉化為程式碼、重寫程式碼以提高效率等等。

讓我們使用模型 code-davinci-002 和下面的觸發指令生成 Python 程式碼。

程式碼生成一個序列,內容包含上海的溫度。 ``` 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部分重新顯示格式化一下,你就會看到規整的程式碼生成了: ``` import numpy as np

def create_temperatures(n): temperatures = np.random.uniform(low=14.0, high=20.0, size=n) return temperatures ``` 如果想開發更多,我建議你在 Playground 中測試 Codex(這裡有一些幫助你入門的示例)

3. 影象生成

我們可以使用 DALL-E 模型生成影象,我們使用影象生成endpoint並提供文字指令。

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

一隻毛茸茸的藍眼睛白貓坐在花籃裡,可愛地抬頭看著鏡頭 ``` 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) ``` 以下是我得到的圖片:

當然更有趣的是,還可以使用image edits and image variations endpoints編輯影象並生成原影象的調整。

好了,這篇文章就到這裡,希望能激發你的創造力,更多OpenAI API的使用請參考官方文件