更新公告: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%

  • 原本價格為0.0004/1k token0.0004/1k\ {token}
  • 新價格為0.0001/1k token0.0001/1k\ {token}

GPT3.5模型降價25%

  • 原本價格為0.002/1k token0.002/1k\ {token}
  • 新價格為0.0015/1k token0.0015/1k\ {token}

新的GPT3.5(16k版本)模型價格

新的gpt-3.5-turbo-16k模型的價格,是輸入與輸出分開計算的

  • 輸入每1000個token,花費0.0030.003美元
  • 輸出每1000個token,花費0.0040.004美援

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套件進行解析就會得到我們要的結果了~

延伸閱讀