前一篇說明目前OpenAI上的可用模型,部份模型已被公告即將退役,因此就沒有特別再提到,接下來很重要的一件事就是,我們必須了解如何使用OpenAI的API,以及在開發過程可以幫助的工具介面。
我們聚焦在GPT模型以及ChatGPT模型,所以Whisper模型以及DALL·E不在這篇本範圍內。目前GPT的API區分兩大類,分別是:
注意:Completions API在不久的將來即將被汰除,未來將以Chat Completions API取代之。
temperature
值介於0和2之間,控制模型輸出的隨機性,預設值為1,較高的值會讓模型每次回應相同問題時,內容變化性會變多(隨機性增加),因此若要控制每次回答的內容比較一致,那麼值就要調降,例如:0.2
top_p
與temperature參數作用類似,用於控制模型生成文本的機率分佈,top_p參數的值介於0和1之間,通常設定在0.1到0.9之間。當我們向模型發送文本生成請求時,模型會考慮到這個參數,決定下一個詞彙的機率。如果設定較高的top_p值,模型會傾向於選擇更高機率的詞彙,適合用於產生較穩定常見或精準的文本內容。相反,如果將top_p值設定得較低,模型會更容易選擇不太常見的詞彙,適合用於產生更具創意的文本內容。
temperature與top_p通常不建議一起調整,而是2擇1調整。
n
控制模型要生成幾個文本內容,預設值1。
max_tokens
輸入和生成合計內容總長度,最大限制為模型本身的上下文長度限制,例如如果選擇的模型是gpt-4-32k模型,該模型的token上限為32k,因此這時候max_tokens參數最大值就不得超過32k,至於什麼是Token數本文下面會說明。
presence_penalty
存在懲罰係數,主要影響生成文本中與輸入文本相關的詞彙,較高的值會更貼近輸入文本,低的值會引入更多不相關的短語。
frequency_penalty
頻率懲罰係數,主要影響生成文本中已知詞彙的使用頻率,較高的值會導致更多重複,低的值會增加多樣。
frequency_penalty 與 presence_penalty 這兩個參數可以一起使用,以控制生成文本的多樣性和一致性,滿足特定需求。
GPT模型的Token數是指模型輸入或輸出中的標記數量。這些標記可以是詞彙中的一個單字、一個字,或甚至是一個子詞。例如,如果一句話包含10個單詞,而每個單字都被分解成一個Token,那麼這句話就包含10個Token。
不同語言計算出來的Token數通常是不同的,例如中文和英文。因為中文和英文在文字處理上有著不同的特性,在英文裡,通常一個Token對應一個單字,例如:"dog"是一個Token,"jumped"也是一個Token。而在中文世界裡,由於中文並沒有明顯的單字邊界,一個Token通常對應一個字或一個詞。 例如,"我愛你"可能會分解成三個Token:"我"、"愛"、"你",或者在其它情況下,也可以將整個"我愛你"作為一個Token。而模型的Token數是有上限的,所以當我們在使用API時,如何設定max_tokens就顯的很重要,設的太小則內容生成時就會不夠用。
ax_tokens的值是合計輸入+生成回應,並且API的計費也是以使用多少tokens來計價。不同模型價格不同,並且會區分為輸入及輸出不同價格。詳情可以參閱官方網站資料。
由於在開發LLM應用時,除了要調整Prompt還得要測試上述的API參數效果,因此我們可以善用Playground操作介面,就不用每次都要跑程式碼才能測試結果,Playground操作介面提供了對話的輸入介面,以及API參數的設定介面,因此可以同時測試Prompt及參數效果,不論是OpenAI或是Microsoft Azure OpenAI服務都有提供。
本篇說明了OpenAI的API種類,以及重要的參數,做為進入開發前的必備需知,而這些內容同時適用於Microsoft Azure OpenAI服務。
嗨,我是Ian,我喜歡分享與討論,今年跟2位朋友合著了一本ChatGPT主題書,如果你是一位開發者,這本書或許會有些幫助,https://www.tenlong.com.tw/products/9786263335189
這次的鐵人賽文章也會同時發佈於個人blog,歡迎關注我的blog : https://medium.com/@ianchen_27500
以 OpenAI 目前的做法,"jumped" 是 2 個 token,"我愛你" 是 4 個 token 喔,可以到這邊測試:
https://platform.openai.com/tokenizer
Top P 的說明要做一點更正。
Top P sampling 是一種用於文本生成模型的機率抽樣策略,決定如何生成下一個 token。它透過 top_p
這個累積機率閾值來工作。該策略選擇累積機率達到或超過 top_p
閾值的 token 子集,而不是所有可能的 token。
例如,當 top_p
設定為 0.1(或 10%)時,模型會從具有最高機率的 token 開始,並繼續添加 token 直到這些 token 的累積機率達到 10%。此時,只有這些 token 會被考慮用於生成下一個 token,從而過濾掉那些機率較低的 token。
舉一個簡單的例子,如果模型預測的下一個 token 的機率分布是 A=50%,B=20%,C=15%,D=10%,E=5%,設定 top_p
為 0.6,那麼只有 A、B 和 C 會被考慮在內,因為它們的累積機率是 50% + 20% + 15% = 85%,這已經超過了設定的閾值 60%。
在文本生成中,降低 top_p
的值通常會導致模型生成更加穩定和連貫的文本,但可能會減少文本的多樣性和創造性。
此外,你後面文章的 top_p 設定成 0,這件設定是比較少見的。