DeepSeek 联网搜索 API现在不用自己接搜索引擎了:在请求的 tools 里声明 deepseek_web_search(联网搜索)和 deepseek_read_url(阅读链接),模型填 deepseek-flash,搜索和抓网页都由服务端完成。本文按官方文档整理三种接口的配置写法、Python 调用示例、开源 chat-demo 部署方法和常见报错。

准备工作:确认模型和接口
DeepSeek 在 2026 年 11 月 13 日发布了全家桶应用 API(详细介绍见本站资讯 DeepSeek 全家桶 API 发布解读)。开始配置前先记住三点:
- 模型:联网工具目前只支持
deepseek-flash; - 密钥:在 DeepSeek 开放平台(platform.deepseek.com)创建 API Key,下文用环境变量
DEEPSEEK_API_KEY表示; - 接口:三种协议都能用,按你现有代码选一个即可。
| 协议 | 地址 | 鉴权头 | 思考开关写法 |
|---|---|---|---|
| Chat Completions | https://api.deepseek.com/chat/completions |
Authorization: Bearer |
"thinking": {"type": "enabled/disabled"} |
| Messages(Anthropic 兼容) | https://api.deepseek.com/anthropic/v1/messages |
x-api-key |
"thinking": {"type": "enabled/disabled"} |
| Responses | https://api.deepseek.com/responses |
Authorization: Bearer |
"reasoning": {"effort": "none/low/high/max"},none 为关闭 |
联网搜索和深度思考搜索的区别
两者用的是同一个工具 deepseek_web_search,区别只在思考开关:
- 关闭思考 = 联网搜索:模型自己判断要不要搜,一次搜索可以包含多个查询词,回答附带引用,和 DeepSeek 网页端的联网搜索一致;
- 开启思考 = 深度思考搜索:模型在多步推理中搜索、打开网页、页内查找,官方说明最多调用约 20 次工具后作答;
- 阅读链接:声明
deepseek_read_url后,模型会识别用户消息里的链接并抓取网页。只想读链接、不想搜索时,只声明这一个工具。
步骤一:用 curl 测试联网搜索
先用官方文档的 Chat Completions 示例验证 Key 和工具是否可用。下面这个请求开启了思考(即深度思考搜索)、阅读链接、安全校验和会话标题,并以流式返回:
curl https://api.deepseek.com/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${DEEPSEEK_API_KEY}" \
-d '{"model":"deepseek-flash","thinking": {"type":"enabled"},"tools": [{"type": "deepseek_web_search"},
{"type": "deepseek_read_url"}
],
"safety_check": {"level": "high"},
"title": {"enabled": true},
"messages": [{"role": "user", "content": "DeepSeek V4.1 有哪些更新?"}],
"stream": true
}'
想要普通联网搜索、少花点推理 Token,把 thinking 改成 {"type": "disabled"} 即可。如果你用的是 Anthropic 格式的 Messages 接口,工具要写成 {"type": "deepseek_web_search", "name": "deepseek_web_search"},鉴权头改为 x-api-key。
步骤二:在 Python 里调用并读取引用
下面用 requests 发一个非流式请求(关闭思考),按官方文档的字段读取回答、引用和工具调用记录:
import os, requests
resp = requests.post(
"https://api.deepseek.com/chat/completions",
headers={"Authorization": f"Bearer {os.environ['DEEPSEEK_API_KEY']}"},
json={
"model": "deepseek-flash",
"thinking": {"type": "disabled"},
"tools": [{"type": "deepseek_web_search"}, {"type": "deepseek_read_url"}],
"messages": [{"role": "user", "content": "今天有哪些 AI 新闻?"}],
},
timeout=300,
)
msg = resp.json()["choices"][0]["message"]
print(msg["content"]) # 回答正文
for a in msg.get("annotations", []): # 引用来源
print(a["url_citation"]["url"])
for step in msg.get("server_tool_calls", []): # 每一步的搜索 / 读网页记录
for call in step["calls"]:
print(call["kind"], call["status"], call["action"])
几个要点(均出自官方联网工具文档):
- Chat Completions 的回答正文里没有引用角标,引用放在
message.annotations,类型为url_citation,用start_index/end_index定位; - 工具调用放在扩展字段
message.server_tool_calls,kind可能是search、deep_search、read_link、image_search等; - 流式输出时,工具过程通过
server_tool_event下发,完整的server_tool_calls和annotations只在带finish_reason的最后一个 chunk 里发送一次。
可选:告诉模型日期和所在地
问“今天的新闻”这类问题时,模型需要知道当前日期。官方提供了 latest_reminder 消息,放在对应的 user 消息之前,Chat Completions 和 Messages 支持,Responses 不支持:
"messages": [{"role": "latest_reminder", "content": "2026-11-14, 星期六, 上海,Web, 中文"},
{"role": "user", "content": "今天有哪些 AI 新闻?"}
]
步骤三:多轮对话要原样回传
做聊天应用时,每次请求都要带上完整历史,并把之前的 assistant 回复 原样回传。在 Chat Completions 里就是连同 server_tool_calls 一起传回去。官方说明,阅读链接得到的网页靠调用里的 signature 还原;如果你的框架或网关把 server_tool_calls 丢了,请求照样能执行,但之前读过的网页不会再进入上下文。另外,搜索结果和之前轮次的思考本来就不会带进后续轮次,只保留回答正文。
步骤四:部署官方开源 chat-demo
不想自己写前端,可以直接用官方开源的 deepseek-ai/chat-demo。它是纯静态页面,没有应用后端,浏览器直接连 DeepSeek API,API Key 存在浏览器 localStorage,对话存在 IndexedDB。

按 README,有三种用法:
- 在线体验:打开
https://deepseek-ai.github.io/chat-demo/(文档里另一个入口是https://cdn.deepseek.com/chat-demo),在设置里填 API Key; - 下载即用:在仓库 Releases 下载压缩包,解压后双击
index.html; - 源码运行:需要 Node.js 22.12+ 和 pnpm:
git clone https://github.com/deepseek-ai/chat-demo.git
cd chat-demo
pnpm install
pnpm dev # 打开 http://localhost:8090
pnpm build # 生成静态文件到 dist/
dist/ 可以直接扔到 Nginx 等静态服务器上(没有服务器可以参考本站的 海外 VPS 专题)。默认 API 地址是 https://api.deepseek.com,如需改成自己的网关,在 rspack.config.ts 里用 createConfig({apiOrigin, devServer}) 设置;注意网关必须支持搜索、阅读链接、标题和 latest_reminder 这些扩展字段。
费用怎么算
工具调用在 Token 费之外单独计费,官方价格为网页搜索、网页抓取各 5 元 / 千次。计费细则:

- 网页搜索:按一次调用里的查询词条数计,3 个查询词计 3 次;失败或没结果不计费;
- 图片搜索:每张图计 1 次,模型框选区域时每个区域另计 1 次;
- 阅读链接:按成功抓取的网页数计,开启安全校验后被替换为
url_not_allowed等错误的网页也计费; - 实际计费次数看
usage.server_tool_use里的tool_search、tool_fetch、tool_image_search,web_search_requests只是展示用的结果块数量。
深度思考搜索一次可能调用十几次工具,成本比普通联网搜索高不少,日常问答建议先关闭思考。
常见报错与解决
返回 400:tool_choice 指定了联网工具
tool_choice 不能指定 deepseek_web_search 或 deepseek_read_url,否则返回 400,是否搜索由模型判断。另外 tool_choice: "none" 会关闭全部工具,包括阅读链接。
返回 400:传了 web_search_options
Chat Completions 里声明了这些工具后,再传 OpenAI 风格的 web_search_options 会返回 400,删掉它,改在 tools 里声明。response_format 不是 text,或传了 logprobs、top_logprobs,同样会 400。
temperature 等参数不生效
这是官方设计:声明了联网工具、safety_check 为 high 或开启 title 后,temperature、top_p、stop、seed 等由服务端决定。max_tokens 仍生效,但限制的是每一步推理的输出长度。
阅读链接失败:url_not_accessible / url_not_allowed
url_not_accessible 表示链接无法读取;url_not_allowed 表示不允许读取或网页没通过内容安全审核;unavailable 是服务不可用或调用未完成。换一个可公开访问的链接再试。
OpenAI Python SDK 的 get_final_completion() 报错
官方文档提示:响应以 content_filter 或 length 结束时,OpenAI SDK .stream() 的 get_final_completion() 会报错。遇到时先判断 finish_reason,length 就调大 max_tokens,content_filter 是被安全审核拒答。
401、429 等通用错误
401 检查 Key 是否填对、鉴权头是否匹配协议;429 是并发或频率超限,处理思路可参考本站的 DeepSeek R1 联网搜索 API 配置教程 和 Claude Code 接入 DeepSeek 教程 里的排查步骤。
常见问题
DeepSeek 联网搜索 API 能用在 deepseek-pro 上吗?
按官方文档,目前请使用 deepseek-flash 模型。
对外上线的应用需要注意什么?
官方要求对外提供服务时开启 safety_check,并自行履行内容安全审核、大模型登记、AI 标识等义务。
chat-demo 会把我的 Key 传到第三方吗?
README 说明 Key 和设置存在浏览器本地,消息、附件和语音内容会发到你配置的 API 服务。用公共电脑时记得清理浏览器数据。
信息来源
- DeepSeek API 文档:联网工具
- DeepSeek API 文档:构建 Chatbot
- DeepSeek API 文档:用户元信息标记(latest_reminder)
- DeepSeek API 文档:思考模式
- DeepSeek 全家桶应用 API 发布公告(2026-11-13)
- GitHub:deepseek-ai/chat-demo
整理时间:2026-11-14(Asia/Shanghai)。配置方法和价格均据上述官方文档整理,本文未做实测;以 DeepSeek 开放平台最新说明为准。
