DeepSeek API+SearXNG联网搜索
在这篇文章中,我将提供一个快速概述,说明如何使用开源的DeepSeek R1模型和SearXNG搜索引擎在本地搭建一个能够进行网络搜索的聊天机器人。

本文最初发布在我的Substack通讯中:“半专家。” 那个通讯是为那些技术背景不如我的Medium读者的读者准备的。因此,如果你已经安装了这些工具,可以跳过设置部分。
在这篇文章中,我将提供一个快速概述,说明如何使用开源的DeepSeek R1模型在本地搭建一个能够进行网络搜索的聊天机器人。
这将是一项相当技术性的任务,我在考虑时感到很困难,因为通讯定位为以非技术性的方式解释技术内容,但为了帮助那些想开始AI之旅的人们,我还是决定写这篇文章。
我尽力以非技术性的方式解释(因为我们是半专家,对吧?),但如果您仍然有任何问题,请在Substack上给我发私信(特别是如果您使用的是Windows;我是用Mac完成这个设置的)。
1、期望
按照这个快速指南操作后,你可以在笔记本电脑或台式机上启动一个简化的聊天机器人,如下所示:

(输出格式可以更美观一些,但稍后再做。我强迫自己今天发布这篇文章)
我们将通过基本设置和分步指南来启动您的AI学习之旅。
2、为什么在本地运行?
我不能使用DeepSeek应用程序/网页版本吗?
当然可以。
随着DeepSeek AI助手越来越受欢迎,我看到这种情况的频率越来越高:


我可以想象它有多忙。
……而且这种情况可能会持续一段时间。
此外,人们可能对使用这些公司的AI助手服务有隐私顾虑。
如果仅在你的计算机上运行,则不会有这种担忧。
最后,如果你想学习AI,这也是熟悉一些开发工具的好方法。
3、设置资源
在开始之前,我们需要以下内容:
- 你的本地命令终端(只需在Mac上进入“终端”,在Windows上进入“命令提示符”)
- Python
- Docker Desktop
- 代码编辑器
3.1 安装Ollama
Ollama允许你在本地运行和管理大型语言模型。
首先,我们从网站下载Ollama:Ollama

- 根据你的操作系统选择相应的包。
- 安装完成后,打开你的终端。
3.2 安装DeepSeek R1模型
在终端中键入以下内容:
ollama run deepseek-r1:14b
请注意,这将占用大约9GB的磁盘空间。
DeepSeek R1还提供了其他较小的蒸馏模型可供下载。但是,我使用参数小于140亿的模型时遇到了不好的体验。
运行上述命令后,你应该会看到一个交互式终端,让你输入提示:
(base) dylanoh@Dylans-MacBook-Pro search % ollama run deepseek-r1:14b
pulling manifest
pulling 6e9f90f02bb3... 100% ▕██████████████████████████████████████████████████████████████████████████████████████▏ 9.0 GB
pulling 369ca498f347... 100% ▕██████████████████████████████████████████████████████████████████████████████████████▏ 387 B
pulling 6e4c38e1172f... 100% ▕██████████████████████████████████████████████████████████████████████████████████████▏ 1.1 KB
pulling f4d24e9138dd... 100% ▕██████████████████████████████████████████████████████████████████████████████████████▏ 148 B
pulling 3c24b0c80794... 100% ▕██████████████████████████████████████████████████████████████████████████████████████▏ 488 B
verifying sha256 digest
writing manifest
success
>>>
现在你可以开始与DeepSeek R1模型聊天了!
>>> Hey DeepSeek, how are you doing today!
<think>
</think>Hi! I'm just a virtual assistant, so I don't have feelings, but thanks for asking! How can I help you today?
直白的回答。
不过,这是一个好的开始,因为这个DeepSeek模型现在已经在您的计算机上运行了(按Ctrl + d退出与模型的对话)。
3.3 运行搜索引擎
我们在本演示中使用SearXNG。
SearXNG是一个开源搜索引擎,聚合来自多个引擎的结果而不存储或跟踪用户数据。这里有一个视频提供了更多技术指导:
我们将使用Docker Compose快速设置它。
打开你的代码编辑器或任何文本编辑器,并粘贴以下内容:
version: '3.8'
services:
searxng:
image: docker.io/searxng/searxng:latest
container_name: searxng
ports:
- "4000:8080"
volumes:
- ./searxng:/etc/searxng
restart: unless-stopped
将文件保存为“docker-compose.yml”。
我们可以通过在保存“docker-compose.yml”的同一目录下的终端中键入以下内容来启动搜索引擎。
docker-compose up -d
它将下载searxng镜像,一旦你看到以下内容,搜索引擎将在你的计算机上运行。
Creating network "search_default" with the default driver
Creating searxng ... done
打开你的浏览器,将能够在http://localhost:4000/search:看到一个搜索界面:

稍后,在我们的Python脚本中,我们将使用正在运行的搜索引擎的API(应用程序编程接口)来执行网络搜索。
3.4 安装Gradio
我保证我们不会离看到聊天机器人太远。
现在让我们安装用户界面的一个重要组件:
pip install gradio
Gradio 是一个开源的Python库,可以让您无需任何前端开发技能就能为您的Python脚本和机器学习模型创建交互式的基于Web的界面。
3.5 最终拼图:Python脚本
在最后一步中,让我们创建一个简单的Python脚本,结合所有资源并调用函数。再次打开你的代码编辑器并粘贴以下内容:
import gradio as gr
import requests
import ollama
def search_web(query: str) -> list:
SEARXNG_URL = "http://localhost:4000/search"
params = {'q': query, 'format': 'json'}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"
}
response = requests.get(SEARXNG_URL, params=params, headers=headers)
if response.status_code != 200:
print("Response status code:", response.status_code)
print("Response text:", response.text)
raise Exception(f"Search query failed with status code {response.status_code}")
return response.json().get("results", [])
def chat_with_search(query: str, use_web_search: bool):
# Optionally integrate web search based on user toggle
if use_web_search:
results = search_web(query)
context_str = format_search_results(results, max_results=5)
else:
context_str = "No additional context provided."
return generate_augmented_response(query, context_str)
def format_search_results(results: list, max_results: int = 5) -> str:
"""
Format the top search results into a context string.
"""
formatted = []
for result in results[:max_results]:
title = result.get("title", "No title")
url = result.get("url", "No URL")
snippet = result.get("content", "No snippet")
formatted.append(f"Title: {title}\nURL: {url}\nSnippet: {snippet}")
return "\n\n".join(formatted)
def generate_augmented_response(query: str, context: str) -> str:
"""
Combine the user's query with the search context and send it to DeepSeek R1 via Ollama.
"""
# Create a composite prompt
composite_prompt = f"""
{context}
Please use the following web search results to provide the detailed summary of the request above.
{query}
Answer:"""
response = ollama.chat(
model="deepseek-r1:14b",
messages=[
{"role": "user", "content": composite_prompt}
]
)
return response["message"]["content"]
iface = gr.Interface(
fn=chat_with_search,
inputs=[
gr.Textbox(label="Your Query"),
gr.Checkbox(label="Enable Web Search", value=True)
],
outputs="text",
title="DeepSeek R1 with Web Search",
description="Ask questions and get answers augmented with real-time web search results."
)
iface.launch()
将此文件保存为“deepseek.py”。
现在你不必理解脚本的具体内容,只需要知道这个Python脚本导入了运行此聊天机器人所需的全部资源并执行它们。
让我们在终端中运行它:
python deepseek.py
您应该会看到以下内容:
* Running on local URL: http://127.0.0.1:7860
To create a public link, set `share=True` in `launch()`.
现在可以将http://127.0.0.1:7860输入到浏览器中:

恭喜!你现在有了一个本地聊天机器人,不再完全依赖DeepSeek应用程序。
你可以尝试输入一些提示并与聊天机器人互动,看看它的表现如何。Gradio提供了一个“标记”按钮,一个简单的UI功能,允许你将响应和聊天记录保存到项目工作目录中的CSV文件中(试试看!)。
4、结束语
这只是设置一个功能齐全的本地聊天机器人的一个简单示例。还有很多优化可以做,比如改进响应格式、使用更好的蒸馏模型(更多参数)、改进UI、向模型提供反馈以及保留上下文历史。当你在编程方面更加熟练时,可能还想重构和组织代码成为一个合适的软件项目。
原文链接:Build Your Own DeepSeek-R1 ChatBot That Can Search Web
汇智网翻译整理,转载请标明出处