在OpenWebUI中创建DeepSeek联网搜索工具
操作步骤
1. 新建工具:点击左下角用户名,进入工作空间->工具,创建工具,粘贴下方代码并保存
2. 填入API Key:在工具列表中点击该工具的“配置项”图标(齿轮),填入“Deepseek Api Key”并保存
3. 启用工具:聊天输入框点击扩展功能->工具,开启“DeepSeek 联网搜索”;或在设置中编辑模型并选择该工具,此后所有使用该模型的对话自动可用
工具代码
"""
title: DeepSeek 联网搜索
description: 调用 DeepSeek 官方 Search / Fetch API,为模型提供实时网页检索能力
version: 1.0.0
requirements: requests
license: MIT
"""
import requests
from pydantic import BaseModel, Field
class Tools:
class Valves(BaseModel):
DEEPSEEK_API_KEY: str = Field(
default="",
description="DeepSeek API Key,在 platform.deepseek.com 的 API Keys 页面创建",
)
RESULT_COUNT: int = Field(
default=5,
description="每次搜索返回的结果条数(1-50,默认 10)",
)
NEED_CONTENT: bool = Field(
default=False,
description="是否让搜索接口直接返回网页正文(开启后正文较长,可能占用较多上下文)",
)
def __init__(self):
self.valves = self.Valves()
self.citation = True
def deepseek_search(self, query: str) -> str:
"""
使用 DeepSeek 官方搜索引擎检索实时网页信息。当用户的问题涉及新闻、最新动态、
实时数据、价格等模型训练数据覆盖不到的内容时,必须先调用本工具检索,再依据结果作答。
:param query: 搜索查询词(1-128 个字符,支持 site:、lang:、after:、before: 等语法)
:return: 结构化搜索结果,包含标题、链接与摘要
"""
if not self.valves.DEEPSEEK_API_KEY:
return "错误:请先在工具设置(Valves)中填入 DEEPSEEK_API_KEY。"
try:
resp = requests.post(
"https://api.deepseek.com/v1/tools/search",
headers={
"Authorization": f"Bearer {self.valves.DEEPSEEK_API_KEY}",
"Content-Type": "application/json",
},
json={
"query": query,
"count": self.valves.RESULT_COUNT,
"need_content": self.valves.NEED_CONTENT,
},
timeout=30,
)
resp.raise_for_status()
results = resp.json().get("results", [])
if not results:
return "未搜索到相关结果,请更换查询词重试。"
lines = []
for i, r in enumerate(results):
entry = (
f"[{i + 1}] {r.get('title', '')}\n"
f"链接:{r.get('url', '')}\n"
f"日期:{r.get('date', '') or '未知'}\n"
f"摘要:{r.get('summary') or r.get('snippet', '')}"
)
content = r.get("content")
if content:
entry += f"\n正文:{content[:2000]}"
lines.append(entry)
return "\n\n".join(lines)
except Exception as e:
return f"搜索失败:{e}"
def deepseek_fetch(self, url: str) -> str:
"""
抓取指定网页的正文内容(返回 Markdown)。当需要阅读某个搜索结果
或用户给出的具体链接时调用。
:param url: 要抓取的网页地址(HTTP/HTTPS)
:return: 网页标题与正文内容
"""
if not self.valves.DEEPSEEK_API_KEY:
return "错误:请先在工具设置(Valves)中填入 DEEPSEEK_API_KEY。"
try:
resp = requests.post(
"https://api.deepseek.com/v1/tools/fetch",
headers={
"Authorization": f"Bearer {self.valves.DEEPSEEK_API_KEY}",
"Content-Type": "application/json",
},
json={"url": url},
timeout=30,
)
resp.raise_for_status()
page = resp.json()
return f"标题:{page.get('title', '')}\n\n{page.get('content', '')}"
except Exception as e:
return f"抓取失败:{e}"