OpenAI開發者福音! API上線結構化輸出功能,新版GPT-4o響應達100%滿分

智東西編譯 黃心如編輯 李水青

智東西8月9日消息,OpenAI公司於8月6日宣佈,在其API中新增了結構化輸出功能,這標誌着OpenAI現在能夠根據開發者提供的JSON模式,準確生成符合要求的輸出結果。官方還宣佈,藉助這一功能,新推出的gpt-4o-2024-08-06模型在評估中達到了100%的準確率,完美匹配了預期的輸出模式。

JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,易於被人閱讀和編寫,同時也易於被機器解析和生成。去年在DevDay上,OpenAI引入了JSON模式助開發者構建應用,本次新的結構化輸出功能將進一步改善模型與JSON衝突的情況,從而減少“幻覺”現象和降低輸出成本。

一、結構化輸出功能API上線,JSON準確率100%

由非結構化輸入得到結構化輸出數據是當今應用中AI的核心用例之一。開發人員使用OpenAI API構建了功能強大的助手,這些助手能夠通過函數調用獲取數據、回答問題、提取結構化數據並構建多步驟的智能工作流程,從而使大型語言模型(LLM)能夠有效行動。長期以來,開發者通過開源工具、提示工程和反覆請求來解決LLM在此方面的限制,以確保模型輸出符合系統的要求。結構化輸出通過訓練模型更好地理解複雜模式,並讓OpenAI模型遵循開發者提供的模式,很好地解決了這一難題。

OpenAI公司跟蹤評估了複雜JSON模式,帶有結構化輸出的新模型gpt-4o-2024-08-06獲得了100%的滿分成績;相比之下,gpt-4-0613得分不到40%。

▲gpt-4o-2024-08-06實現了100%的可靠性(圖源:OpenAI)

OpenAI公司宣佈,結構化輸出功能現已在API中正式上線。所有支持函數調用的模型均可實現此功能,包括最新的gpt-4o和gpt-4o-mini模型,以及gpt-4-0613和gpt-3.5-turbo-0613等微調模型。該功能可在Chat Completions API、Assistants API和Batch API中使用,併兼容視覺輸入。

二、雙形式創新:結構化輸出攜手原生SDK

OpenAI公司在API中以兩種新形式引入了結構化輸出功能:

1.函數調用:通過在函數定義中設置“strict: true”即可通過工具獲得結構化輸出。此功能適用於所有支持工具的模型,包括gpt-4-0613和gpt-3.5-turbo-0613及更高版本。啓用結構化輸出後,模型輸出將與提供的工具定義匹配。

▲(圖源:OpenAI)

2.“response_format”參數的新選項:開發人員現在可以通過結構化輸入提供JSON模式,這是“response_format”參數的新選項。當模型不調用工具而是以結構化方式響應用戶時,這將更加高效。此功能適用於OpenAI最新的GPT-4o模型:今天發佈的gpt-4o-2024-08-06和gpt-4o-mini-2024-07-18。當“response_format”提供 “strict: true”參數時,模型輸出將與提供的模式匹配。

▲(圖源:OpenAI)

OpenAI的Python和Node SDK已更新,提供對原生結構化輸出的支持。通過將架構作爲工具或響應格式提供,開發者可以輕鬆地使用 “Pydantic”或“Zod”對象,OpenAI的SDK將處理數據類型轉換爲受支持的JSON架構,自動將JSON響應反序列化爲類型化的數據結構,並在出現拒絕時進行分析。

以下示例展示了使用函數調用對結構化輸出的本機支持:

▲(圖源:OpenAI)

開發人員經常使用OpenAI的模型爲各種用例生成結構化數據。

一些其他示例包括:

1、根據用戶意圖動態生成用戶界面

2、將最終答案與支持推理或附加評論分開

3、從非結構化數據中提取結構化數據

新的結構化輸出功能將嚴格遵守OpenAI的安全政策,同時仍允許模型拒絕不安全的請求。API響應中新增了一個拒絕字符串值,開發人員可以通過編程方式檢測模型是否生成了拒絕指令。

當響應不包含拒絕且模型的響應沒有被過早中斷時,模型將可靠地生成與提供的架構匹配的有效JSON模式。

三、技術揭秘:結構化輸出的雙重約束機制

OpenAI採用了雙重方法來提高模型輸出與JSON模式匹配的可靠性。首先,OpenAI對其最新的模型GPT-4o-2024-08-06進行了訓練,使其能夠理解複雜的模式,並生成最適配的輸出。

其次,OpenAI採用了受限解碼技術。儘管模型的性能顯著提升,在基準測試中達到93%的準確性,但模型的固有不確定性仍然存在。爲確保開發者構建應用的穩健性,OpenAI提供了一種確定性方法來約束模型輸出,實現100%的可靠性。

默認情況下,模型在生成輸出時沒有約束,可能從詞彙表中選擇任何標記。這種靈活性可能導致模型生成無效的JSON字符。爲了避免這種錯誤,OpenAI使用動態受限解碼方法,強制模型僅選擇符合提供模式的有效標記。在每次生成標記後,推理引擎根據前一個標記和模式規則確定下一個有效標記。這一方法通過屏蔽無效標記的可能性,確保生成的輸出始終符合提供的模式。

實現這種約束可能具有挑戰性,因爲有效標記在整個模型輸出中是動態變化的。例如,初始有效標記包括 {、{” 和 {\n等,但一旦模型生成了 {“val,那麼 { 就不再是有效標記。因此,OpenAI需要在生成每個標記後動態確定哪些標記有效,而不是在響應開始時預先確定。

爲此,OpenAI將提供的JSON模式轉換爲上下文無關語法(CFG)。CFG是一組定義語言的有效規則,開發者可以將JSON和JSON模式視爲具有規則的特定語言。類似於英語中沒有動詞的句子是無效的,JSON中帶有尾隨逗號也是無效的。

因此,對於每個JSON模式,OpenAI計算出代表該模式的語法,並在採樣過程中高效地訪問預處理組件。這就是爲什麼首次使用新模式可能需要額外處理時間的原因——OpenAI必須對模式進行預處理,以生成可以在採樣中有效使用的組件。

在採樣時,OpenAI的推理引擎將根據先前生成的標記和語法規則(指示下一個標記是否有效)確定下一個生成的標記。OpenAI使用標記列表來屏蔽無效標記,將無效標記的概率降至0。由於模式已被預處理,OpenAI可以使用緩存的數據結構高效地完成此操作,同時將延遲開銷降至最低。

除了CFG方法,有限狀態機(FSM)或正則表達式也可以用於受限解碼。它們的功能類似,都會在生成每個標記後動態更新哪些標記是有效的。但值得注意的是,CFG方法能夠表達比FSM更廣泛的語言類別。對於簡單模式,這種差別可能不明顯。然而,OpenAI發現對於涉及嵌套或遞歸數據結構的複雜模式,CFG方法表現更爲出色。例如,FSM通常無法表達遞歸類型,因此可能難以匹配深度嵌套JSON中的括號,而支持遞歸模式的JSON模式在OpenAI API上已得到實現,但FSM方法難以處理。

▲(圖源:OpenAI)

請注意,每個UI元素都可以有任意子元素,這些子元素以遞歸方式引用根模式,這種靈活性是CFG方法所能提供的。

四、邊界探索:結構化輸出的部分限制

在享受結構化輸出帶來的高效與精準的同時,我們也需要清楚地認識到其存在的限制,以便更好地指導開發和應用。使用結構化輸出時,開發者需注意以下限制:

結語:新增結構化輸出,助力降本增效

與gpt-4o-2024-05-13版本相比,gpt-4o-2024-08-06版本在成本上更具優勢。開發者可以節省50%的輸入成本,每百萬輸入令牌相當於2.50美元(約合人民幣17.95元);輸出成本節省33%,每百萬輸出令牌相當於10.00美元(約合人民幣71.81元)。

來源:OpenAI