前提:
已安装 ollama(建议版本不低于0.5.0)
1. 安装 open-webui
方式一、使用 python 安装(推荐)
首先确保已安装 python 和 pip 工具,可通过python --version
检查版本是 3.11 以上。
然后通用命令安装:
shell
pip install open-webui
如果是 Mac 系统,需要特别注意Python环境,建议使用
sh
pip3 install open-webui
或者通过软连接处理好 python 相关命令,再使用通用命令。
sh
ln -s /usr/bin/python3 /usr/local/bin/python
ln -s /usr/bin/pip3 /usr/local/bin/pip
启动服务
sh
open-webui serve
访问验证:在浏览器打开 http://localhost:8080 ,应该能看到WebUI界面。
按提示,注册一个管理员账号。
方式二、使用 docker 安装(推荐Docker 20.10+版本)
确保已安装 Docker Engine 和 Docker Compose,然后使用命令行安装 docker 镜像。
因 CPU 版本和 Nvidia GPU 版本略有不同,请参考 open webui 的 github 说明进行安装。
docker 的端口不同,安装完成,浏览器访问的地址为 http://localhost:3000 。
然后,按提示注册一个管理员账号。
因每个人的网络环境不同,可能遇到的问题不同,需要自行排查。
详细文档参考:github.com/open-webui/...
2. 获取嵌入模型
访问 Ollama 官网,进入 models 页面,在筛选器中选择"Embedding"类型。

选一个流行的嵌入模型下载即可。
在这里,我选择了更大的 bge-m3,测试结果比较满意。它在语义理解、多语言支持和长文本处理上都表现更好。
安装方法也和大模型一样简单,可通过执行命令拉取。
sh
ollama pull bge-m3
3. 配置 open-webui:
open-webui 启动服务后,使用管理员账号登录系统。
登录成功后,在界面右上角找到并点击"管理员面板"入口。
然后,在导航菜单中找到"设置"选项,再选择"文档"设置项,这个选项负责管理文档处理和嵌入相关的功能。

找到"嵌入"配置部分,选择"Ollama"选项。接下来,在向量模型输入框中,需要准确填写刚刚下载的模型名称"bge-m3"。
这里需要注意,模型名称必须完全匹配,包括大小写和连字符。建议直接从下载时的文件名复制粘贴,避免手动输入错误。
因我的知识库比较小,文本分切器,我选了默认大小,暂时未测试到其对结果的影响。
完成这些设置后,别忘了点击页面底部的"保存"按钮使配置生效。
测试嵌入模型成功与否
新建对话,在对话框中进行一次简单的文档上传测试。
如果没有报错,控制台输出也正常的话,就可以确认嵌入功能正常工作了。
4. 准备知识库并上传
资料准备
在开始上传知识库之前,首先需要确保你的知识库内容已经按照需求整理完毕。
知识库可以包含各类文档,比如产品说明、常见问题解答(FAQ)、技术手册或行业报告等。
为了确保最佳效果,建议将文件保存为纯文本格式(.txt/.md),因为这种格式兼容性最好,系统处理起来也更高效。如果原始文件是Word(.docx)、PDF或其他格式,可以先用工具转换为纯文本,并检查内容是否完整。
资料上传
接下来,进入"工作空间"的"知识库"页面,点击"+"按钮新增知识库。
在页面中,为你的知识库起一个清晰、易于识别的名称,方便后续管理。 点击"创建知识",进入上传页面。

点击"+"按钮,选择你准备好的知识库文件/文件夹进行上传。
完成上传后,系统会自动开始处理文件内容。耐心等待片刻,即可开始使用知识库进行问答或检索。如果后续需要更新知识库,只需重复上述步骤,新增或替换文件即可。
如果文件较大(例如超过 10K),建议先手动拆分成多个小文件再上传。这样做的好处是:
- 提高系统处理效率------大文件解析可能需要更长时间,拆分后能加快上传和索引速度。
- 提升回答准确率------系统可以更精准地定位到小文件中的关键信息,避免因文件过大导致内容混淆。
例如,如果你有一份20页的产品手册,可以按章节拆分成5个文件,每个文件约4页。上传后,系统会逐个分析并建立索引,确保后续问答时能快速匹配相关内容。
5. 配置工作空间
首先,进入系统界面点击"工作空间"选项。
点击"新增模型"按钮,系统会弹出模型创建向导。
在模型类型选择界面,从列表中选择"基础模型"作为起点。
随后,在"系统提示词"输入框中,填写与你的业务场景相关的引导文本。
比如,若你的模型用于产品推荐,可以输入"请根据用户需求推荐合适的产品,并简要说明理由"。这些提示词会直接影响模型的输出风格和内容方向。
上图中,我限制了这个 "HR 机器人"只回答 HR 的内容。
最后一步是绑定知识库。在知识库项中,点击"选择知识"按钮,从下拉菜单中选择已创建的知识库。
其他配置选项(如模型参数、响应长度等)可以暂时保持默认值。
完成以上步骤后,点击"保存"即可完成工作空间的基础配置。
6. 试用
回到主页,新建对话,在上方模型中选择刚刚创建的"HR机器人",问一下知识库资料中的问题。
结果显示完全按知识库的内容输出,成功!

7. 后续思考
基于 open-webui 搭建出来的大语言模型知识库,其应用场景和想象空间其实非常广阔。
以客服场景为例,通过对接企业知识库,可以快速构建一个7×24小时在线的智能客服系统,不仅能自动解答90%的常见问题,还能通过对话记录持续优化回答质量。
更进一步,结合用户画像数据,还能实现个性化服务推荐,比如电商场景中根据用户历史订单推荐相关商品。
除了客服领域,这样的知识库在教育培训、医疗咨询、法律顾问等专业领域同样大有可为。比如在医疗行业,可以构建一个包含最新诊疗指南和药品数据库的智能问诊助手;在法律领域,可以开发能快速检索判例和法条的法律咨询机器人。这些应用不仅能提升服务效率,还能显著降低人力成本。
从技术实现角度来看,基于open-webui的二次开发确实降低了企业级应用的准入门槛。开发者通过简单的API对接,就能将大语言模型的能力快速集成到现有系统中。再加上如今云计算平台的成熟,要部署一个支持高并发的企业级应用,在技术层面已经不存在实质性障碍。
FAQ
问题1: 为什么不用 AnythingLLM?
虽然 AnythingLLM 的形态更接近传统桌面应用,使用起来可能更直观,但其界面中文支持相对一般,对于中文用户来说体验不够友好。
此外,如果要在企业内部署和使用,open-webui 这种基于网站的形式更为合适,因为它更便于团队协作和跨平台访问。
另一个关键优势是 open-webui 是开源的,这意味着企业可以根据自身需求灵活地修改前端界面或功能,比如调整布局、优化交互逻辑,甚至集成企业内部系统。
问题2:嵌入模型为什么不使用ollama排行第一的 nomic ?
不使用 nomic 的原因如下:
-
首先,nomic 的模型体积比较小,只有 274MB,这限制了它的能力范围。相比之下,其他同类型的嵌入模型通常都在 GB 级别,能够存储更多的语义信息。
-
其次,nomic 最后一次更新是一年前,可能缺乏最新的优化或训练数据。
-
另外,网上的资料对比显示,nomic 并不支持多语言,这对于需要处理多种语言的用户来说是个硬伤。而像 bge-m3 这类模型通常在设计时就考虑了多语言支持,能够更灵活地应对不同语种的场景。
尝试使用 nomic 之后,omic 的表现确实不尽如人意,具体表现为输入查询时返回的结果相关度不高。经过多次测试,结果都是如此。所以最后并没有使用 nomic。
问题3: 切换嵌入模型之后,报 400 # Embedding dimension 错误的原因及解决方法。
当你切换嵌入模型时,可能会遇到HTTP 400错误,Embedding dimension xxx does not match collection dimensionality xxx
。
这通常是因为不同模型的嵌入维度不一致。例如,原模型可能生成384维的向量,而新模型生成768维的向量,导致系统无法直接兼容旧数据。
解决这一问题需要彻底清理原有的知识库数据,完全重建索引,并重新上传文档。
这是因为向量数据库依赖于一致的维度结构来检索信息,维度不匹配会导致检索失败。建议在切换模型前备份数据,并确保所有文档重新处理以避免此类问题。
问题4: 为什么我的知识库回答不准确?优化建议与实践经验。
知识库的准确性很大程度上取决于文档的组织方式。
如果你将所有内容合并到一个大文件中(比如我最初将69个问题的原文整合为一个文件),系统可能难以精准定位和提取相关信息,导致回答模糊或错误。
后来,我将69个问题拆分为独立的文件,每个文件仅包含单一问题的内容。这一调整显著提升了回答的准确度,因为系统能更明确地定位到具体文档进行回答。
拆分前:

拆分后:


可以看到,拆分后,模型能直接关联问题与对应文件,减少无关信息的干扰。因此,建议用户将知识库文档按主题或问题拆分,以优化检索性能。