DeepSeek Search API 每 1,000 次成功請求收費 $0.75,看起來很便宜;但真正決定它是否適合你的,並不只有單價。Search 與 Fetch 都各自有每帳號每秒 5 次請求的配額。對重視成本的 Agent 來說,這很有吸引力,但前提是你得控制重複 Fetch、重試邏輯、來源覆蓋率,以及模型 Token 的消耗。
先用一張表決定怎麼用
| 需求 | 建議起點 | 原因 |
|---|---|---|
| 低成本、結構化的網頁探索 | 直接使用 DeepSeek Search API | 以 JSON 回傳 URL、摘要片段、摘要內容、日期與權威度中繼資料 |
| 讀取一個已知的公開 URL | DeepSeek Fetch API | 每 1,000 次成功 Fetch 收費 $0.75,將單一頁面轉為 Markdown |
| 以英文研究為主、且需要廣泛來源覆蓋 | DeepSeek 搭配第二家搜尋供應商 | 早期使用者測試顯示來源覆蓋存在差異,YouTube 與微信搜尋尤其偏弱 |
| 高扇出研究型 Agent | 選擇吞吐量更高的供應商或架構 | DeepSeek 對各端點分開設限,仍會限制每個工作池的吞吐量 |
原生 API 提供哪些能力?
DeepSeek 文件列出兩個唯讀 JSON 端點,兩者的驗證方式相同:對 api.deepseek.com 傳送 Authorization: Bearer <DeepSeek API Key> 與 Content-Type: application/json。
| 操作 | 端點 | 輸入 | 輸出 |
|---|---|---|---|
| Search | POST /v1/tools/search | 搜尋字串,以及選用的結果控制參數 | 依排名排序的結果物件 |
| Fetch | POST /v1/tools/fetch | 一個 HTTP 或 HTTPS URL | 頁面標題與擷取出的 Markdown |
原生 API 與託管式聊天產品是分開的。擁有 DeepSeek API Key,不代表一般的 Chat Completions 請求會自動上網瀏覽。你的應用程式必須自行呼叫 Search 或 Fetch,或採用 DeepSeek 文件所列、已提供工具層的用戶端整合方式。
Search 與 Fetch 怎麼分工?
Search 必填的 query 長度介於 1 到 128 個 Unicode 字元。選填欄位包含介於 1 到 50 的 count、ori_question、基於 IP 的 localization 值,以及 need_content。count 預設為 10,need_content 預設為 false。
設定 need_content: true 後,Search 可能會在每筆結果的 content 欄位直接帶回頁面文字。如果內容有成功取得,就能省下一次獨立的 Fetch 呼叫。不過這不是保證:頁面無法存取或遭封鎖時,content 仍可能是空的。
Fetch 適合用在你已挑選好的 URL。它會回傳 Markdown,但每次請求只能送一個 URL。DeepSeek 表示,Fetch 是否成功取決於目標網站的可用性與存取政策,因此 Search 找得到結果,並不代表 Fetch 一定讀得到頁面。
Search 結果會包含 0 到 3 的 rerank_score,以及 -1 到 4 的 authority 等級。文件將至少 1.5 的分數,以及至少 3 的權威度值視為高品質訊號。不過這些是服務本身提供的中繼資料,並不是獨立的搜尋品質基準。
查詢語法支援不少實用篩選條件,例如 site:、-site:、引號精確片語、lang:、after: 與 before:。例如:
"DeepSeek Search API" site:api-docs.deepseek.com lang:en after:2026-10-01
這個定價會如何影響系統架構
DeepSeek 對 Search 與 Fetch 的定價皆為每 1,000 次成功請求 $0.75官方定價頁面。
| 請求結果 | 是否計費? |
|---|---|
Search 回傳 HTTP 200,且 results 陣列非空 | 是 |
| Search 回傳 HTTP 200,但沒有結果 | 否 |
| Fetch 成功回傳頁面內容 | 是 |
| Fetch 沒有回傳可用內容 | 否 |
| 逾時、請求失敗或回傳錯誤 | 否 |
| Search 回傳 1 筆結果或 50 筆結果 | 單次請求價格相同 |
端點費用並不是 AI 研究任務的完整成本。模型輸入/輸出 Token,以及檢索前後額外的 Agent 回合,仍會另外計費。
比較貼近實務的成本公式
以簡單工作流程來看,檢索成本可寫成:
successful Search calls * $0.00075
+ successful Fetch calls * $0.00075
+ model input and output token charges
若每次 Search 都有結果,進行 10,000 次搜尋的費用是 $7.50。若應用程式再為每個結果各 Fetch 一個頁面,額外 10,000 次成功 Fetch 會再增加 $7.50,尚未計入模型 Token。要求 Search 回傳 50 筆結果不會讓單次請求費用倍增,但可能提高模型需要處理的文字量。
這也是為什麼 need_content 應該有明確策略。頁面集合較小時可直接啟用;如果你想先依分數、網域、日期或權威度篩選,則適合先做純中繼資料的 Search,再針對選中的結果 Fetch。
@haolv511482 表示:「在加入 fetch 迴圈前,先檢查 content 欄位。Search 可以透過 need_content=true 回傳頁面文字……否則你的 agent 可能會花錢讀取同一頁兩次。」來源
設計時必須處理的限制與失敗情境
官方指南指出,單次 Search 最多可取得 50 筆結果;Search 與 Fetch 則各自有每帳號每秒 5 次請求的配額。即使部署多個 worker,仍需為不同端點分別設置限流器。
| 限制或錯誤 | 應用程式的處理方式 |
|---|---|
| 每帳號 5 QPS | 使用共享佇列與受控並行數 |
| 最多 50 筆結果 | 透過更精準的查詢或日期區間,在應用層自行分頁 |
| 查詢上限 128 字元 | 產生精簡的搜尋字串,並在 ori_question 保留原始問題 |
| HTTP 429、408 或 5xx | 延遲後重試,並採用指數退避 |
| HTTP 400、401、403 或無效 URL | 修正請求,不要盲目重試 |
| Fetch 回傳 HTTP 404 | 將頁面標記為無法取得,改選其他結果 |
| HTTP 200 但結果集為空 | 視為有效的無結果回應,不是傳輸失敗 |
Fetch 對網站行為特別敏感。官方文件僅承諾受目標網站可用性與存取政策所限,並未保證 JavaScript 執行、瀏覽器工作階段、User-Agent 選擇器、截圖或保留原始 HTML。早期測試中,@jiangkoumo_ 指出高度依賴 JavaScript 渲染的網站可能回傳 404,而一般公開頁面則可成功轉成 Markdown。來源
同一批早期測試也揭露了重要的覆蓋率取捨。@bei351009016 表示,在 29 個查詢與 12 個平台的測試中,DeepSeek 與 Exa 的重疊率只有 2.1%;他形容 DeepSeek 對中文來源速度快、內容新,但在微信與 YouTube 上較弱。來源
這些早期測試僅能作為方向性參考,仍應針對你真正需要的來源類型自行驗證。
最小可行的實作模式
以下範例將檢索與答案生成分開處理;Search 已回傳內容時不再呼叫 Fetch,並在這個程序中將呼叫間隔控制在每秒 5 次。若是多 worker 部署,仍需要一個共享限流器。
import os
import threading
import time
import requests
BASE = "https://api.deepseek.com"
HEADERS = {
"Authorization": f"Bearer {os.environ['DEEPSEEK_API_KEY']}",
"Content-Type": "application/json",
}
RATE_LOCK = threading.Lock()
LAST_CALL = 0.0
def post_json(path, payload, attempts=3):
global LAST_CALL
for attempt in range(attempts):
with RATE_LOCK:
wait = 0.2 - (time.monotonic() - LAST_CALL)
if wait > 0:
time.sleep(wait)
LAST_CALL = time.monotonic()
response = requests.post(
BASE + path, headers=HEADERS, json=payload, timeout=30
)
if response.status_code in {408, 429, 500, 502, 503, 504}:
if attempt == attempts - 1:
response.raise_for_status()
time.sleep(2 ** attempt)
continue
response.raise_for_status()
return response.json()
search = post_json(
"/v1/tools/search",
{
"query": 'DeepSeek Search API pricing site:api-docs.deepseek.com',
"count": 10,
"need_content": True,
},
)
usable = [
result for result in search.get("results", [])
if result.get("rerank_score", 0) >= 1.5
]
for result in usable:
content = result.get("content") or ""
if not content:
fetched = post_json("/v1/tools/fetch", {"url": result["url"]})
content = fetched.get("content", "")
# Store title, URL, date, authority, score, and content before summarizing.
print(result["title"], result["url"], len(content))
哪些情況不該只靠 DeepSeek?
DeepSeek 很適合低成本的來源探索,特別是你的資料語料涵蓋中文來源,而且應用可以接受每帳號 5 QPS 的限制時。但若工作負載高度依賴 YouTube、微信、重度客戶端渲染頁面,或特定搜尋引擎的排序結果,它就不是理想的單一供應商選擇。
更穩妥的是採用混合式架構:
- 先將廣泛且成本敏感的探索查詢送到 DeepSeek。
- 依網域、日期、權威度與 rerank score 篩選。
- 針對 DeepSeek 容易漏掉的來源類別,使用第二家供應商。
- 只 Fetch 篩選後的 URL。
- 將答案依據與已儲存的來源文字比對。
資料處理也是部署時必須評估的面向。在送出敏感查詢前,請先檢閱 DeepSeek 現行條款與自身的合規要求;社群疑慮並不能證明某種特定的資料保留政策。來源
上線前的營運檢查清單
- 分開記錄 Search 與 Fetch 呼叫,才能核對帳單。
- 在 Fetch Search 回傳的 URL 前,先檢查
content。 - 為所有 worker 與 subagent 設置共享的 5 QPS 限流器。
- 只重試 408、429 與暫時性的 5xx 回應。
- 儲存 URL、標題、日期、權威度、rerank score 與擷取時間。
- 在任何由使用者控制的 Fetch 路徑中,拒絕不支援的 scheme 與私有網路 URL。
- 將頁面文字視為不受信任的資料,而不是工具指令。
- 建立涵蓋英文官方頁面、中文來源、論壇、影片頁面與高度 JavaScript 化網站的測試集。
- 衡量任務總成本,包含模型 Token 與重試成本,不要只報告 Search 的價格。
DeepSeek Search API 常見問題
透過 OpenAI 相容呼叫,就會自動取得 API 搜尋能力嗎?
不會。原生 Search 端點是獨立的 POST /v1/tools/search 路由。即使用戶端採用 OpenAI 相容的 base URL,一般模型請求也不會因此自動瀏覽網頁。你需要自行加入 Search/Fetch 呼叫,或使用 DeepSeek 文件列出的用戶端整合方式。
DeepSeek Search 是所有搜尋供應商的最佳替代方案嗎?
不是。它是很有競爭力的低成本檢索選項,但早期使用者測試發現它與 Exa 的來源覆蓋不同,且在 YouTube 與微信方面存在缺口。在將它作為唯一供應商前,請先以符合自身工作負載的小型測試集驗證。