DeepSeek API+SearXNG联网搜索

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

DeepSeek API+SearXNG联网搜索

本文最初发布在我的Substack通讯中:“半专家。” 那个通讯是为那些技术背景不如我的Medium读者的读者准备的。因此,如果你已经安装了这些工具,可以跳过设置部分。

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

这将是一项相当技术性的任务,我在考虑时感到很困难,因为通讯定位为以非技术性的方式解释技术内容,但为了帮助那些想开始AI之旅的人们,我还是决定写这篇文章。

我尽力以非技术性的方式解释(因为我们是半专家,对吧?),但如果您仍然有任何问题,请在Substack上给我发私信(特别是如果您使用的是Windows;我是用Mac完成这个设置的)。

1、期望

按照这个快速指南操作后,你可以在笔记本电脑或台式机上启动一个简化的聊天机器人,如下所示:

一个由DeepSeek R1驱动的基本聊天机器人,能够执行网络搜索

(输出格式可以更美观一些,但稍后再做。我强迫自己今天发布这篇文章)

我们将通过基本设置和分步指南来启动您的AI学习之旅。

2、为什么在本地运行?

我不能使用DeepSeek应用程序/网页版本吗?

当然可以。

随着DeepSeek AI助手越来越受欢迎,我看到这种情况的频率越来越高:

我可以想象它有多忙。

……而且这种情况可能会持续一段时间。

此外,人们可能对使用这些公司的AI助手服务有隐私顾虑。

如果仅在你的计算机上运行,则不会有这种担忧。

最后,如果你想学习AI,这也是熟悉一些开发工具的好方法。

3、设置资源

在开始之前,我们需要以下内容:

  • 你的本地命令终端(只需在Mac上进入“终端”,在Windows上进入“命令提示符”)
  • Python
  • Docker Desktop
  • 代码编辑器

3.1 安装Ollama

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:看到一个搜索界面:

SearXNG用户界面

稍后,在我们的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输入到浏览器中:

具有简单UI的聊天机器人,为您提供搜索网络的功能

恭喜!你现在有了一个本地聊天机器人,不再完全依赖DeepSeek应用程序。

你可以尝试输入一些提示并与聊天机器人互动,看看它的表现如何。Gradio提供了一个“标记”按钮,一个简单的UI功能,允许你将响应和聊天记录保存到项目工作目录中的CSV文件中(试试看!)。

4、结束语

这只是设置一个功能齐全的本地聊天机器人的一个简单示例。还有很多优化可以做,比如改进响应格式、使用更好的蒸馏模型(更多参数)、改进UI、向模型提供反馈以及保留上下文历史。当你在编程方面更加熟练时,可能还想重构和组织代码成为一个合适的软件项目。


原文链接:Build Your Own DeepSeek-R1 ChatBot That Can Search Web

汇智网翻译整理,转载请标明出处