OpenAI文本生成模型指南

  • 1339字
  • 7分鐘
  • 2024-06-27

OpenAI的文本生成模型(通常稱為生成預訓練變換器或大型語言模型)已經訓練成能夠理解自然語言、代碼和圖像。這些模型根據輸入生成文本輸出。輸入通常被稱為“提示”(prompts)。設計提示本質上是如何“編程”大型語言模型,通常通過提供指令來實現。

應用場景

使用OpenAI的文本生成模型,您可以構建以下應用程序:

  • 起草文檔
  • 編寫計算機代碼
  • 回答關於知識庫的問題
  • 分析文本
  • 為軟件提供自然語言接口
  • 各種學科的輔導
  • 翻譯語言
  • 模擬遊戲角色

隨著gpt-4-turbo的發布,現在還可以構建處理和理解圖像的系統。

如何使用模型

要通過OpenAI API使用這些模型,需要發送包含輸入和API密鑰的請求,並接收包含模型輸出的響應。最新的模型gpt-4o和gpt-4等可以通過Chat Completions API訪問。

模型和API

模型API
新模型(2023年及以後)gpt-4o, gpt-4, gpt-3.5-turbo https://api.openai.com/v1/chat/completions
更新的傳統模型(2023年)gpt-3.5-turbo-instruct, babbage-002, davinci-002 https://api.openai.com/v1/completions

您可以在聊天操場中試驗各種模型。如果不確定使用哪個模型,可以使用gpt-3.5-turbo或gpt-4o。

Chat Completions API

聊天模型接受一系列消息作為輸入,並返回由模型生成的消息作為輸出。雖然聊天格式設計為便於多輪對話,但它同樣適用於沒有任何對話的單輪任務。

示例調用

1
from openai import OpenAI
2
client = OpenAI()
3
4
response = client.chat.completions.create(
5
model="gpt-3.5-turbo",
6
messages=[
7
{"role": "system", "content": "You are a helpful assistant."},
8
{"role": "user", "content": "Who won the world series in 2020?"},
9
{"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
10
{"role": "user", "content": "Where was it played?"}
11
]
12
)

主要輸入是messages參數。消息必須是一個消息對象數組,每個對象都有一個角色(“system”、“user”或“assistant”)和內容。對話可以短至一條消息或多輪往返。

JSON模式

常見的用法是指示模型始終返回適合您用例的JSON對象,通過在系統消息中指定這一點。可以通過設置response_format{ "type": "json_object" }來啟用JSON模式。

示例調用

1
from openai import OpenAI
2
client = OpenAI()
3
4
response = client.chat.completions.create(
5
model="gpt-3.5-turbo-0125",
6
response_format={ "type": "json_object" },
7
messages=[
8
{"role": "system", "content": "You are a helpful assistant designed to output JSON."},
9
{"role": "user", "content": "Who won the world series in 2020?"}
10
]
11
)
12
print(response.choices[0].message.content)

在此示例中,響應包含一個JSON對象,如下所示:

1
"content": "{\"winner\": \"Los Angeles Dodgers\"}"

管理Token

語言模型以稱為token的塊來讀取和寫入文本。在英語中,一個token可以短至一個字符或長至一個單詞(例如,“a”或“apple”)。API調用中的總token數影響:

  • API調用的成本,因為您按token付費
  • API調用的時間,因為寫入更多token需要更多時間
  • API調用是否成功,因為總token數必須低於模型的最大限制(對於gpt-3.5-turbo為4097個token)

參數詳情

頻率和存在懲罰

frequencypresence懲罰參數可以用來減少採樣重複token序列的可能性。合理的懲罰係數值大約在0.1到1之間,如果目的是稍微減少重複樣本。如果目的是強烈抑制重複,則可以將係數增加到2,但這可能顯著降低樣本質量。

Completions API

completions API端點在2023年7月進行了最終更新,並且與新的chat completions端點有不同的接口。輸入是一段自由格式的文本字符串,稱為提示(prompt)。

示例調用

1
from openai import OpenAI
2
client = OpenAI()
3
4
response = client.completions.create(
5
model="gpt-3.5-turbo-instruct",
6
prompt="Write a tagline for an ice cream shop."
7
)

Chat Completions vs. Completions

Chat Completions格式可以通過構造使用單個用戶消息的請求,使其類似於completions格式。區別在於底層模型的可用性。chat completions API是功能最強大的模型(gpt-4o)和最具成本效益的模型(gpt-3.5-turbo)的接口。

哪個模型適合?

我們通常建議您使用gpt-4o或gpt-3.5-turbo。使用哪個取決於您使用模型的任務的複雜性。gpt-4o在廣泛的評估中表現更好,特別是在仔細遵循複雜指令方面。相比之下,gpt-3.5-turbo更可能只遵循複雜多部分指令的一部分。gpt-4o不太可能編造信息,這種行為被稱為“幻覺”。gpt-4o還有一個更大的上下文窗口,最大為128,000個token,而gpt-3.5-turbo為4,096個token。然而,gpt-3.5-turbo返回輸出的延遲較低,每個token的成本也低得多。

常見問題

如何設置溫度參數?

溫度值較低(例如0.2)會產生更一致的輸出,而較高的溫度值(例如1.0)會生成更多樣化和創造性的結果。根據您的具體應用選擇溫度值,以在連貫性和創造性之間取得平衡。溫度範圍從0到2。

最新模型是否可以進行微調?

目前可以微調gpt-3.5-turbo和基礎模型(babbage-002和davinci-002)。

應該使用ChatGPT還是API?

ChatGPT為模型提供了一個聊天界面,並內置了一系列功能,如集成瀏覽、代碼執行、插件等。相比之下,使用OpenAI的API提供了更多的靈活性,但需要編寫代碼或以編程方式向模型發送請求。