問題
有人說使用 gpt-4o, gpt-4.1 這種多模態 LLM,呼叫 ChatCompletion API 給 Image 時,
如果給 Image 的 Base64 內容,所花的 Token 數會比給 Image URL 來得多很多 (´− `) ンー (¬_¬)
是因為 Image 的 Base64 字串長度比 Image URL 的字串內容多很多。
所以,如果要給圖檔時,要想儘辦法讓 OpenAI API 可以讀取到圖檔,
也就是要允許圖檔可以讓 internet 連到 !!!
Image 的 Base64 內容,所花的 Token 數會比給 Image URL 來得多很多,這是真的嗎?
以下我們就來驗證看看,
測試
使用 Semantic Kernel C#,使用 ImageContent
分別給 url 及 file bytes (base64),程式如下,
1 | IKernelBuilder builder = Kernel.CreateBuilder(); |
- 註:
new ImageContent(imageBytes, "image/png")
中的imageBytes
會被轉成 Base64 字串(DataEncodingHelpers.cs),如下程式,
1 | public static string CreateDataUri(BinaryData bytes, string bytesMediaType) |
程式 Log 出來的輸入 Token 是 2,456 個,如下圖:

從 OpenAI 的 Log 來看,2 次的 Input Token 都是 2,456 個,跟我們程式 Log 出來的結果相同,如下圖:

總結
使用多模態 LLM,給 Image 的 Url 或是給 Base64 字串,所花費的 Input Token 數是一樣的!
差別就在於 Post API 時的 Payload 大小而已。
如果是企業內的圖檔,建議使用 Base64 的方式,也不會有圖檔要對外的問題。
最後,再強調一次,
使用多模態 LLM,給 Image 的 Url 或是給 Base64 字串,所花費的 Input Token 數是一樣的 (>人<)
參考資源
Multi-modal chat completion
DataEncodingHelpers.cs - CreateDataUri