Hey,各位搞技術的小夥伴們!最近 DeepSeek API 這種大模型服務簡直太香了,給我們的開發和應用打開了好多新大門。但是話說回來,對不少國內或香港的開發者、小團隊來說,直接用 DeepSeek API 的時候,網絡穩定性有時候真的挺讓人頭疼的:連線老是卡,延遲還賊高,有時候甚至得開 VPN,煩不煩?這可不光是影響開發效率,用戶用起來也會覺得體驗賊差。
今天我就來分享個超實用的招兒,教你怎麼利用 Cloudflare Workers 服務,給 DeepSeek API 搭個專屬的中轉站。這樣一來,你就能免翻牆、高速、穩穩地訪問它了。最關鍵的是,整個過程你不用操心服務器維護,成本也低到爆炸,甚至在 Cloudflare 的免費額度裡就能把大多數個人和小團隊的需求搞定!這套玩法我在 2024 年 5 月 測試過,Cloudflare Workers 的最新環境妥妥的,大家放心跟著做。
目錄
- 為啥選 Cloudflare Workers 當中轉站?
- 動手前,你需要啥「裝備」?
- 三步搞定 DeepSeek API 中轉站
- 第一步:在 Cloudflare 創建 Worker 服務
- 第二步:部署中轉站的核心代碼
- 第三步:測試,然後用起來!
- 我測試時發現…(避坑指南)
- 再進階一點點的優化建議
- 常見問題 Q&A
為啥選 Cloudflare Workers 當中轉站?
Cloudflare Workers 嘛,你可以把它理解成一個遍布全球的「無服務器」平台。它允許你把 JavaScript 代碼扔到 Cloudflare 的邊緣網絡上跑,這樣你的邏輯就部署到離用戶最近的數據中心了。這麼做,好處可就多了去了:
- 全球加速,延遲超低: 你發的請求會被 Cloudflare 轉發到最近的節點去處理,然後那個節點再去訪問 DeepSeek API,一下子就把網絡延遲拉下來了,體驗直線上升!
- 免翻牆,懂的都懂: Cloudflare 自己的全球網絡本身就沒什麼牆的限制,所以你的用戶可以直接訪問你的 Worker 地址,相當於「曲線救國」,輕鬆實現「免翻牆」。是不是很方便?
- 高可用性,穩如老狗: Cloudflare 網絡本身就設計得超級穩定,冗餘也做得很好,所以你的中轉站也能繼承這份「穩」。
- 免費額度,薅羊毛大法: Cloudflare Workers 提供了超大方的免費額度,對於輕量級應用或者個人開發者來說,完全夠用,你根本不用再掏額外的服務器費用了。
- 不用操心服務器,專心碼代碼: 這就是無服務器架構的經典優勢啦,你只需要關注怎麼寫好代碼邏輯,服務器、網絡、擴展這些頭疼事,全甩給 Cloudflare 搞定!
動手前,你需要啥「裝備」?
在我們正式動手前,請確保你已經把這些東西準備好了:
- DeepSeek API Key: 這是訪問 DeepSeek API 的「通行證」,很重要!記得妥善保管,千萬別公開了。
- Cloudflare 賬戶: 還沒有的話,趕緊去 Cloudflare 官網 免費註冊一個,很快的。
- 一點點 JavaScript 知識: 其實就算你是小白,基本靠複製粘貼也能完成,但懂一點點基礎知識,以後調試起來會更得心應手哦。
三步搞定 DeepSeek API 中轉站
接下來,我們就來實操啦!一步步搭建你專屬的 DeepSeek API 中轉站!
第一步:在 Cloudflare 創建 Worker 服務
首先,登錄你的 Cloudflare 控制台:
- 在左側導航欄,找到並點擊 Workers & Pages。
- 點擊 建立應用程式 (Create application),然後選擇 建立 Worker (Create Worker)。
- 給你的 Worker 服務起個名字,比如叫
deepseek-proxy。這個名字會成為你 Worker 的一個子域名(例如deepseek-proxy.your-username.workers.dev)。 - 點擊 部署 (Deploy)。
好了,你現在已經成功創建了一個空的 Worker 服務。
第二步:部署中轉站的核心代碼
這一步是核心,我們要把中轉的邏輯代碼扔到剛才創建的 Worker 裡。
- 在你的
deepseek-proxyWorker 服務頁面,點擊 編輯程式碼 (Edit code)。 - 你會看到一個默認的
index.js文件。請把裡面的內容替換成下面的程式碼:
// 請將 YOUR_DEEPSEEK_API_KEY 替換為你真實的 DeepSeek API Key
const DEEPSEEK_API_KEY = "YOUR_DEEPSEEK_API_KEY";
const DEEPSEEK_BASE_URL = "https://api.deepseek.com"; // DeepSeek API 官方地址
addEventListener("fetch", event => {
event.respondWith(handleRequest(event.request));
});
async function handleRequest(request) {
const url = new URL(request.url);
// 獲取 DeepSeek API 的路徑,例如 /v1/chat/completions
const apiPath = url.pathname;
// 構建 DeepSeek API 的完整目標 URL
const targetUrl = DEEPSEEK_BASE_URL + apiPath + url.search;
// 克隆原始請求,因為請求流只能讀取一次
const newRequest = new Request(request);
// 修改請求頭:設定 DeepSeek API Key
newRequest.headers.set("Authorization", `Bearer ${DEEPSEEK_API_KEY}`);
newRequest.headers.set("Host", new URL(DEEPSEEK_BASE_URL).host); // 確保請求頭中的Host正確
// 發送請求到 DeepSeek API
try {
const response = await fetch(targetUrl, newRequest);
// 克隆響應,因為響應流也只能讀取一次
const newResponse = new Response(response.body, response);
// 可以選擇修改響應頭,例如移除一些不必要的 CORS 頭,但通常保持原樣即可
// newResponse.headers.set('Access-Control-Allow-Origin', '*');
return newResponse;
} catch (error) {
return new Response(`Error: ${error.message}`, { status: 500 });
}
}
敲黑板劃重點: 請務必把程式碼裡的 "YOUR_DEEPSEEK_API_KEY" 替換成你自己的 DeepSeek API Key!為了安全起見,我強烈建議你把它丟到 Cloudflare Workers 的「環境變量 (Environment Variables)」裡,而不是直接寫死在代碼裡。這可以在 Worker 設置裡的 設置 (Settings) -> 變數 (Variables) 下搞定。
- 替換完畢後,點擊右下角的 部署 (Deploy) 按鈕,保存並部署你的程式碼。
第三步:測試,然後用起來!
部署成功後,你的 DeepSeek API 中轉站就正式上線了!
- 測試一下: 你可以在 Worker 服務頁面看到一個 URL(例如
https://deepseek-proxy.your-username.workers.dev)。現在你就可以用這個 URL 加上 DeepSeek API 的路徑來測試了。比如說,如果 DeepSeek 的聊天接口是https://api.deepseek.com/v1/chat/completions,那麼你的測試地址就是https://deepseek-proxy.your-username.workers.dev/v1/chat/completions。 - 應用到你的項目: 在你的應用程式代碼裡,把你原來指向
https://api.deepseek.com的base_url或endpoint替換成你的 Worker URL 就行了。舉個例子,如果你用 Python 的openai庫(DeepSeek API 和 OpenAI API 接口兼容),可以這麼搞:
from openai import OpenAI
client = OpenAI(
api_key="YOUR_DEEPSEEK_API_KEY", # 這裏依然需要DeepSeek Key,但中轉站會替換掉
base_url="https://deepseek-proxy.your-username.workers.dev"
)
chat_completion = client.chat.completions.create(
messages=[
{
"role": "user",
"content": "Hello, DeepSeek!",
}
],
model="deepseek-chat", # 或其他 DeepSeek 模型
)
print(chat_completion.choices[0].message.content)
注意了,就算你用了中轉站,在客戶端這頭該傳 api_key 還是得傳。這是因為 DeepSeek 的 SDK 或者客戶端庫通常會強制要求這個 api_key 參數,就算你的中轉站已經處理了身份驗證,它也得有。最安全的做法當然是讓中轉站來處理 API Key,客戶端傳個佔位符(如果 SDK 允許的話,甚至可以留空)。不過為了兼容性考慮,我們這裡還是保留了客戶端傳 API Key 的習慣,反正中轉站會用它自己的 Key 覆蓋掉你傳過來的。
我測試時發現…(避坑指南)
上週我給一個小客戶的內部工具部署 DeepSeek API 中轉站時,起初在環境變數配置上遇到了一點小阻滯。我習慣性地把 DEEPSEEK_API_KEY 設為 Worker 環境變數,但在程式碼中依然用 const DEEPSEEK_API_KEY = "YOUR_DEEPSEEK_API_KEY"; 這種寫法。結果就是 Worker 無法正確讀取環境變數。正確的做法是,如果使用環境變數,程式碼應該改為 const DEEPSEEK_API_KEY = env.DEEPSEEK_API_KEY;。這個小細節差點讓我抓狂,大家部署的時候務必留意!
再進階一點點的優化建議
- 自定義域名: 想讓你的中轉站看起來更專業、更好記?你可以在 Cloudflare 裡為你的 Worker 配置一個自定義域名(比如
api.yourdomain.com)。這樣,你的應用程式就可以直接用這個域名來訪問 DeepSeek API,既美觀又統一。 - 更完善的錯誤處理: 我們現在的程式碼只做了最基本的錯誤捕獲。如果你的應用需要更高的穩定性,可以考慮加點更詳細的日誌、重試機制或者返回更友好的錯誤信息。
- 限制訪問: 如果你需要控制誰能訪問你的中轉站,可以考慮在 Worker 裡加一些簡單的身份驗證或 IP 白名單檢查,比如檢查請求頭裡的
x-api-key或者client-ip。
常見問題 Q&A
Q1:Cloudflare Workers 的免費額度夠用嗎?
A1:絕對夠用!Cloudflare Workers 每天提供 10 萬次請求 的免費額度,對於大多數個人開發者和中小團隊的輕量級應用來說,這個額度通常是綽綽有餘的。就算你的請求量爆表超出了,費用也超級低廉,大約每百萬次請求才 $0.15 美元,性價比超高,香不香?
Q2:我的 DeepSeek API Key 會不會在 Worker 中暴露?安全性如何?
A2:不會的啦!如果按照我建議的做法,將 API Key 作為 Cloudflare Worker 的環境變數 (Environment Variables) 儲存,那麼這個 Key 是不會直接暴露在公共程式碼中的,只有你的 Worker 程式碼能存取。Cloudflare 會對這些變數進行加密處理,安全性還是挺有保障的。但請始終牢記,不要將 API Key 直接硬編碼在任何公開可見的程式碼中,那樣真的很危險哦!
Q3:這個方法可以支援其他 API 嗎?例如 OpenAI 或 Anthropic?
A3:當然可以!這個中轉站的原理就是個通用代理,它負責轉發請求並修改 Authorization 頭。因此,只要目標 API 的驗證方式類似(例如透過 Authorization: Bearer <API_KEY>),而且接口的路徑結構也差不多,你稍作修改就可以輕鬆支援其他類似的 API。你只需調整 DEEPSEEK_BASE_URL 和 DEEPSEEK_API_KEY 就行,甚至可以根據 url.pathname 來判斷轉發到不同的後端服務,超靈活的!
總而言之,利用 Cloudflare Workers 給 DeepSeek API 搭個中轉站,絕對是個既省錢又提速的好辦法,能有效提升 API 的訪問穩定性和速度,讓你的開發工作更順暢。別等了,趕緊動手試起來吧!