OpenAI Python API Text Completion API 參數的說明更新

前言

這算是繼之前整理的那篇筆記: OpenAI Python API Bootcamp 第二節 關於Text Completion API 參數的說明 的續篇,本來是要在那一篇直接進行更新的,但怪的是,可能是因為版主有鎖定,已經太久的文章,不能再編輯,導致那篇文章我沒法修改,由於 OpenAI 隨著 Model 更新,API 部分也增加了不少參數,以下是我參考微軟 Azure OpenAI API 的中文說明文件而來,不過我大致比對過 OpenAI 原始的參數說明,兩者是一致的,不過前一篇,是我參考一些前輩的心得整理的,因此既有的參數部分的說明會更詳細些,有興趣的人,可以針對固定的 prompt 來調整參數,透過 Text Completion API 呼叫的實作來實驗看看參數的影響~

參數列表

參數 類型 必要項? 預設 描述
prompt 字串或陣列 選擇性 <|endoftext|> 提示您產生完成項,可編碼為字串、字串清單或權杖清單。 請注意,<|endoftext|> 是模型在定型期間看到的文件分隔符號,因此如未指定提示,模型就像是從新文件的開頭產生。
max_tokens 整數 選擇性 16 完成時要產生的權杖數目上限。 提示的權杖計數加上 max_tokens 不能超過模型的內容長度。 除了支援 4096) 的最新模型以外,大部分模型的內容長度為 2048 權杖 (。
temperature number 選擇性 1 要使用的取樣溫度,介於 0 到 2 之間。 較高值表示模型會承擔較大風險。 較具創意的應用程式請嘗試 0.9,0 (argmax sampling) 則適合答案定義完善的應用程式。 一般會建議改變這個值或 top_p,但不建議同時改變。
top_p number 選擇性 1 核取樣是溫度取樣的替代方法,在此方法中,模型會考慮包含 top_p 機率質量的權杖結果。 因此,0.1 表示只考慮組成前 10% 機率質量的權杖。 一般會建議改變這個值或溫度,但不建議同時改變。
logit_bias map 選擇性 null 修改在完成時出現指定權杖的可能性。 接受 json 物件,此物件會將權杖 (由 GPT 權杖化工具中的權杖識別碼所指定) 對應至 -100 到 100 的相關偏差值。 您可以使用此權杖化工具 (適用於 GPT-2 和 GPT-3) 將文字轉換成權杖識別碼。 在數學上,偏差會先加到模型產生的對數,再取樣。 確切的效果會因模型而異,但介於 -1 到 1 之間的值應該會降低或提高選取的可能性;而 -100 或 100 之類的值應會導致禁止選取或獨佔選取相關權杖。 例如,您可以傳遞 {“50256”: -100} 以防止產生 <|endoftext|> 權杖。
user 字串 選用 代表使用者的唯一識別碼,可協助監視和偵測濫用
n 整數 選擇性 1 每個提示要產生的完成項數量。 注意:因為此參數會產生許多完成項,所以會快速消耗權杖配額。 請慎用,並確定有合理的 max_tokens 和停止設定。
stream boolean 選擇性 False 是否要串流回部分進度。 如果設定,在有權杖可用時,權杖將會以僅由伺服器端單向傳送資料事件的形式傳送,由 data: [DONE] 訊息終止資料流。
logprobs 整數 選擇性 null 包含最可能是權杖之 logprob 的對數機率以及所選權杖。 例如,如果有 10 個 logprob,則 API 會傳回 10 個最可能的權杖清單。 API 一律會傳回取樣權杖的 logprob,因此回應中可能包含多達 logprobs+1 個元素。 這個參數不能與 搭配 gpt-35-turbo 使用。
suffix 字串 選用 null 完成插入文字之後的尾碼。
echo boolean 選擇性 False 除了完成之外,還回顯提示。 此參數不能搭配 使用 gpt-35-turbo 。
stop 字串或陣列 選擇性 null API 會停止產生更多權杖的這種序列,最多四個。 傳回的文字不會包含停止序列。
presence_penalty number 選擇性 0 介於 -2.0 和 2.0 之間的數字。 正值會根據權杖迄今為止是否出現在文字中來打壓新權杖,提高模型討論新主題的可能性。
frequency_penalty number 選擇性 0 介於 -2.0 和 2.0 之間的數字。 正值會根據權杖迄今為止在文字中的出現頻率來打壓新權杖,降低模型重複完全相同行的可能性。
best_of 整數 選擇性 1 產生 best_of 完成伺服器端,並傳回「最佳」(每個權杖具有最低對數機率的 best_of)。 結果不能串流。 搭配 n 時,best_of 控制待選完成項的數目,n 則指定傳回的數目,best_of 必須大於 n。 注意:因為此參數會產生許多完成項,所以會快速消耗權杖配額。 請慎用,並確定有合理的 max_tokens 和停止設定。 此參數不能搭配 使用 gpt-35-turbo 。

範例(Python)

Request Example Code:

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

completion = openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "user", "content": "Hello!"}
  ]
)

print(completion.choices[0].message)

Parameters

{
  "model": "gpt-3.5-turbo",
  "messages": [{"role": "user", "content": "Hello!"}]
}

Response

{
  "id": "chatcmpl-123",
  "object": "chat.completion",
  "created": 1677652288,
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": "\n\nHello there, how may I assist you today?",
    },
    "finish_reason": "stop"
  }],
  "usage": {
    "prompt_tokens": 9,
    "completion_tokens": 12,
    "total_tokens": 21
  }
}

(以上範例來自 OpenAI Text Create Completion API 官方說明 )

1個讚

這篇好棒!超級感謝。

自己的文章,過了一段時間無法修改,這是 Discourse 的預設。

因為自己是管理員(任何文章都有權限修改),之前一直不知道。直到上個月 Howard 兄問我,我才發現。

Discourse 已成立將近10年,這樣設定應該有其原因。

我再找時間看看,可不可以時間改長一點(推測可以改)。

再次感謝 Chris 兄!