Dify配置searXNG作为搜索引擎

Dify在使用聊天助手时,默认只与LLM交互而没有联网搜索,而我们在使用DeepSeek Chat,它是可以将联网搜索的结果作为输入的,那Dify能不能做到这一点呢?

我们可以使用searXNG作为搜索引擎搭配LLM来使用。

操作步骤

  1. 首先修改配置文件的权限,位于dify/api/core/tools/provider/builtin/searxng/docker下,全改为777
chmod -R 777 docker
  1. 启动Docker容器,在dify根目录下执行
docker run --rm -d -p 8081:8080 -v "${PWD}/api/core/tools/provider/builtin/searxng/docker:/etc/searxng" searxng/searxng

本地没有相应镜像的话会先拉取镜像再创建容器。

  1. 在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格式。

  1. 配置搜索引擎,进到searXNG的图形界面,http://192.168.0.102:8081,在首选项->搜索引擎中,先禁用所有,再启用可用的,比如bing,最后点击最下方的保存按钮。
  2. 编辑配置文件settings.yml,找到bing,把disabledtrue改为false,不然通过网页访问searXNG可以正常搜索,但通过dify交互或curl、postman时都搜不到结果,返回的是No results found"number_of_results":0
  3. 在Dify中新建一个Chatflow应用,编排之,在开始LLM中添加一步,选择工具中的searXNG作为搜索引擎,并将其输入变量设置为sys.query,再将LLM的system改为根据搜索引擎搜到的内容:{{text}},回答用户的提问。,其中{{text}}是一个变量。可以先试运行也可以支持发布测试效果。

效果

其实效果不太理想,跟正常在Bing下搜索的结果不太一样,只搜关键词还可以,对长尾的支持很差,经常没有结果,比如xxx怎么样搜到的条数很多时候是0,还没有使用tavily search工具的效果好(这个每月只有一千的免费搜索次数)。要想用的好还需要进一步研究,比如关键词拆分、搜索结果合并、链接内容抓取解析、最后结果汇总等。

Leave a Comment

豫ICP备19001387号-1