Dify在使用聊天助手时,默认只与LLM交互而没有联网搜索,而我们在使用DeepSeek Chat,它是可以将联网搜索的结果作为输入的,那Dify能不能做到这一点呢?
我们可以使用searXNG作为搜索引擎搭配LLM来使用。
操作步骤
- 首先修改配置文件的权限,位于
dify/api/core/tools/provider/builtin/searxng/docker
下,全改为777
chmod -R 777 docker
- 启动Docker容器,在dify根目录下执行
docker run --rm -d -p 8081:8080 -v "${PWD}/api/core/tools/provider/builtin/searxng/docker:/etc/searxng" searxng/searxng
本地没有相应镜像的话会先拉取镜像再创建容器。
-
在dify的
工具->searXNG
中点击授权,输入searXNG的base url,IP为机器的内网IP,如192.168.0.102,端口为8081,即http://192.168.0.102:8081
。这里可能会遇到两个错误,一是500 Internal Server Error,多半是配置文件的权限不对,参考第1步,修改权限后重启容器;第二个是403错误,这时候需要修改下
setting.yml
,找到formats: - html
改为
search: formats: -json -html
也就是搜索结果要支持json格式。
- 配置搜索引擎,进到searXNG的图形界面,
http://192.168.0.102:8081
,在首选项->搜索引擎
中,先禁用所有,再启用可用的,比如bing,最后点击最下方的保存按钮。 - 编辑配置文件
settings.yml
,找到bing
,把disabled
由true
改为false
,不然通过网页访问searXNG可以正常搜索,但通过dify交互或curl、postman时都搜不到结果,返回的是No results found
,"number_of_results":0
。 - 在Dify中新建一个Chatflow应用,编排之,在
开始
和LLM
中添加一步,选择工具
中的searXNG
作为搜索引擎,并将其输入变量设置为sys.query
,再将LLM的system
改为根据搜索引擎搜到的内容:{{text}},回答用户的提问。
,其中{{text}}
是一个变量。可以先试运行也可以支持发布测试效果。
效果
其实效果不太理想,跟正常在Bing下搜索的结果不太一样,只搜关键词还可以,对长尾的支持很差,经常没有结果,比如xxx怎么样
搜到的条数很多时候是0,还没有使用tavily search工具的效果好(这个每月只有一千的免费搜索次数)。要想用的好还需要进一步研究,比如关键词拆分、搜索结果合并、链接内容抓取解析、最后结果汇总等。