GUIDE · DeepSeek
DeepSeek Search 接入 Agent 教程:网页搜索与抓取 API 配置指南
DeepSeek Search/Fetch 是独立的网页搜索与抓取 HTTP API,使用统一的 DeepSeek API Key。本文提供可运行的 Python 搜索示例与 Fetch 最小用法,并说明直接调用接口、客户端集成和 Agent 函数调用的区别。
- 适用对象
- 想为 AI Agent 或自动化脚本添加实时联网搜索能力、降低爬虫维护成本的开发者
- 预计用时
- 约 12 分钟
- 最后核实
准备
- 一个有效的 DeepSeek 开放平台账号及可用 API Key(在 DeepSeek 开放平台 获取)
- Python 3(示例只使用标准库,无须安装 OpenAI SDK 或第三方依赖)
- 仅在需要模型自主决定搜索时,才另行准备支持工具调用的 Agent 环境;直接调用 Search/Fetch 不需要选择推理模型
步骤
先弄清 DeepSeek 搜索抓取服务是什么与计费规则
DeepSeek 的 Search 按关键词返回结构化搜索结果,Fetch 抓取单个网页并返回 Markdown 正文。两者都是独立的 HTTP JSON API;直接调用即可取得网页资料,不需要先调用模型。将资料交给模型生成回答,是后续单独的一步。
- 计费时间:官方说明当前调用未计费,将于北京时间 2026 年 11 月 1 日 00:00 起计费。
- 正式单价:Search、Fetch 分别为 ¥5 / 1,000 次成功请求。只有 HTTP 200 且产生结果才收费:Search 的
results非空,Fetch 返回网页正文。失败、搜索无结果或超时不计费。count不影响单次请求价格,搜索后再 Fetch 是两次独立请求。模型输入/输出 Token 另行计费。
获取 DeepSeek API Key 并配置环境变量
访问 DeepSeek 开放平台控制台,在 API Keys 页面创建密钥。Search、Fetch 与模型 API 使用同一个 DeepSeek API Key,以
Authorization: Bearer <API Key>鉴权,请求体为 JSON。将密钥保存在环境变量
DEEPSEEK_API_KEY,不要写入代码或提交到仓库。下面的 Python 示例不调用推理模型,也不需要model参数;如需模型总结结果,再按实际使用的模型接口配置。在 DeepSeek Harness 中使用已有集成
官方搜索指南确认:在 DeepSeek Harness、Claude Code、Codex 中使用 DeepSeek API 时,已有通过 Server 端工具调用 访问 Search/Fetch 的集成,这些调用也将从北京时间 2026 年 11 月 1 日 00:00 起计费。
使用 Harness 时按其当前版本文档配置 DeepSeek API Key,并查看实际搜索请求与返回结果。客户端的开关和日志入口以实际版本为准;不能仅凭回答包含链接或最新日期,就认定已经联网。
在 Claude Code 与 Codex CLI 中配合使用
需要区分三种接入方式:
- 直接调用 Search/Fetch:你的脚本发送 HTTP 请求并读取结果,下面的 Python 示例采用这种方式。
- 官方服务端工具集成:官方指南提到的客户端场景由对应集成完成搜索;仅把 Base URL 或模型提供方改成 DeepSeek,不能据此保证任意客户端或网关都具备这一能力。Agent 自带的其它 Web 工具也不等于 DeepSeek Search。
- 自定义函数调用:Chat Completions 中声明一个名为
web_search的函数,只是告诉模型可请求这个函数,不会自动执行搜索,也不是官方预置搜索工具。自行实现时,必须读取tool_calls、校验函数名及 JSON 参数、实际调用 Search/Fetch、保留 assistant 的工具调用消息,再用匹配的tool_call_id将结果作为role: tool消息回传模型,并继续请求直到生成回答;还需限制工具轮数。本文不提供省略这些步骤的函数调用示例。
使用第三方网关时,应确认其适配文档和实际请求记录,不能假设声明
web_search插件后就会自动路由到官方 Search API。自主开发 Agent:通过原生 API 调用搜索工具
将下列代码保存为
deepseek_search.py,先在终端设置export DEEPSEEK_API_KEY="你的密钥",再运行python3 deepseek_search.py。代码直接 POST 到https://api.deepseek.com/v1/tools/search,输出真实搜索结果,不生成模型回答。Search 请求字段:
query必填,1~128 个 Unicode 字符且不能全为空白;count可选,1~50,默认 10;need_content默认 false,此时结果的content为空字符串。可选ori_question是 1~128 字符的原始问题(null 视为未提供),localization是用于本地化排序的 IP 地址,默认空字符串。成功响应是包含
results数组的 JSON 对象,数组可能为空。每项包含title、url、短摘要snippet、长摘要summary、content、rerank_score、authority,以及可为 null 的site_name、site_icon、date。下面只读取标题、链接和长摘要,按需再抓取正文。import json import os import sys from urllib.error import HTTPError, URLError from urllib.request import Request, urlopen def post_tool(tool, payload): if tool not in ("search", "fetch"): raise ValueError("只支持 search 或 fetch") api_key = os.environ.get("DEEPSEEK_API_KEY", "").strip() if not api_key: raise RuntimeError("请先设置 DEEPSEEK_API_KEY 环境变量") request = Request( "https://api.deepseek.com/v1/tools/" + tool, data=json.dumps(payload, ensure_ascii=False).encode("utf-8"), headers={ "Authorization": "Bearer " + api_key, "Content-Type": "application/json", }, method="POST", ) try: with urlopen(request, timeout=30) as response: data = json.loads(response.read().decode("utf-8")) except HTTPError as exc: raise RuntimeError( f"DeepSeek {tool} HTTP {exc.code};请按下文状态码说明处理" ) from None except (URLError, TimeoutError): raise RuntimeError("网络连接失败或超时,请稍后检查重试") from None except (ValueError, UnicodeError): raise RuntimeError("接口未返回有效的 UTF-8 JSON") from None if not isinstance(data, dict): raise RuntimeError("接口响应应为 JSON 对象") return data def search(query): data = post_tool("search", { "query": query, "count": 5, "need_content": False, }) results = data.get("results") if not isinstance(results, list) or any( not isinstance(item, dict) or any( not isinstance(item.get(key), str) for key in ("title", "url", "summary") ) for item in results ): raise RuntimeError("Search 响应缺少有效的 results 数组或结果字段") return results def fetch(url): page = post_tool("fetch", {"url": url}) if not all(isinstance(page.get(key), str) for key in ("title", "content")): raise RuntimeError("Fetch 响应缺少 title/content 字符串") return page def main(): try: results = search("DeepSeek API 最新更新 site:api-docs.deepseek.com") if not results: print("未找到匹配结果,可调整关键词后再搜索。") for result in results: print(result["title"], result["url"]) print(result["summary"]) except RuntimeError as exc: print(str(exc), file=sys.stderr) return 1 return 0 if __name__ == "__main__": sys.exit(main())按需抓取网页正文:Fetch 最小用法
复用上一节保存的
deepseek_search.py,将下面代码另存为fetch_page.py,在同一目录运行python3 fetch_page.py。它会 POST 到https://api.deepseek.com/v1/tools/fetch,请求体为{"url": "网页地址"}。url必填,最长 8192 字符,必须是包含 host 的 HTTP/HTTPS 地址且不能带用户名或密码。响应是{"title": "页面标题", "content": "Markdown 正文"};标题缺失时为空字符串。Fetch 受目标站点可用性和访问策略影响,不能保证抓取所有网站。import sys from deepseek_search import fetch try: page = fetch("https://api-docs.deepseek.com/zh-cn/guides/search/") print(page["title"]) print(page["content"] or "页面正文为空") except RuntimeError as exc: print(str(exc), file=sys.stderr) sys.exit(1)生产环境部署与避坑指南
在将 Agent 接入搜索上线前,请关注以下要点:
- 错误处理:错误 JSON 为
{"error":{"message":"…","type":"…","param":null,"code":"…"}}。400 表示参数或请求格式错误,401 检查 Key,402 先充值,403 表示 Fetch 被安全策略拒绝,404 表示 Fetch 未取得可用正文,413 表示请求体过大。这些错误应先修正原因,避免原样重试。 - 稍后重试:408、429 或 5xx(例如 500、504)可等待后重试;429 还可能来自 Fetch 的目标域名限速。示例不自动重试,生产中应限制次数并退避。每账号 Search 100 QPS、Fetch 25 QPS,分别独立,换 Key 不会增加账号限额。
- 控制调用与上下文:先筛选搜索摘要,再对有价值的 URL 调用 Fetch;限制 Agent 工具轮数与返回文本长度,避免重复搜索和过多输入 Token。网页资料应作为外部数据处理,不当作 Agent 指令。
- 计费提醒:北京时间 2026 年 11 月 1 日 00:00 起按上述规则计费,记录 Search/Fetch 请求次数并预估预算。
- 错误处理:错误 JSON 为
注意事项
- 计费起点:北京时间 2026 年 11 月 1 日 00:00 起,Search 和 Fetch 分别按每千次成功且有结果的请求 5 元计费;失败、搜索空结果和超时不计费。
- 工具声明不会执行搜索:自定义函数名没有联网能力;需要执行器实际请求接口并回传结果。直接调用本文的 Search/Fetch 示例不涉及模型函数调用。
- Token 费用独立:直接调用 Search/Fetch 按请求计费;仅在随后将网页资料送入模型时,相关内容才产生模型输入 Token 费用,模型生成也另行计费。
常见问题
DeepSeek 搜索 API 需要像 Google 或 Bing 那样单独申请专用的 Search Key 吗?
不需要。DeepSeek 的搜索与抓取能力直接挂载在统一的 DeepSeek API Key 权限下,一个密钥即可同时调用模型推理与联网搜索工具。
在限免期间调用搜索,会扣减 DeepSeek 账户原有的余额或体验赠金吗?
官方说明 Search/Fetch 当前未计费,将于北京时间 2026 年 11 月 1 日 00:00 起计费。模型 API 的输入/输出 Token 仍独立计费;直接运行本文搜索脚本不调用模型。
在客户端里怎么知道 Agent 到底有没有真正使用搜索?
查看执行器或服务端日志中的 Search/Fetch 实际 HTTP 请求与响应,或客户端提供的工具执行记录。仅有 tool_calls 表示模型提出了调用请求,不能证明工具已执行成功;仅凭回答有链接或看不到工具气泡,也不能判断是否联网。
调用 Fetch 接口抓取外部网页时支持防爬保护严重的站点吗?
Fetch 受目标站点可用性和访问策略影响。安全策略拒绝可能返回 403;URL 不可用、站点拦截、内容类型不支持或没有可提取的 Markdown 正文等情况可能返回 404。不能保证绕过登录或人机验证。
11 月 1 日之后如果不想使用搜索,会强制扣费吗?
只有实际调用 Search/Fetch 并满足成功且有结果的条件,才产生对应请求费。使用客户端的服务端集成时,要按该集成的配置停止搜索调用;仅删除自定义函数声明不能证明所有搜索路径都已关闭。模型 Token 费用仍独立计算。
相关优惠
- 模型 · DeepSeek深度求索 DeepSeek 网页搜索抓取 API 限免至 10 月 31 日:Agent 工具调用暂免计费限时免费(截至 2026-10-31 23:59:59;11 月 1 日起标准价每 1,000 次成功请求 ¥5)
- 额度 · DeepSeekDeepSeek 深度求索 Harness 桌面端送 6 元体验金:登录即领 7 天有效体验 V4.1-Flash6 元体验赠金(限量发放,到账后 7 天有效)
- 折扣 · DeepSeek深度求索 DeepSeek API错峰5折:夜间周末半价调用模型空闲时段5折;Flash非缓存输入¥1/百万Token、输出¥4/百万Token
信息来源
- DeepSeek 官方指南 · 网页搜索与抓取api-docs.deepseek.com/zh-cn/guides/search
- DeepSeek Search API Referenceapi-docs.deepseek.com/zh-cn/api/search
- DeepSeek Fetch API Referenceapi-docs.deepseek.com/zh-cn/api/fetch
- DeepSeek 官方 API 价格与计费规则api-docs.deepseek.com/zh-cn/quick_start/pricing
- DeepSeek 开放平台控制台platform.deepseek.com
- DeepSeek Harness 官方主页www.deepseek.com/harness
最后核实日期:2026-10-20 · 政策可能随时调整,请以官方页面为准
继续看
- DeepSeek Harness 教程:安装桌面端、配置模型与插件 · 约 15 分钟
- 免费 AI API 新手指南:领额度、创建 Key 与选择编程工具 · 约 30 分钟走完全程