針對大型 Base64 資料的記憶體優化機制

在 @ai-sdk/[email protected] 版本中,createJsonResponseHandler 函數新增了一個名為 experimental_binaryFields 的實驗性選項。

當供應商傳回的 JSON 回應包含大型 Base64 字串(例如圖片或檔案資料)時,開發者可以透過此選項列出這些資料在 JSON 結構中的路徑。

一旦指定了相關路徑,系統將改用串流方式讀取回應內容,並在數據到達的過程中即時處理。

減少記憶體副本與佔用空間的技術細節

對於長度達到或超過 64 KiB 的標準 Base64 字串,系統會將其直接解碼為 Uint8Array 格式。

這種處理方式避免了傳統做法中在記憶體裡同時保留約四份資料副本的情況,這些副本通常包括原始區塊、連接後的位元組、文字內容以及解析後的字串。

為了節省資源,rawValue、驗證錯誤訊息以及 APICallError.responseBody 屬性中將不再包含完整的數據內容,而是替換為一個簡短的佔位符字串。

向後相容性與相關函數調整

未設定 experimental_binaryFields 選項的處理程序將維持原有的行為模式,不受此次更新影響。

此外,readResponseWithSizeLimit 函數現在接受一個可選的 onChunk 回調參數。

透過這個回調函數,開發者可以接收每一個數據區塊進行處理,而不需要像過去那樣將所有區塊收集起來後再統一操作。