Skip to Content
API 參考供應商路由

供應商路由

一個模型通常由多個供應商承載,provider.type 用於將請求鎖定到其中一個。有哪些供應商、以及為什麼要指定,見供應商路由;本頁是各協議的欄位契約。

欄位位置

該欄位在各協議下的位置並不一致:

協議 / 端點請求主體請求標頭
OpenAI Chat Completions · POST /v1/chat/completionsextra_body.provider.typeX-OfoxAI-Provider-Type
OpenAI Responses · POST /v1/responsesextra_body.provider.typeX-OfoxAI-Provider-Type
OpenAI Images · POST /v1/images/generationsextra_body.provider.typeX-OfoxAI-Provider-Type
Anthropic Messages · POST /anthropic/v1/messagesextra_body.provider.typeX-OfoxAI-Provider-Type
Gemini generateContent · POST /gemini/v1beta/…靜默忽略X-OfoxAI-Provider-Type
Video API · POST /v1/videos最上層 provider.type

生圖模型中目前只有 openai/gpt-image-2 由多個供應商承載(azure_foundryopenai),其餘均為單一供應商,指定其他供應商會回傳 400 provider_type_unavailable。另需注意 Gemini 系生圖模型有兩個協議入口 —— 走 /v1/images/generations 時請求主體寫法有效,走 Gemini 原生 generateContent 時會被忽略。

透過請求主體傳遞

extra_body 需作為 JSON 請求主體中的字面量鍵存在,provider 巢狀於其內:

Terminal
curl https://api.ofox.io/v1/chat/completions \ -H "Authorization: Bearer $OFOX_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "anthropic/claude-sonnet-5", "messages": [{ "role": "user", "content": "..." }], "extra_body": { "provider": { "type": "bedrock" } } }'

使用官方 OpenAI SDK 時,extra_body 需作為請求主體中的字面量鍵存在。TypeScript SDK 在參數物件中直接書寫 extra_body 即可;Python SDK 的 extra_body= 參數會將其內容合併至請求主體最上層,因此需額外巢狀一層,或改用請求標頭傳遞。

Gemini 原生協議會忽略請求主體中的 extra_body.provider —— 請求正常回傳,約束不生效,且沒有任何錯誤。該協議請改用下方的請求標頭。

透過請求標頭傳遞

X-OfoxAI-Provider-Type全部文字協議上均生效(含 Gemini),適合無法修改請求主體的接入方式:

Terminal
curl https://api.ofox.io/gemini/v1beta/models/google/gemini-3.1-flash-lite:generateContent \ -H "Authorization: Bearer $OFOX_API_KEY" \ -H "X-OfoxAI-Provider-Type: vertex" \ -H "Content-Type: application/json" \ -d '{ "contents": [{ "parts": [{ "text": "..." }] }] }'

在兩者都支援的協議上,請求標頭與請求主體欄位等價。Video API 沒有請求標頭寫法,見 Video API · 供應商路由

錯誤

error.type觸發條件
invalid_provider_type取值不是供應商名稱:拼寫錯誤,或使用了已淘汰的寫法。
provider_type_unavailable供應商存在,但未承載該模型。錯誤訊息中會一併列出承載該模型的供應商。

可以指定哪些供應商

完整清單,以及如何查詢某個模型由哪些供應商承載,見供應商路由

Last updated on