共计 7471 个字符,预计需要花费 19 分钟才能阅读完成。
如果你已经部署了
Open WebUI
但苦于不能联网搜索,或者也部署了SearXNG
,但困于启用联网搜索时总是无法正常联网搜索到结果,那么本文内容或许对您有帮助。
1. 什么是联网搜索
大模型应用的联网搜索是指将大模型与搜索引擎API相结合,通过调用外部搜索引擎来获取实时信息,从而提升模型的回答质量和时效性。联网搜索是一种 RAG(Retrieval-Augmented Generation,检索增强生成)能力,它使得大模型能够突破预训练数据的时间边界,提供时效精准的智能问答服务。
联网搜索的基本过程一般主要包括:用户输入 -> 意图识别 -> 联网搜索取得结果 -> 搜索结果处理(内容处理、链接详情获取、内容解析、嵌入模型相关信息召回) -> 通用大模型总结推理 -> 输出结果
。
联网搜索功能的实现主要是通过搜索引擎 API 调用形式,传入经过模型意图识别解析后的语句并返回搜索结果。当前有如 Google、bing、yahoo、bocha 等厂商支持提供此类 API,可以通过申请并调用它们的 API 快速实现联网搜索能力。但对于在国内网络环境下私有化部署大模型服务来说,主要存在如下问题:
- 在国内网络环境下,可直接调用并且效果较好的主要有 bing 和 bocha
- bing 需要绑定国际信用卡,门槛相对较高
- 免费额度有限,重度使用需要付费购买额度
- 在企业内部有严格隐私规定要求的情况下,私有化部署搜索服务更合规
在上一篇文章中,我们介绍了如何私有化部署ollama+deepseek+open-webui
服务:
本文将介绍如何使用 docker 和 docker-compose 部署 SearXNG
,为 DeepSeek+Open-WebUI
应用提供完全私有化部署的联网搜索 API。
基于国内特色的网络环境等原因,默认情况下 SearXNG 所支持的大部分查询引擎都无法正常使用,在配置使用过程中遇到了许多坑,本文还将重点介绍如何解决这些问题。
2. 安装 docker 和 docker-compose
基于 docker 和 docker-compose 安装比较简单省事,首先请确保已安装 docker 和 docker-compose。Windows 和 macOS 下安装非常简单,下载 docker-desktop 并安装即可。另外需注意查找最新可用的国内代理镜像并配置,本文不做详述。
如果你是在公司内且被通知禁止使用 docker-desktop,可以考虑安装 podman 以替代,安装方法可参考这篇文章:
3. SearXNG 介绍及安装与配置
SearXNG 是一个开源的、可定制的搜索引擎,它允许用户在本地部署自己的搜索引擎,从而实现数据隐私和搜索结果的控制。SearXNG 支持接入多种搜索引擎,包括 Google、DuckDuckGo、Bing 等,并且可以自行编写 python 代码添加自定义搜索数据源能力。
基于 SearXNG 提供的 API 能力,可以轻松支持 AI 应用中的联网搜索功能。
3.1 SearXNG 安装前准备
主要是准备配置文件。这里以 Linux / macOS 为例,假若存放于 /data/searxng/searxng
目录下。
从终端中执行如下命令创建目录,并进入到目录下:
mkdir -p /data/searxng/searxng | |
cd /data/searxng/searxng |
新建文件 settings.yml
文件,内容参考:
# see https://docs.searxng.org/admin/settings/settings.html#settings-use-default-settings | |
use_default_settings: true | |
general: | |
debug: true | |
engines: | |
# 启用默认禁用的引擎 | |
- name: bing | |
disabled: false | |
- name: bilibili | |
engine: bilibili | |
shortcut: bil | |
disabled: false | |
# 禁用默认启用的引擎 | |
- name: arch linux wiki | |
engine: archlinux | |
disabled: true | |
- name: duckduckgo | |
engine: duckduckgo | |
distabled: true | |
- name: github | |
engine: github | |
shortcut: gh | |
disabled: true | |
- name: wikipedia | |
engine: wikipedia | |
disabled: true | |
server: | |
# base_url is defined in the SEARXNG_BASE_URL environment variable, see .env and docker-compose.yml | |
secret_key: "ultrasecretkey" # change this! 这里一定要修改 | |
limiter: false # can be disabled for a private instance | |
image_proxy: true | |
search: | |
formats: | |
- html | |
- json # 允许以 json 形式返回结果 | |
ui: | |
static_use_hash: true | |
redis: | |
url: redis://redis:6379/0 |
主要配置说明:
general.debug
开启了调试模式,在安装初期可以打印详细日志帮助分析可能遇到的各种搜索异常问题engines
部分自定义了一些搜索引擎的默认启用或关闭,这里主要是禁用了国内无法访问的一些引擎。全部可用引擎及配置可参考如下地址的内容:- https://github.com/searxng/searxng/blob/master/searx/settings.yml
redis.url
部分指定了 redis 访问形式。如果你自定义了 redis 服务,则也要对应调整这里secret_key
一定要修改为自定义的内容,随便写都行
新建 limiter.toml
文件,内容参考:
# See https://github.com/searxng/searxng/blob/master/searx/limiter.toml | |
[botdetection.ip_limit] | |
# activate link_token method in the ip_limit method | |
link_token = false |
3.2 基于 docker 安装和运行 SearXNG
进入到 /data/searxng
目录下,新建 docker-compose.yml
文件,内容如下:
version: '3' | |
services: | |
redis: | |
container_name: redis | |
image: hub.mirrorify.net/valkey/valkey:8-alpine | |
command: valkey-server --save 30 1 --loglevel warning | |
restart: unless-stopped | |
networks: | |
- searxng | |
volumes: | |
- valkey-data2:/data | |
cap_drop: | |
- ALL | |
cap_add: | |
- SETGID | |
- SETUID | |
- DAC_OVERRIDE | |
logging: | |
driver: "json-file" | |
options: | |
max-size: "1m" | |
max-file: "1" | |
searxng: | |
container_name: searxng | |
image: hub.mirrorify.net/searxng/searxng:latest | |
restart: unless-stopped | |
networks: | |
- searxng | |
ports: | |
# 这里设置 8081 端口 | |
- 8081:8080 | |
volumes: | |
- ./searxng:/etc/searxng:rw | |
environment: | |
- SEARXNG_BASE_URL=http://192.168.0.100:8081 # https://${SEARXNG_HOSTNAME:-localhost}/ | |
- UWSGI_WORKERS=${SEARXNG_UWSGI_WORKERS:-4} | |
- UWSGI_THREADS=${SEARXNG_UWSGI_THREADS:-4} | |
cap_drop: | |
- ALL | |
cap_add: | |
- CHOWN | |
- SETGID | |
- SETUID | |
logging: | |
driver: "json-file" | |
options: | |
max-size: "1m" | |
max-file: "1" |
主要配置说明:
image
部分使用了hub.mirrorify.net
代理地址替代hub.docker.io
,可视实际情况修改或移除SEARXNG_BASE_URL
指定了SearXNG
服务的访问地址,应根据实际修改port
部分映射了8081
端口到外部,可通过http://localhost:8081
访问服务
接着执行如下命令拉取镜像并启动:
# 先停止已启动的服务 | |
docker-compose down | |
# 启动服务 - 后台守护进程模式 | |
sudo docker-compose up -d | |
# 启动服务 - 前台模式,当遇到问题需要结合日志即时分析时,可用这种模式启动 | |
sudo docker-compose up |
在浏览器中访问 http://localhost:8081
,您将看到 SearXNG 的界面。您可以输入搜索词并点击搜索按钮,以查看搜索结果。
3.3 扩展:为 SearXNG 增加自定义的搜索源
SearXNG
本身已支持几十种数据搜索源,它们的实现代码可以从这里了解: https://github.com/searxng/searxng/tree/master/searx/engines
我们也可以参考 searx/engines/bing.py
等的实现逻辑编写自定义的数据搜索方法,然后将它放到 searx/engines
目录下即可。
对于 docker 部署模式来说,则可以进行文件映射到该目录下。例如,假若我们已经编写了 wechat.py
用于实现基于微信公众号文章的搜索,并放在当前目录的 engines
目录下,则可作如下配置:
volumes: | |
- ./searxng:/etc/searxng:rw | |
- ./engines/wechat.py:/user/local/searxng/searx/engines/wechat.py |
然后在 settings.yml
文件中增加启用它的配置即可。
- 【扩展参考】SearXNG 自定义实现微信搜索:
- https://blog.csdn.net/qq_62784654/article/details/140821382
- https://github.com/ava131/Searxng-with-WeChat/commit/ba6a26001d7b0b83992684989443659df4c043d6
4. 安装 Open WebUI 并配置 SearXNG 联网搜索
请注意提前使用 ollama 拉取涉及到的模型:
# 拉取 deepseek-r1 模型 | |
# 可视您硬件配置情况改为适合的其他大小版本,如 14b、32b | |
ollama pull deepseek-r1:8b | |
# 拉取 embedding 嵌入模型 | |
ollama pull bge-m3 | |
# 拉取 reranker 重排模型 | |
ollama pull linux6200/bge-reranker-v2-m3 |
4.1. 基于 docker 安装 Open WebUI
如果你没有安装 Open WebUI
,可参考如下内容新建 docker-compose.yml
文件:
services: | |
open-webui: | |
# image: ghcr.io/open-webui/open-webui:main | |
image: ghcr.mirrorify.net/open-webui/open-webui:main | |
environment: | |
# 日志全局为全局 DEBUG 模式,可以打印更多的信息。在需分析问题时可配置,其他时间可注释 | |
- GLOBAL_LOG_LEVEL=DEBUG | |
# ollama 访问地址。请确保已安装了 ollama | |
- OLLAMA_API_BASE_URL=http://host.dcoker.internal:11434/api | |
# 自定义 HF 国内代理地址 | |
- HF_ENDPOINT=https://hf-mirror.com | |
# 自定义网站名称 | |
# - WEBUI_NAME="OWU" | |
# 禁用 openAI,否则登录时会因为请求它超时而白屏 | |
- ENABLE_OPENAI_API=false | |
# 如果有 open AI 服务的代理地址,可以通过这里指定 | |
- OPENAI_API_BASE_URL=https://api.openai.com/v1 | |
# 允许所有来源的站点跨域请求服务 API。若服务部署到了互联网访问,不要这么配置 | |
- CORS_ALLOW_ORIGIN=* | |
# 指定默认嵌入模型,请注意先拉取该模型:ollama pull bge-m3 | |
- RAG_EMBEDDING_MODEL=bge-m3 | |
# 指定默认使用的模型。请先拉取该模型:ollama pull deepseek-r1:8b | |
- DEFAULT_MODELS=deepseek-r1:8b | |
# 允许新用户注册 | |
- ENABLE_OAUTH_SIGNUP=true | |
ports: | |
- 8080:8080 | |
volumes: | |
- ./open_webui_data:/app/backend/data |
主要配置说明:
image
部分使用了当前国内可访问的镜像代替ghcr.io
,您应当检测它的可用性,并可能需要视情况更换。- 需要特别注意
environment
部分相关的配置及说明,如设置ENABLE_OPENAI_API=false
禁用 openAI 等。
最后执行 docker-compose up -d
启动它即可。
若一切顺利则可以在浏览器中输入 http://localhost:8080
访问它,首次访问需创建管理员账号,按提示操作即可。
Open WebUI
部署及使用相关详细内容可参考:
4.2 在 Open WebUI 中配置 SearXNG 实现可用的联网搜索功能
设置语义向量模型。
操作路径:左下角个人图像 - 设置 - 管理员设置 - 文档
。主要修改配置内容:
语义向量模型引擎
设置为Ollama
语义向量模型
设置为bge-m3:latest
- 开启
混合搜索
、完整上下文模式
、PDF 图像处理(使用OCR)
重排模型
设置为linux6200/bge-reranker-v2-m3
设置联网搜索。
操作路径:左下角个人图像 - 设置 - 管理员设置 - 联网搜索
。主要修改配置内容:
- 开启
启用联网搜索
- 联网搜索引擎选择
searxng
Searxng查询URL
设置内容参考:http://192.168.0.100:8081/search?time_range=&categories=general&language=auto&locale=zh-Hans-CN&image_proxy=1&safesearch=0&theme=simple&disabled_engines=currency__general,wikidata__general,duckduckgo__general,google__general,lingva__general,qwant__general&enabled_engines=bing__general,brave__general
- 请重点关注这里的格式设置,它决定了联网搜索的成功率及耗时。主要有:
- 其中
192.168.0.100:8081
部分应修改为你 SearXNG 的实际访问地址。 disabled_engines=
后面禁用了一些国内无法访问的引擎。enabled_engines=
后面开启了几个国内可访问但 SearXNG 默认为禁止的引擎。safesearch=0
强制关闭了安全搜索。因为 Open WebUI 对接中该参数默认为 1,测试中关闭该参数可搜索获得更多的有效结果。language=auto
强制设置了搜索语言。因为 Open WebUI 对接中该参数默认为en-US
。
如需了解相关细节,可查看如下地址中 Open-WebUI
接入 SearXNG
的实现源码了解其具体逻辑:
- https://github.com/open-webui/open-webui/blob/main/backend/open_webui/retrieval/web/searxng.py
小结:
通过以上配置操作基本可以实现 Open WebUI
的联网搜索功能支持。
但经实际使用情况来看,使用体验并不算太好,这主要在于搜索引擎支持范围有限、搜索结果丰富度不够,并且在处理搜索引擎返回的多个链接时需要进一步抓取和调用文本嵌入模型分析,使得总体时间成本较高,最终体现在选中联网搜索时耗时过长上。
5. 总结与参考
通过本地化部署 open-webUI、ollama 和 SearXNG 可以让我们实现私有化使用大模型服务的目的,并且高度满足隐私保护的要求。
在国内网络环境条件下,SearXNG 默认支持的大部分搜索引擎都无法直接访问,这使得其搜索效果和使用体验都大打折扣。在与 Open WebUI 等大模型累应用进行集成配置过程中,当遇到问题时,也需要了解它们的集成对接细节,以找到具体的原因并尝试解决。
此外也需要注意,由于硬件设施条件的不同,私有化部署的服务虽然可以满足一定的 AI 能力应用并辅助工作提效,但其效果很难和互联网公司提供的付费服务类比,使用者需要注意到这种客观存在的问题。
扩展参考
- Open WebUI 文档:https://docs.openwebui.com
- SearXNG 文档:https://docs.searxng.org
- SearXNG 自定义实现微信搜索:
- https://blog.csdn.net/u011387521/article/details/143654693
- https://github.com/ava131/Searxng-with-WeChat/commit/ba6a26001d7b0b83992684989443659df4c043d6
ollama+deepseek+open-webui
安装使用及常见问题解决:https://lzw.me/a/ollama-deepseek-open-webui.html
相关文章:











