更新公告:https://openai.com/blog/function-calling-and-other-api-updates
重點整理
- GPT3.5降價25%、Embedding降價75%
- GPT3.5新增16k-token版本(原本最大輸入為4k-token
- GPT3.5/GPT4都新增格式化輸出功能
- 讓GPT給出格式化回覆【程式範例】
模型資訊
棄用舊模型
在使用API的時候,有分成會持續更新和特定時間版本的模型,其中以下三個模型只會支援到今年9/13為止:
gpt-3.5-turbo-0301
gpt-4-0314
gpt-4-32k-0314
以下模型會在6/27自動更新成本次新版(6/13)的模型:
gpt-4
gpt-4-32k
gpt-3.5-turbo
若需要在那之前使用,需要手動指定模型版本:
gpt-4-0613
gpt-4-32k-0613
gpt-3.5-turbo-0613
新增更長的GPT3.5模型
舊的GPT3.5模型最長只能支援4000token(包含了輸入與輸出),若需要有更長的上下文關係原本只能使用超級貴的GPT4(8k/32k),但對於某些簡單的任務就直接用GPT4未免顯得有些「殺雞用牛刀」了
而這次推出的gpt-3.5-turbo-16k
則是非常好的填補了「長輸入但簡單的任務」的空缺!
新增格式化輸出功能
在之前的ChatGPT 提示詞工程學中有提到,可以透過要求模型以特定格式(例如JSON)進行回應,以方便我們解析回答。
然而這種方式有些時候其實並沒有那麼的穩定,例如模型可能會輸出一些額外的解釋、不符合語法的JSON等。
而現在官方則是將這個功能內建到API當中,我們可以透過直接指定一個函數的格式如send_email(to: string, body: string)
來獲得一個確定的JSON格式了!
價格資訊
Embedding模型降價75%
- 原本價格為
- 新價格為
GPT3.5模型降價25%
- 原本價格為
- 新價格為
新的GPT3.5(16k版本)模型價格
新的gpt-3.5-turbo-16k
模型的價格,是輸入與輸出分開計算的
- 輸入每1000個token,花費美元
- 輸出每1000個token,花費美援
Token數量換算
1000token大概等於:750英文單字 or 350中文
這篇文章到這個小節為止(含Markdown格式符號)共1772個Token,提供參考。
實作範例
完整程式範例在這邊
基本上要讓GPT給一個格式化的回覆,我們需要透過給它一個額外的functions
輸入來讓它知道要提取出怎樣的資訊,例如
messages = [
{"role": "system", "content": "你是一個會將輸入的內容中的物品數量提取出來的機器人。"},
{"role": "user", "content": "我有3個香蕉和5個蘋果。"},
]
functions = [
{
"name": "get_items_number",
"description": "提取物品數量",
"parameters": {
"type": "object",
"properties":{
"banana":{
"type": "integer",
"description": "香蕉數量"
},
"apple":{
"type": "integer",
"description": "蘋果數量"
}
},
"required": ["banana", "apple"]
}
}
]
response = chat_completion_request(messages, functions)
這個時候如果模型正確的判讀了它要做的事情,我們的finish_reason
就會是function_call
,範例的response如下:
{'id': 'chatcmpl-7RM85zwMHFCaYZTuTJdwl1ITp0hl4',
'object': 'chat.completion',
'created': 1686754277,
'model': 'gpt-3.5-turbo-0613',
'choices': [{'index': 0,
'message': {'role': 'assistant',
'content': None,
'function_call': {'name': 'get_items_number',
'arguments': '{\n "banana": 3,\n "apple": 5\n}'}},
'finish_reason': 'function_call'}],
'usage': {'prompt_tokens': 127, 'completion_tokens': 23, 'total_tokens': 150}}
我們可以看到說最後的arguments
那邊是給了一個格式化的回覆,這邊可以直接使用json
套件進行解析就會得到我們要的結果了~