DeepSeek API SDK:使用 OpenAI SDK 並切換端點
DeepSeek API SDK 設定不需要安裝特殊的用戶端:DeepSeek 風格的 API 遵循 OpenAI 格式,因此 OpenAI SDK 可搭配不同的 Base URL 使用。這項事實也讓你只需更改三個值即可切換至其他端點。

重點摘要
- OpenAI Python 和 Node SDK 可與任何 OpenAI 相容的端點搭配使用;你只需更改 Base URL、金鑰和模型名稱。
- 將這三個值保留在環境變數中,這樣切換端點就不需要編輯程式碼。
- 對於純聊天、串流輸出和函式呼叫,切換是安全的,但在依賴特定模型的功能之前請先進行測試。
- 針對此端點,請使用 https://api.deepseekapi.top/v1 與模型 ID uncensored。
為什麼 OpenAI SDK 就是 DeepSeek API SDK
當人們搜尋 DeepSeek API SDK 時,他們期望看到一個帶有廠商名稱的套件。實際上,DeepSeek 的文件說明透過具有不同 base URL 的 OpenAI SDK 呼叫其 API,因為 API 遵循 OpenAI 的請求和回應格式。請查看他們目前文件中的確切 base URL 和模型名稱;他們是該服務的權威。
這帶來了實用的後果。任何針對 OpenAI 用戶端程式庫編寫的程式碼都可以與任何實作相同端點的伺服器通訊,此處為 POST /v1/chat/completions、POST /v1/responses 和 GET /v1/models。在不同供應商之間移動變成僅需更改設定,而非重新編寫程式碼。本文的其餘部分將展示 Python、Node 和 curl 中的模式,以及一種使切換變得輕而易舉的結構。
Python 設定
安裝官方套件並將其指向端點:
pip install openai
from openai import OpenAI
client = OpenAI(
base_url="https://api.deepseekapi.top/v1",
api_key="YOUR_KEY",
)
resp = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": "You are a concise technical assistant."},
{"role": "user", "content": "Explain idempotency in two sentences."},
],
)
print(resp.choices[0].message.content)
print(resp.usage)
在 API 金鑰頁面取得金鑰。新用戶可一鍵領取 $0.50 的試用額度,無需信用卡。DeepSeek API Python 文章更深入介紹此語言,包含錯誤處理。
Node.js 設定
npm install openai
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.deepseekapi.top/v1",
apiKey: process.env.API_KEY,
});
const stream = await client.chat.completions.create({
model: "uncensored",
stream: true,
messages: [{ role: "user", content: "List four uses of a message queue." }],
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
模式相同:Base URL、金鑰、模型。串流輸出會傳回 Server-Sent Events,程式庫會將其轉換為非同步迭代器。函式呼叫遵循與其他 OpenAI 相容 API 相同的架構:傳遞 tools,讀取串流的 tool_calls,並傳回 role: "tool" 訊息。
讓端點可切換
不要將這三個值寫死。從環境變數中讀取它們,並將用戶端建立包裝在一個函式中。然後,從一個端點移動到另一個端點意味著只需編輯 .env 檔案,而不是原始碼。
import os
from openai import OpenAI
def make_client():
return OpenAI(
base_url=os.environ.get("LLM_BASE_URL", "https://api.deepseekapi.top/v1"),
api_key=os.environ["LLM_API_KEY"],
)
MODEL = os.environ.get("LLM_MODEL", "uncensored")
def ask(prompt: str) -> str:
r = make_client().chat.completions.create(
model=MODEL,
messages=[{"role": "user", "content": prompt}],
temperature=0.7,
)
return r.choices[0].message.content
現在,不同的供應商只需要三個環境變數。官方 SDK 在某些版本中也會讀取 OPENAI_API_BASE 和 OPENAI_API_KEY,但明確的變數更清晰,並在同時向多個供應商發送請求時避免意外。
如果你使用 TypeScript 或其他語言,概念是一樣的:一個工廠函數、三個變數,程式碼庫中沒有散落的供應商名稱。一個常見的錯誤是讓供應商名稱洩漏到函數名稱、日誌訊息和變數名稱中,這使得後續的切換比必要的更困難。以工作名稱(ask、summarise)命名事物,而不是供應商。
保留一個小測試,透過 ask() 發送一個固定的提示詞,並檢查是否有非空白的回答。每次端點變更後執行它;它可以在幾秒內捕捉到錯誤的 URL 和金鑰。
切換時哪些保持不變,哪些會改變
| 項目 | 保持不變 | 可能會改變 |
|---|---|---|
| 請求結構 | messages、roles、temperature、top_p、stop | 供應商不支援的選用參數 |
| 串流輸出 | 帶有資料區塊的 SSE | 用量在串流中出現的位置 |
| 函式呼叫 | tools、tool_choice、tool_calls | 模型遵循結構的程度 |
| 模型名稱 | 必要欄位 | 值本身:此處為 uncensored |
| 上下文視窗 | 提示詞加上補全 | 大小:此處為 100,000 個 token |
| 行為 | 聊天格式 | 風格、優勢、拒絕行為 |
最後一行是關鍵。端點在協定層級相容,而非行為層級相容。兩個供應商可以接受相同的請求,但給出截然不同的回答。此處的模型是由獨立供應商提供的單一開放權重模型,經過微調以在有合法成人用途的情況下無審查地回答,它並非 DeepSeek 或其他實驗室的官方 API。請重新測試你為其他模型調整過的提示詞。
此端點具有和不具有的功能
- 支援:聊天完成、Responses 格式、模型列表、串流輸出、函式呼叫、JSON 模式(
response_format設為json_object),以及 temperature、top_p、stop、seed 和懲罰項的透傳。 - 未提供:圖像、音訊或影片生成、嵌入、微調。
- 限制:100,000 token 上下文視窗、8 MB 最大請求主體、8 個並行請求,完整金鑰每分鐘 300 次請求(試用金鑰為 2 個並行請求、每分鐘 60 次請求)。
- 錯誤:HTTP 429 搭配錯誤碼
rate_limited或concurrency,以及臨時過載時的Retry-After: 5標頭。
如果你的程式碼呼叫嵌入端點,你需要另一個供應商來處理該部分,並可以在此處保留聊天。按任務分割是上述環境變數模式的常見原因。
遷移檢查清單
當你在現有專案中將一個端點切換為另一個端點時,請瀏覽一份簡短清單,而不是一次性更改所有內容。
- 驗證端點。 使用 curl 發送一個請求,並確認你收到了文字。呼叫
GET /v1/models並檢查 iduncensored已列出。 - 更改三個值。 Base URL、金鑰、模型名稱,沒有其他。暫時不要觸及提示詞。
- 執行你現有的測試。 如果你有提示詞回歸測試,請執行它們並注意哪些失敗。失敗通常是行為上的,例如不同的輸出格式,而不是協定錯誤。
- 檢查參數。移除端點不需要的選項。如果你使用 temperature、top_p、stop 和 seed,請保留它們。
- 分別測試串流輸出和工具。串流錯誤通常隱藏在假設特定區塊佈局的客戶端程式碼中。工具呼叫需要一個模型能良好遵循的 schema,因此請使用你的真實函式進行測試。
- 在真實流量上測量成本與延遲。比較一天的請求,而非單一提示詞。
在分支中執行,或使用功能旗標將少量流量路由至新端點。由於客戶端程式碼是共享的,回滾只需更改環境變數。
處理重試並讀取用量
SDK 預設會重試部分失敗,但你仍應自行處理 429 錯誤,因為生產環境中的並行限制是真實存在的。捕獲速率限制異常,等待 Retry-After(過載時為 5)中的秒數,然後重試幾次。失敗的請求不會計費,因此重試對你的餘額是安全的。
記錄每次請求的 usage.prompt_tokens 與 usage.completion_tokens。定價為每 100 萬個輸入 token $0.15,每 100 萬個輸出 token $0.50,因此一次包含 2,000 個輸入與 600 個輸出的請求成本為 2,000 × $0.15 / 1M + 600 × $0.50 / 1M = $0.0003 + $0.0003 = $0.0006。回應標頭還包含剩餘額度的 X-Balance-USD。請參閱 定價頁面 了解儲值與贈品,並參閱 文件 查看完整參數列表。
編輯器與其他工具
這三個值會套用至任何具有 OpenAI 相容提供者設定的工具。在 Cursor 中使用 DeepSeek 風格 API一文逐步介紹了其中一種編輯器。在每個工具中,欄位標籤略有不同,但你總是必須輸入以 /v1 結尾的 base URL、金鑰以及模型名稱。
更多指南
問答
是否有我必須安裝的官方 DeepSeek SDK?
你不需要供應商專屬套件。DeepSeek 的文件記錄了使用 OpenAI SDK 搭配不同 base URL 的做法;請查看他們的文件以獲取最新詳細資訊。
我需要更改哪三個值來使用此端點?
Base URL(https://api.deepseekapi.top/v1)、你的 API 金鑰以及模型 ID uncensored。
我現有的 OpenAI 程式碼可以原樣運作嗎?
聊天、串流輸出、JSON 模式和工具呼叫遵循相同的格式,因此大部分可以。不提供嵌入、影像和音訊,且由於模型不同,回答也會不同。
SDK 會正確傳送金鑰嗎?
是的,它會自動傳送帶有你的金鑰的 Authorization: Bearer。