研究 OpenAI 第二篇: 快速入門 Quickstart

研究 OpenAI 第二篇: 快速入門 Quickstart

來源:https://beta.openai.com/docs/quickstart

OpenAI已經訓練了前沿的語言模型,它們非常擅長理解和生成文本。
我們的API提供了對這些模型的訪問, 可以用來解決幾乎任何涉及處理語言的任務。

在這個快速入門教程中,你將構建一個簡單的範例應用程序。
一路上,你將學習使用API進行任何任務所必需的關鍵概念和技術,包括:

  • 內容生成

  • 摘要

  • 分類、分類和情感分析

  • 數據提取

  • 翻譯

  • 還有更多!

介紹

補全系統是我們API的核心,他提供了一個簡單的介面,非常彈性且强大。
你可以輸入一些文本作為提示,API將返回一個文本補全,
試圖匹配你給定的任何指令或情境。

-- Prompt --

Write a tagline for an ice cream shopa

-- Completion --

We serve up smiles with every scoop!

你可以把它想象成一個非常先進的自動補全 - 模型會處理你的文本提示,
並嘗試推測出下一步最有可能發生的事情。

從一個指令開始

想像一下,你想打造一個寵物名稱產生器。 因為從零開始想名字很難!

首先,您需要一個提示可以清楚地表明您想要什麼。
讓我們從一個指令開始。
提交這個提示以生成你的第一個補全。

以下請到這裡去玩。

--- Prompt ---
Suggest one name for a horse.

--- Completion ---
Lightning

不錯!現在,嘗試使你的指令更具體。

--- Prompt ---
Suggest one name for a black horse.

--- Completion ---
Midnight

如你所見, 在我們的提示中添加一些簡單的形容詞會改變補全的結果。
設計你的提示在本質上就是如何對模型進行“編程”。

添加一些示例

對於獲得好結果,把指令設計好是很重要的, 但有時候它們仍然是不夠的。
讓我們嘗試使你的指令變得更加複雜。

--- Prompt ---
Suggest three names for a horse that is a superhero.

--- Completion ---

  1. Super Stallion

  2. Captain Colt

  3. Mighty Mustang

這個補全並不是我們想要的。
這些名字很普通, 而且似乎模型並沒有捕捉到我們指令中馬的部分。
讓我們看看我們是否可以讓它想出一些更相關的建議。

在許多情況下, 同時展示和告訴模型你想要什麼是有幫助的。
在你的提示中添加範例可以幫助你表達一些規律模式或是細節。
嘗試提交以下包含了幾個範例的提示。

--- Prompt ---
Suggest three names for an animal that is a superhero.

Animal: Cat
Names: Captain Sharpclaw, Agent Fluffball, The Incredible Feline
Animal: Dog
Names: Ruff the Protector, Wonder Canine, Sir Barks-a-Lot
Animal: Horse
Names:

--- Completion ---
Super Stallion, Mighty Mare, The Magnificent Equine

這次結果更好了。 模型似乎更好地理解了我們的提示,並生成了一些更相關的建議。
請注意,這些名字不僅符合我們的要求,而且還與示例相似。
這顯示了添加示例可以更好地溝通你的要求。

調整你的設置

提示設計不是你唯一的工具。
你還可以通過調整設置來控制完成情況。
其中一個最重要的設置稱為溫度

你可能已經注意到, 如果你在上面的示例中多次提交相同的提示,
模型將始終返回相同或非常相似的完成情況。
這是因為你的溫度被設置為0。

嘗試重新提交相同的提示幾次,溫度設置為1。

--- Prompt ---
Suggest three names for an animal that is a superhero.

Animal: Cat
Names: Captain Sharpclaw, Agent Fluffball, The Incredible Feline
Animal: Dog
Names: Ruff the Protector, Wonder Canine, Sir Barks-a-Lot
Animal: Horse
Names:
--- Completion ---
Wondersteed, Sir Noblemane, Galloping Guardian

看到了嗎? 當溫度值高於0時,提交相同的提示將導致每次的補全結果不同。

請記住,模型會推測哪一些文本最有可能出現在哪些文本之後。
溫度是一個介於0和1之間的值, 實際上可以讓你控制模型在進行這些推測時應該有多自信。
降低溫度表示它將采取更少的風險,完成的情況將更精確和確定。
提高溫度將導致更多變的補全結果。

對於你的寵物名字產生器,你可能會希望能夠產生很多命名想法。
將溫度值設為0.6應該不錯。

深入了解:理解 Token 和機率

打造你的應用程式

現在你已經找到了一些好提示跟設置, 那麼就可以準備建立你的寵物名字產生器了!
我們已經寫了一些程式碼來幫助你開始- 按照下面的說明下載程式碼並運行應用程序。

以下用 Node.js 示範。

設置

如果您沒有安裝 Node.js,可以從這裡安裝它。 然後 clone 這個 repo

git clone https://github.com/openai/openai-quickstart-node.git

添加你的 API Key

切到專案目錄並複製範例的環境變量檔案。

cd openai-quickstart-node
cp .env.example .env

複製你的 API Key, 並在 .env 檔案寫到 OPENAI_API_KEY 上。

如果你目前沒有任何 API Key,請到這裡建立一個。

重要提示:使用JavaScript時,應該只在 Server端進行所有API調用,
因為在Client端瀏覽器進行調用將會暴露你的API Key。
有關更多細節,請參閱此處

運行應用程式

在轉案目錄中運行以下命令,安裝 Dependencie 並運行應用程式。

npm install
npm run dev

打開你的瀏覽器到 http://localhost:3000, 你應該會看到寵物名稱產生器!

了解程式碼

打開 openai-quickstart-node/pages/api 資料夾的generate.js
在底下,你會看到我們在上面使用的生成提示的函式。
由於用戶將會輸入他們的寵物類型, 因此它會動態替換動物提示。

function generatePrompt(animal) {
  const capitalizedAnimal = animal[0].toUpperCase() + animal.slice(1).toLowerCase();
  return `Suggest three names for an animal that is a superhero.

Animal: Cat
Names: Captain Sharpclaw, Agent Fluffball, The Incredible Feline
Animal: Dog
Names: Ruff the Protector, Wonder Canine, Sir Barks-a-Lot
Animal: ${capitalizedAnimal}
Names:`;
}

generate.js 中的第9行, 你將看到實際發送API請求的代碼。
如上所述,它使用了溫度為0.6的補全系統。

const completion = await openai.createCompletion({
  model: "text-davinci-003",
  prompt: generatePrompt(req.body.animal),
  temperature: 0.6,
});

就這樣!現在你應該對你的(超級英雄)寵物名稱產生器 會如何使用OpenAI API有了充分的理解!

結尾

這些概念和技術將有助於幫助你構建自己的應用程式。
不過,這個簡單的範例只展示了可能性的一小部分!
補全系統非常彈性,可以解決幾乎所有的語言處理任務,
包括內容生成,摘要,語義搜索,主題標記,情感分析等等。

請記住,對於大多數模型而言,
單個API請求只能處理你的提示加補全最多2,048個 Token(約1,500個單詞)。

對於更高級的任務,
你可能會發現自己希望能夠提供更多的範例或情境, 而不能只放單個提示。
在處理更高級任務時使用 微調API 是一個更好的選擇。
微調允許你提供數百甚至數千個範例,以客製化特定用途的模型。

深入了解

DeepDive1

理解 Token 和機率

我們的模型通過將文本分解為較小的單元(稱為Token)來處理文本。
Token可以是單詞、單詞塊或單個字符。

常見的單詞,如“cat”,是一個單個 Token, 而不太常見的單詞往往被分解成多個 Token。 例如,“Butterscotch”轉換成四個 Token: “but”,“ ters”,“ cot”和“ ch”。
許多Token以空格為開頭,例如“ hello”和“ bye”。

給定一些文本,模型會決定下一個最可能的Token是什麼。
例如,“Horses are my favorite” 之後最有可能可以接的 Token 就是“ animal”。

這就是溫度的作用。
如果你將此溫度設置為0並重複提交相同提示4次,
模型將始終返回“ animal”, 因為它具有最高的概率。
如果你增加溫度,它就會冒更大的風險並開始考慮更低概率的 Token。

對於希望輸出結果準確的任務,通常設置較低的溫度比較好。
若是在希望多樣性或是創造性質的任務中,
或者如果你希望生成多個版本給你的用戶或是專家選擇,
那更高的溫度可能更有用處。

DeepDive2

模型與價位

我們提供了一系列具有不同功能和價格模型
在本教程中,我們使用了text-davinci-003, 它是我們最能幹的自然語言模型。
我們建議在實驗時使用這個模型,因為它會產生最佳結果。
一旦你了解如何使用,
你也可以看看其他模型是否可以以更低的延遲和成本產生相同的結果。

在單次請求中可以處理的總 Token 數(提示加補全) 不能超過模型的最大上下文長度。
對於大多數模型而言,就是2,048個 Token 或 約1,500個單詞。
作為一個粗略的經驗法則,1個 Token 大約是4個字符或0.75個英文單詞。

價格是按使用量收費的, 每 1000 個 Token 收費 1 元,
前 3 個月內可享有 18 美元的免費額度。
到這裡了解更多

註解

註1

溫度是一個衡量模型偏離正常輸出的程度的參數。
如果溫度值較高,模型就會生成更為創新和不確定的輸出。
相反,如果溫度值較低,模型就會生成更為預測和可靠的輸出。

Did you find this article valuable?

Support Hello Kayac by becoming a sponsor. Any amount is appreciated!