如果你已经部署了 Open WebUI 但苦于不能联网搜索,或者也部署了 SearXNG,但困于启用联网搜索时总是无法正常联网搜索到结果,那么本文内容或许对您有帮助。
一、什么是联网搜索

大模型应用的联网搜索是指将大模型与搜索引擎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 所支持的大部分查询引擎都无法正常使用,在配置使用过程中遇到了许多坑,本文还将重点介绍如何解决这些问题。
二、安装 docker 和 docker-compose
基于 docker 和 docker-compose 安装比较简单省事,首先请确保已安装 docker 和 docker-compose。Windows 和 macOS 下安装非常简单,下载 docker-desktop 并安装即可。
三、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 自定义实现微信搜索:
参考1:https://blog.csdn.net/qq_62784654/article/details/140821382
参考2:https://github.com/ava131/Searxng-with-WeChat/commit/ba6a26001d7b0b83992684989443659df4c043d6
四. 安装 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 访问它,首次访问需创建管理员账号,按提示操作即可。
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 的实现源码了解其具体逻辑:
小结:
通过以上配置操作基本可以实现 Open WebUI 的联网搜索功能支持。
但经实际使用情况来看,使用体验并不算太好,这主要在于搜索引擎支持范围有限、搜索结果丰富度不够,并且在处理搜索引擎返回的多个链接时需要进一步抓取和调用文本嵌入模型分析,使得总体时间成本较高,最终体现在选中联网搜索时耗时过长上。

五、总结与参考
通过本地化部署 open-webUI、ollama 和 SearXNG 可以让我们实现私有化使用大模型服务的目的,并且高度满足隐私保护的要求。
在国内网络环境条件下,SearXNG 默认支持的大部分搜索引擎都无法直接访问,这使得其搜索效果和使用体验都大打折扣。在与 Open WebUI 等大模型累应用进行集成配置过程中,当遇到问题时,也需要了解它们的集成对接细节,以找到具体的原因并尝试解决。
此外也需要注意,由于硬件设施条件的不同,私有化部署的服务虽然可以满足一定的 AI 能力应用并辅助工作提效,但其效果很难和互联网公司提供的付费服务类比,使用者需要注意到这种客观存在的问题。
扩展参考:
- Open WebUI 文档:https://docs.openwebui.com
- SearXNG 文档:https://docs.searxng.org
- ollama+deepseek+open-webui 安装使用及常见问题解决:https://lzw.me/a/ollama-deepseek-open-webui.html
SearXNG 自定义实现微信搜索:
- https://blog.csdn.net/u011387521/article/details/143654693
- https://github.com/ava131/Searxng-with-WeChat/commit/ba6a26001d7b0b83992684989443659df4c043d6
转载作品,原作者:志文工作室,文章来源:https://lzw.me/a/searxng-openwebui.html