DeepSeek 搜索 API 上手:Search / Fetch 接口用法、价格限速,附 Python 联网问答示例

21次阅读
没有评论

10 月 17 日上午,DeepSeek 在 API 文档里加了一个新栏目「网页搜索与抓取」:一个 Search API 负责按关键词搜网页,一个 Fetch API 负责把单个网页抓下来转成 Markdown。背后用的是 DeepSeek 自研的搜索引擎,鉴权和平时调模型用的是同一把 API Key。

我关心的是三件事:能不能直接拿来给自己的 Agent 或小工具接上联网,多少钱,坑在哪。下面按动手顺序写,代码都给了 curl 和 Python 两个版本。想先了解 Claude Code、Cursor、Codex 周边还有哪些工具可以搭配,可以先看本站的 AI 编程 Agent 生态全景。

本文的接口参数、价格和限速都来自 DeepSeek 官方文档,查阅时间 2026 年 10 月 18 日(北京时间)。价格以后可能调整,用之前请再看一眼官方价格页。

三句话说清楚它是什么

  • Search:POST https://api.deepseek.com/v1/tools/search,给一个搜索词,返回结构化的结果列表:标题、链接、短摘要、给模型读的长摘要、可选的网页正文、发布时间、相关度分数、权威度。一次最多 50 条。
  • Fetch:POST https://api.deepseek.com/v1/tools/fetch,给一个网址,返回网页标题和 Markdown 格式的正文。
  • 计费:两个接口都按「成功请求次数」收费,每 1000 次 0.75 美元(中文价格页写的是 5 元)。失败、搜不到结果、超时都不收钱。

它们是「原始 JSON 接口」,不是聊天模型。你搜到什么、抓回什么、怎么喂给模型,都由你自己的代码决定。

谁用得上,谁不用管

用得上的:

  • 自己写 Agent、RAG 应用、Telegram/微信机器人的人,想给模型加「先上网查一下」的能力;
  • 原来用 Bing Search API 的人。微软已经在 2025 年 8 月 11 日停掉了 Bing Search API,一直没找到顺手替代的,可以试这个;
  • 已经在用 DeepSeek API 的人,不用再注册一家搜索服务、再管一把密钥。

不用管的:

  • 只在网页版或 App 里和 DeepSeek 聊天的人。这是开发者接口,网页版的联网搜索跟它没关系;
  • 在 Claude Code、Codex、DeepSeek Harness 里把 DeepSeek 当后端模型用的人,暂时也不用自己调。官方说明,这些工具里的服务端工具调用已经会走 Search / Fetch,目前不收费,北京时间 2026 年 11 月 1 日 00:00 起按次计费。如果你是用 Magpie 这类本机网关给 Claude Code 换成 DeepSeek,11 月以后留意一下账单里多出来的搜索费用。

准备:一把 Key,一点余额

  1. 登录 DeepSeek 开放平台(platform.deepseek.com),在「API keys」页面新建一把 Key。已经有 Key 的直接用,Search / Fetch 不需要单独开通。
  2. 账户里要有余额。余额不足时接口会返回 HTTP 402。官方的扣费规则是先扣赠送余额,再扣充值余额。
  3. 把 Key 放进环境变量,别写死在代码里:
export DEEPSEEK_API_KEY="sk-你的key"

第一次搜索

先用 curl 试一下,搜 5 条,顺便要网页正文:

curl https://api.deepseek.com/v1/tools/search \
  -H "Authorization: Bearer $DEEPSEEK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "DeepSeek API 网页搜索 site:api-docs.deepseek.com",
    "count": 5,
    "need_content": false
  }'

返回的 results 里,每一条大概长这样(字段名照官方文档):

{
  "rerank_score": 2.4,
  "title": "……",
  "url": "https://……",
  "snippet": "100~200 字符的短摘要,适合显示在界面上",
  "summary": "600~800 字符的长摘要,适合直接喂给模型",
  "content": "",
  "site_name": "……",
  "site_icon": "https://……/favicon.ico",
  "date": "2026-10-17T09:00:12+00:00",
  "authority": 3
}

有几个字段值得多看一眼:

  • rerank_score:0~3 分,综合相关性、权威性、时效性,1.5 分以上官方称为优质结果;
  • authority:0~4,3 以上是很权威的来源,-1 表示未知;
  • summary:已经是围绕你的搜索词提炼过的长摘要。很多问题只看 summary 就够了,不一定要再抓全文;
  • date:统一是 UTC 时间,换成北京时间要加 8 小时。

请求参数

参数 必填 说明
query 是 搜索词,1~128 个字符,不能全是空白;支持下面的搜索语法
count 否 返回条数,1~50,默认 10。条数不影响价格
ori_question 否 触发这次搜索的用户原始问题,1~128 个字符,帮助理解搜索意图
localization 否 一个 IP 地址,用来优先返回当地的结果,默认空字符串
need_content 否 是否在 content 里返回网页正文,默认 false

注意一点:请求里不认识的字段会被直接忽略,不会报错。比如你把 count 写成 num,接口照样返回默认的 10 条,你不会收到任何提示。

搜索语法速查

搜索词原样转给搜索引擎,下面这些语法可以混着用:

写法 例子 作用
site: DeepSeek site:github.com 只搜某个网站;多个网站用 OR 连接:site:github.com OR site:huggingface.co
-site: DeepSeek -site:example.com 排除某个网站
-词 DeepSeek -广告 排除含这个词的页面
"..." DeepSeek "Search API" 精确匹配短语
-"..." DeepSeek -"release notes" 排除含这个短语的页面
lang: DeepSeek lang:zh,en 限定语言
after: / before: DeepSeek after:2026-10-01 只要某个日期之后 / 之前发布的页面

lang:、after: 这两个我觉得最实用:做新闻类问答时加一个 after:,能少很多过期内容。

抓一个网页:Fetch

Fetch 只有一个参数 url:

curl https://api.deepseek.com/v1/tools/fetch \
  -H "Authorization: Bearer $DEEPSEEK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://api-docs.deepseek.com/zh-cn/guides/search"}'

返回很简单:

{
  "title": "页面标题",
  "content": "# 页面标题\n\n正文的 Markdown……"
}

限制和规则:

  • 网址最长 8192 个字符,必须是带域名的 http / https 地址,不能在网址里带用户名密码;
  • 能不能抓到取决于目标网站本身。官方的说法是 Fetch 受目标站点可用性和访问策略约束:被安全策略拒绝返回 403,网址打不开、被站点策略挡住、内容类型不支持、抽不出正文,都返回 404;
  • 404 不收费(没有返回正文就不算成功请求),所以批量抓的时候不用太担心废请求的成本。如果目标站点抓不到,或者需要按自己的规则批量采集,也可以用开源的 Python 爬虫库 Scrapling 自己写(记得遵守 robots.txt 和站点条款)。

Python:把两个接口包成函数

只用 requests,不需要额外 SDK。下面这份我加了一个最简单的重试:官方建议只对 408、429 和 5xx 等待重试,其他 4xx 改了请求再说。

import os
import time
import requests

KEY = os.environ["DEEPSEEK_API_KEY"]
BASE = os.environ.get("DEEPSEEK_BASE_URL", "https://api.deepseek.com")
HEADERS = {"Authorization": f"Bearer {KEY}", "Content-Type": "application/json"}


def call(path, body, timeout=60, retries=3):
    for i in range(retries):
        r = requests.post(BASE + path, headers=HEADERS, json=body, timeout=timeout)
        if r.status_code in (408, 429) or r.status_code >= 500:
            time.sleep(2 ** i)  # 1s、2s、4s 递增等待
            continue
        return r
    return r


def search(query, count=10, question=None, need_content=False):
    body = {"query": query[:128], "count": count, "need_content": need_content}
    if question:
        body["ori_question"] = question[:128]
    r = call("/v1/tools/search", body)
    r.raise_for_status()
    return r.json()["results"]  # 没有结果时是空列表,也不收费


def fetch(url):
    r = call("/v1/tools/fetch", {"url": url})
    if r.status_code in (403, 404):  # 被拒绝或抓不到正文
        return None
    r.raise_for_status()
    return r.json()  # {"title": ..., "content": ...}


if __name__ == "__main__":
    for item in search("DeepSeek Search API lang:zh after:2026-10-01", count=5):
        print(f"{item['rerank_score']:.1f}  {item['title']}\n     {item['url']}")

实战:先搜、再抓、再让 DeepSeek 回答

这是最常见的「联网问答」流程,也就是一个最小的 RAG:

  1. 用 Search 找到相关网页;
  2. 挑分数高的前 3 条,用 Fetch 抓全文(抓不到就退回用 summary);
  3. 把资料和问题一起交给 deepseek-flash,要求它只根据资料回答,并标出处。

接着上面那份代码往下写:

def ask(question):
    hits = search(question, count=8, question=question)
    good = [h for h in hits if h["rerank_score"] >= 1.5][:3] or hits[:3]
    if not good:
        return "没搜到相关资料。"

    docs = []
    for i, h in enumerate(good, 1):
        page = fetch(h["url"])
        text = page["content"][:6000] if page else h["summary"]
        docs.append(f"[{i}] {h['title']}\n{h['url']}\n{text}")

    messages = [
        {"role": "system", "content": "只根据给出的资料回答,用中文。"
         "每个结论后面用 [编号] 标出处;资料里没有的就说不知道。"},
        {"role": "user", "content": "资料:\n\n" + "\n\n---\n\n".join(docs)
         + f"\n\n问题:{question}"},
    ]
    r = requests.post(BASE + "/chat/completions", headers=HEADERS, timeout=120, json={
        "model": "deepseek-flash",
        "messages": messages,
        "thinking": {"type": "disabled"},  # 简单问答关掉思考模式,更快也更省
        "stream": False,
    })
    r.raise_for_status()
    return r.json()["choices"][0]["message"]["content"]


print(ask("DeepSeek 的 Search API 怎么收费?"))

几点说明:

  • 模型名用的是 deepseek-flash。DeepSeek 现在的文档里推荐的模型名就是它,对应 DeepSeek-V4.1-Flash(10 月 17 日已更新到 1017 版,改了什么见 DeepSeek V4.1 Flash 1017 更新问答);需要更强推理可以换成 deepseek-v4-pro;
  • deepseek-flash 默认开启思考模式,上面用 "thinking": {"type": "disabled"} 关掉了。复杂问题可以去掉这一行;
  • [:6000] 是按字符粗暴截断,防止一个超长页面把上下文和费用撑上去。正式用的话,最好按段落切块再挑相关的段落;
  • 搜索词直接用了用户的问题。问题很长时会被截到 128 个字符,更好的做法是先让模型把问题改写成几个关键词,再去搜。

这一套跑一次,搜索加抓取最多 4 次请求,按 0.75 美元 / 千次算是 0.003 美元,大头其实是模型的 token 费用。

算笔账:价格、限速和免费期

项目 Search Fetch
价格 每 1000 次成功请求 0.75 美元 / 5 元 每 1000 次成功请求 0.75 美元 / 5 元
什么算成功 HTTP 200 且 results 不为空 HTTP 200 且返回了页面正文
不收费 失败、空结果、超时 失败、抓不到正文、超时
账号限速 5 QPS 5 QPS,另有按域名的限速

再补几条容易误会的地方:

  • 按次收费,跟 count 无关。要 1 条还是 50 条,都是一次请求的钱,需要多一点结果就别省着;
  • 限速按账号算,不按 Key 算。你开 10 把 Key 也还是每秒 5 次,超了返回 429。Search 和 Fetch 各算各的,互不占用,和模型的并发限制也是分开的;
  • 模型的峰谷电价不适用于这两个接口。DeepSeek 模型在北京时间工作日 9:00-12:00、14:00-18:00 是高峰价,其他时间半价;Search / Fetch 是固定按次价;
  • 免费期只针对特定场景:在 DeepSeek Harness、Claude Code、Codex 里用 DeepSeek API 时,服务端自动触发的 Search / Fetch 调用,北京时间 2026 年 11 月 1 日 00:00 前不收费。你自己写代码直接调接口,从上线起就按次计费。

和其他搜索 API 比一比

下面是几家常被拿来给 AI 接搜索的服务,价格都取自各家官网,查阅于 2026 年 10 月 18 日。各家的计费单位不完全一样,我把它们折算成「每 1000 次基础搜索」方便对比:

服务 基础搜索价格(每 1000 次) 抓网页正文 免费额度 备注
DeepSeek Search / Fetch 0.75 美元(5 元) Fetch 0.75 美元 / 千次 没有常规免费额度 自研索引,5 QPS,一次最多 50 条
Brave Search API 5 美元 搜索结果里可带额外摘要;另有 LLM Context 接口 预付费,注册需要信用卡 自有索引,搜索档 50 QPS
Tavily 按量 0.008 美元 / 积分,基础搜索 1 积分,约 8 美元 Extract:每 5 个网址 1 积分 每月 1000 积分 包月档每积分 0.005~0.0075 美元
Exa instant 模式 4 美元,fast / auto 7 美元(含 10 条,多 1 条另加 1 美元 / 千条) Contents 1 美元 / 千页 每月 10 美元额度 有 Deep Search 等高级档
Serper 0.30~1.00 美元,看一次买多少 不提供 注册送 2500 次查询 返回的是 Google 搜索结果,额度 6 个月有效
Bing Search API 已于 2025 年 8 月 11 日停用 — — 微软建议改用 Azure AI Agents 里的 Grounding with Bing Search

单看价格,DeepSeek 和 Serper 最便宜的档位在一个水平,比 Brave、Tavily、Exa 便宜好几倍。但价格只是一部分:

  • 结果质量我没有做系统测试,这张表不代表谁搜得更准。Brave 官网就在强调「总成本 = 搜索费 + 为了答对多花的 token」;
  • Serper 卖的是 Google 的搜索结果页数据,Brave、DeepSeek 用的是自家索引,来源性质不同;
  • DeepSeek 的 5 QPS 对个人项目足够,要做面向很多用户的产品就偏紧,Brave 搜索档是 50 QPS。

我的建议是:个人项目、已经在用 DeepSeek 模型的,直接用 DeepSeek 这套,一把 Key 管到底;对结果质量要求高的业务,拿自己的真实问题在两三家之间各跑几十条对比一下再定。

几个坑,先说在前面

  • localization 传的是 IP 地址。如果你把终端用户的 IP 传过去换本地化结果,等于把用户 IP 交给了 DeepSeek,面向用户的产品要在隐私政策里写清楚;
  • query 只有 128 个字符。别把整段用户输入塞进去,超了直接 400;
  • 参数写错不报错。上面说过,未知字段会被忽略,调不出预期效果时先检查字段名拼写;
  • 抓取会撞上网站的规矩。Fetch 除了账号级 5 QPS,还有按域名的限速,对同一个网站连续猛抓会收到 429;有些网站本身就不允许抓取,返回 404 是正常的;
  • need_content: true 会让响应变大。只需要判断相关性时,用 summary 就够,确定要用的页面再单独 Fetch;
  • 长内容先截断再给模型。网页正文动辄几万字,不截断的话,token 费用会远超搜索费。如果你在编程 Agent 里大量用搜索和抓取,可以配合 Context Mode 这类省上下文的工具;
  • 11 月 1 日之后的 Agent 账单。在 Claude Code、Codex 里用 DeepSeek 后端的,自动触发的搜索从那天起开始收费,跑长任务前心里有个数。

写在最后

这次 DeepSeek 做的事情不复杂:把自家的搜索和抓取能力拆成两个按次收费的接口,价格压得很低,鉴权沿用原来的 Key。对已经在用 DeepSeek 模型的开发者来说,接入成本几乎为零,自己写个联网问答机器人,几十行代码就能跑起来。

搜索质量到底怎么样,还要等大家用一段时间再看。另外,想要一个完全开源、能自己换模型和工具的编程 Agent,可以看看 OpenCode 2.0,它和 DeepSeek 的接口也能配合使用。

参考来源

正文完
 0
liujiana
版权声明:本站原创文章,由 liujiana 于2026-10-18发表,共计7683字。
转载说明:本文由(baffox.com)根据项目官网、开源社区及公开资料整理。工具的功能、价格、授权与服务条款可能随时间调整,请以官方最新页面为准。合理引用请注明出处并保留本页链接;如发现内容错误、版权或侵权问题,请通过联系邮箱进行反馈,我们将第一时间核实处理。
推广Baffox 推荐:搬瓦工 CN2 GIA 线路老牌 VPS推广Baffox 推荐:DMIT 香港 / 东京 / 洛杉矶高端线路 VPS
评论(没有评论)
验证码