iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0
AI & Data

OpenAI 從提示工程(Prompt Engineering)到語義核心(Semantic Kernel)的實踐系列 第 9

Semantic Kernel的實踐:開發前準備-認識API及工具介面

  • 分享至 

  • xImage
  •  

前言

前一篇說明目前OpenAI上的可用模型,部份模型已被公告即將退役,因此就沒有特別再提到,接下來很重要的一件事就是,我們必須了解如何使用OpenAI的API,以及在開發過程可以幫助的工具介面。

理解OpenAI的API類型

我們聚焦在GPT模型以及ChatGPT模型,所以Whisper模型以及DALL·E不在這篇本範圍內。目前GPT的API區分兩大類,分別是:

  • Completions API(Legacy)
    適用於早期版本的模型,例如GPT-3列系的像是text-davinci-003、text-curie-001這一類的,另外GPT3.5算特例,也可以使用Completions API。Completions API的特性是,prompt並非以對話的模式提供,而是比較類似於"寫一句話,一篇文章,然後結尾是未完待續的樣子",接著GPT模型就幫你把後面未完待續的內容補齊。例如:(綠色字是由GPT模型接續生成的)

https://ithelp.ithome.com.tw/upload/images/20230924/20126569u7UPwxfr8k.png

注意:Completions API在不久的將來即將被汰除,未來將以Chat Completions API取代之。

  • Chat Completions API
    適用ChatGPT後的模型,包含像是目前最新的GPT-4模型。Chat Completions API的prompt就像對話內容一樣,以人與AI對話的情境安排prompt,進行來回的對話,並由模型產生回應訊息。

https://ithelp.ithome.com.tw/upload/images/20230924/201265698H4l1GvYiH.png

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 這兩個參數可以一起使用,以控制生成文本的多樣性和一致性,滿足特定需求。

什麼是Token數

GPT模型的Token數是指模型輸入或輸出中的標記數量。這些標記可以是詞彙中的一個單字、一個字,或甚至是一個子詞。例如,如果一句話包含10個單詞,而每個單字都被分解成一個Token,那麼這句話就包含10個Token。

不同語言計算出來的Token數通常是不同的,例如中文和英文。因為中文和英文在文字處理上有著不同的特性,在英文裡,通常一個Token對應一個單字,例如:"dog"是一個Token,"jumped"也是一個Token。而在中文世界裡,由於中文並沒有明顯的單字邊界,一個Token通常對應一個字或一個詞。 例如,"我愛你"可能會分解成三個Token:"我"、"愛"、"你",或者在其它情況下,也可以將整個"我愛你"作為一個Token。而模型的Token數是有上限的,所以當我們在使用API時,如何設定max_tokens就顯的很重要,設的太小則內容生成時就會不夠用。

ax_tokens的值是合計輸入+生成回應,並且API的計費也是以使用多少tokens來計價。不同模型價格不同,並且會區分為輸入及輸出不同價格。詳情可以參閱官方網站資料。

工具 — Playground

由於在開發LLM應用時,除了要調整Prompt還得要測試上述的API參數效果,因此我們可以善用Playground操作介面,就不用每次都要跑程式碼才能測試結果,Playground操作介面提供了對話的輸入介面,以及API參數的設定介面,因此可以同時測試Prompt及參數效果,不論是OpenAI或是Microsoft Azure OpenAI服務都有提供。

https://ithelp.ithome.com.tw/upload/images/20230924/20126569cEvaTHTJL2.png

https://ithelp.ithome.com.tw/upload/images/20230924/201265692rMOGK8vu1.png

結語

本篇說明了OpenAI的API種類,以及重要的參數,做為進入開發前的必備需知,而這些內容同時適用於Microsoft Azure OpenAI服務。

嗨,我是Ian,我喜歡分享與討論,今年跟2位朋友合著了一本ChatGPT主題書,如果你是一位開發者,這本書或許會有些幫助,https://www.tenlong.com.tw/products/9786263335189
這次的鐵人賽文章也會同時發佈於個人blog,歡迎關注我的blog : https://medium.com/@ianchen_27500


上一篇
Semantic Kernel的實踐:開發前準備-認識OpenAI與AOAI的模型
下一篇
Semantic Kernel的實踐:開發篇-沒有Semantic Kernel的LLM應用體驗
系列文
OpenAI 從提示工程(Prompt Engineering)到語義核心(Semantic Kernel)的實踐30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
hlb
iT邦新手 5 級 ‧ 2023-11-04 15:09:11

以 OpenAI 目前的做法,"jumped" 是 2 個 token,"我愛你" 是 4 個 token 喔,可以到這邊測試:
https://platform.openai.com/tokenizer

0
hlb
iT邦新手 5 級 ‧ 2023-11-04 23:06:27

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,這件設定是比較少見的。

我要留言

立即登入留言