本地部署DeepSeek R1+Dify+SearXNG,支持私有知识库、智能体、联网搜索的保姆级教

文章正文
发布时间:2025-02-21 03:55

今天,家政服务13825404095教大家在本地部署这个充满争议和魔幻色彩的模型,集成到Dify中,并添加私有知识库,支持联网搜索!

一、Dify部署 1.1 克隆Dify代码仓库

Dify部署的方式相对来说比较简单,这里教大家使用Docker进行部署,Docker的安装方法这里不再赘述,大家可以自行搜索。
首先,克隆 Dify 源代码至本地环境:

git clone https://github.com/langgenius/dify.git 1.2 启动Dify

然后在dify根目录下,执行下面的命令开始打包镜像:

cd dify make build-all

打包完成之后,可以在docker镜像中看到刚才打包好的镜像:

1.3进入 Dify 源代码的 Docker 目录 cd dify/docker 1.4复制环境配置文件 cp .env.example .env 1.5启动 Docker 容器

根据你系统上的 Docker Compose 版本,选择合适的命令来启动容器。你可以通过 $ docker compose version 命令检查版本,详细说明请参考 Docker 官方文档:

如果版本是 Docker Compose V2,使用以下命令:

docker compose up -d

如果版本是 Docker Compose V1,使用以下命令:

docker-compose up -d

运行命令后,你应该会看到类似以下的输出,显示所有容器的状态和端口映射:

最后检查是否所有容器都正常运行:

docker compose ps

在这个输出中,你应该可以看到包括 3 个业务服务 api / worker / web,以及 6 个基础组件 weaviate / db / redis / nginx / ssrf_proxy / sandbox

通过这些步骤,你应该可以成功在本地安装 Dify。在浏览器输入, 即可进入到Dify的首页。

二、SearXNG部署

SearXNG 是一个免费的互联网元搜索引擎,整合了各种搜索服务的检索结果。用户不会被跟踪,搜索行为也不会被分析。现在你可以直接在 Dify 中使用此工具。
下文将介绍如何在社区版使用 Docker 将 SearXNG 集成到 Dify。

2.1 修改Dify配置文件

SearXNG 的配置文件位于 dify/api/core/tools/provider/builtin/searxng/docker/settings.yml, 配置文档可参考SearXNG官网文档。你可以按需修改配置,也可直接使用默认配置。

2.2 启动服务

在 Dify 根目录下启动 Docker 容器。

cd dify docker run --rm -d -p 8081:8080 -v "${PWD}/api/core/tools/provider/builtin/searxng/dock 2.3 使用 SearXNG

在 工具 > SearXNG > 去认证 中填写访问地址,建立 Dify 服务与 SearXNG 服务的连接。SearXNG 的 Docker 内网地址一般是 :8081。

点击授权,输入:8081 之后,点击保存即可:

如果成功的话,会出现「已授权」的字样:

三、DeepSeek R1 模型部署 3.1 ollama安装

进入到ollama官网,选择对应的操作系统,下载ollama应用程序并安装:

安装成功之后,在命令行输入ollama,如果出现下面的提示,则说明安装成功。

3.2 模型部署

在ollama官网的顶部,点击「Models」,然后选择第一个「DeepSeek R1」:

在模型界面,根据自己的显存大小选择对应的版本:

比如,我的电脑是MacOS 32G,这里我选择了14b的模型,点击14b,然后在右侧会出现下载命令:

将下载命令复制到命令行中执行:

命令执行完成之后,就可以通过命令行和大模型进行对话了:

当然,只是通过命令和大模型进行对话还是不太方便了点,那么接下来,介绍一下如何将其集成到Dify中,通过可视化的方式进行调用。

四、Embedding模型部署

为了使用私有的向量数据库,并使用混合检索来提升检索精度,我们还需要通过ollama下载一个文本Embedding模型。

ollama pull shaw/dmeta-embedding-zh 五、在Dify中添加模型

登录到已经部署好的Dify中,点击右上角的头像,然后点击设置:

在「模型供应商」界面中选择「ollama」:

5.1 DeepSeek R1模型添加

在「模型名称」中填:deepseek-r1:14b。 在「基础URL中」,如果ollama和Dify是同机部署,并且Dify是通过Docker部署,那么填 :11434, 其他情况填 的地址:11434, 填完之后点击保存即可。

5.2 Embeding模型添加

在添加模型那里,点击「Text Embedding」,「模型名称」填:shaw/dmeta-embedding-zh,在「基础URL中」,如果ollama和Dify是同机部署,并且Dify是通过Docker部署,那么填:11434, 其他情况填 的地址:11434,填完之后点击保存即可。

六、上传私有知识库

在Dify的首页,点击「知识库」,进入到知识库界面:

然后点击「创建知识库」:

上传自己的文档,然后点击下一步:

在「索引方式」一栏中,选择「高质量」,Embedding模型选择刚才添加的ollama embedding模型:

在「检索设置」一栏中,选择「混合检索」,即同时执行全文检索和向量检索,并应用重排序步骤,从两类查询结果中选择匹配用户问题的最佳结果,用户可以选择设置权重或配置重新排序模型。然后点击「保存并处理」:

创建完成之后,可以看到正在处理中:

处理完成,会显示「可用」的状态:

可以点击「召回测试」来测试一下知识库的检索效果。比如我输入一个测试文本:机器学习的QQ群都有哪些,可以看到召回的第一条结果就包含了机器学习的群。

七、智能体搭建

截止到本节,我们完成了Dify、SearXNG搜索引擎、知识库、DeepSeek R1模型的创建,我们可以使用这些工具搭建一个智能体,结合本地私有知识库,并具备联网搜索的功能。
当然,为了展示,这些功能可能不会很复杂,大家可以举一反三,实现更加高级的应用。

7.1 创建智能体

点击「工作室」,选择「创建空白应用」:

选择「Agent」,然后填写「应用名称」,点击「创建」:

创建完成后,如下图所示,其中下面的信息我已经填过了,大家可以自行添加:

提示词如下:

# 职位描述 ## 角色 你的主要任务是人工智能辅助助手,能够调用知识库工具、联网搜索、网页爬虫、获取时间等相关工具,收集相关信息,回答用户的提问。 ## 技能 ### 技能1:使用知识库工具进行知识库检索相关内容 ### 技能2:使用time工具获取当前的时间 ### 技能3:使用searxng功能进行联网搜索 ### 技能4:使用webscraper功能对搜索到的相关内容进行爬取,并进行总结分析 ## 限制 - 每次都必须调用知识库工具,如果没有相关内容,再进行联网搜索 - 你的回答应严格针对分析任务。使用结构化语言,逐步思考 - 使用的语言应和用户提问的语言相同 - 搜索的关键词必须和用户提问的内容一致

另外,根据需要可以修改一下模型参数,最主要的是「上下文窗口大小」,我设置的是40000。如果过小的话,效果可能不好。

7.2 测试智能体(联网搜索功能)

接下来提问一下看看,我的问题是:DeepSeek R1是什么时间发布的。这个问题具有时效性,如果不能联网搜索的话,模型是回答不出来的。
可以看到,智能体首先在私有知识库中进行检索:

发现在知识库中没有相关的内容,于是开始调用「联网搜索」插件进行联网搜索,最终通过分析搜索到的内容,发现DeepSeek的发布时间是2025年1月20日。

可以看到DeepSeek确实是2025年1月20日发布的,智能体回答的没问题:

7.3 测试智能体(知识库功能)

接下来,在测试一下如果要找到结果在知识库中的情况。问题如下:在知识库中搜索机器学习群有哪些。
可以看到智能体先调用了知识库,同时给出了一系列思考的过程:

最终给出了一个机器学习群:

可以看到这个群确实是存在于知识库中:

八、关键词

dify镜像
小贴士:复制上面的关键词并发送到公众号,可获取相关镜像

九、镜像导入方法

打开命令行工具,输入下面的命令导入镜像:

docker load -i dify-api.tar docker load -i dify-sandbox.tar docker load -i dify-web.tar docker load -i nginx.tar docker load -i postgres.tar docker load -i redis.tar docker load -i squid.tar docker load -i weaviate.tar