OpenAI 直通
直接存取 OpenAI API 的轉送端點
概觀
| 功能 | 支援 | 備註 |
|---|---|---|
| 成本追蹤 | ✅ | Chat completions、embeddings、image generations、image edits,以及 Responses API。其他端點會被記錄,但不計入成本 |
| 記錄 | ✅ | 可跨所有整合運作 |
| 串流 | ✅ | 完整支援 |
可用端點
/openai_passthrough - 建議
專用轉送端點,可保證直接路由到 OpenAI,且不會發生衝突。
適用於:
- OpenAI Responses API (
/v1/responses) - 任何您需要保證轉送的端點
- 當
/openai路由與 LiteLLM 的原生實作衝突時
/openai - 舊版
標準轉送端點,可能會與 LiteLLM 的原生實作衝突。
注意: 某些端點例如 /openai/v1/responses,會改為路由到 LiteLLM 的原生實作,而不是 OpenAI。
WebSocket 端點預設為關閉
這兩個前綴也可以將 WebSocket 連線(例如 /openai_passthrough/v1/realtime 和 /openai/v1/responses)轉送到 OpenAI。轉送會在不讀取 frame 的情況下傳遞,因此無法檢查工作階段要求哪個模型,而且會使用 proxy 自己的 OpenAI 憑證提供服務。因此,除非 proxy 管理員明確啟用,否則會停用:
general_settings:
enable_openai_websocket_passthrough: true
在關閉狀態下,WebSocket 用戶端會收到一則 error 事件,其中會標示這項設定,並且連線會以代碼 1008 關閉。即使啟用後,只要有任何模型限制適用於該請求,也會以相同方式拒絕,無論該限制是設定在 key、其 team、呼叫者的 team membership、internal user,或 project 上。這項設定也可以透過 store_model_in_db: true、經由 POST /config/field/update 儲存在資料庫中,而每個 proxy instance 會在下一次 config 重新載入時取得它;YAML 中設定的值會優先於已儲存的值。如果只需要 model_list 中模型的 Realtime API,請改用 proxy 自己的 /v1/realtime route,這不需要明確啟用,且會強制套用 key 的模型存取權
何時使用這個?
- 對於 90% 的使用情境,您應該使用 原生 LiteLLM OpenAI 整合(
/chat/completions、/embeddings、/completions、/images、/batches等) - 使用
/openai_passthrough來呼叫 LiteLLM 尚未完整支援、較不熱門或較新的 OpenAI 端點,例如/assistants、/threads、/vector_stores、/responses
只要將 https://api.openai.com 替換為 LITELLM_PROXY_BASE_URL/openai_passthrough 即可
使用範例
需求:
請在您的環境變數中設定 OPENAI_API_KEY。
Embeddings
passthrough embeddings 請求所產生的花費會被追蹤,並歸屬到呼叫的 key,就像原生的 /embeddings route 一樣
curl http://0.0.0.0:4000/openai_passthrough/v1/embeddings \
-H "Authorization: Bearer sk-anything" \
-H "Content-Type: application/json" \
-d '{
"model": "text-embedding-3-small",
"input": "hello world"
}'
Assistants API
建立 OpenAI 用戶端
請確保您執行以下事項:
- 將
base_url指向您的LITELLM_PROXY_BASE_URL/openai_passthrough - 將您的
LITELLM_API_KEY用作api_key
import openai
client = openai.OpenAI(
base_url="http://0.0.0.0:4000/openai_passthrough", # <your-proxy-url>/openai_passthrough
api_key="sk-anything" # <your-proxy-api-key>
)
建立 Assistant
# Create an assistant
assistant = client.beta.assistants.create(
name="Math Tutor",
instructions="You are a math tutor. Help solve equations.",
model="gpt-5.6-terra",
)
建立 Thread
# Create a thread
thread = client.beta.threads.create()
將訊息新增至 Thread
# Add a message
message = client.beta.threads.messages.create(
thread_id=thread.id,
role="user",
content="Solve 3x + 11 = 14",
)
執行 Assistant
# Create a run to get the assistant's response
run = client.beta.threads.runs.create(
thread_id=thread.id,
assistant_id=assistant.id,
)
# Check run status
run_status = client.beta.threads.runs.retrieve(
thread_id=thread.id,
run_id=run.id
)
取得訊息
# List messages after the run completes
messages = client.beta.threads.messages.list(
thread_id=thread.id
)
刪除 Assistant
# Delete the assistant when done
client.beta.assistants.delete(assistant.id)