在 OpenWebUI 中使用 text-embedding-3-small等模型实现RAG

本文将详细介绍如何在 OpenWebUI 中配置并使用 text-embedding-3-small
、BAAI/bge-m3
或 BAAI/bge-large
作为 RAG(Retrieval-Augmented Generation,检索增强生成)系统的嵌入模型,从而实现基于中文文档的问答功能。
一、背景介绍
OpenWebUI 是一个开源的、用户友好的 Web 界面,用于与大型语言模型(LLM)进行交互。它支持多种 LLM,并提供了知识库管理、模型配置等功能。RAG 是一种结合了信息检索和 LLM 的技术,它允许 LLM 利用外部知识库(如文档集合)来回答问题,从而提高答案的准确性和相关性。目前有如下不错的Embedding 模型,可以服务于RAG功能的实现:
text-embedding-3-small
是 OpenAI 推出的最新一代文本嵌入模型,它在性能和效率之间取得了很好的平衡。BAAI/bge-m3
是由北京智源人工智能研究院(BAAI)开发的多语言、多功能、多粒度的 Embedding 模型,支持稠密检索、稀疏检索和多向量检索。BAAI/bge-large
是 BAAI 的 bge 系列中一个较大的通用模型。
二、准备工作
在开始之前,你需要确保已完成以下准备工作:
(一) 安装并运行 OpenWebUI
- 安装 Docker Desktop: 从 Docker 官网 (https://www.docker.com/products/docker-desktop/ ) 下载并安装 Docker Desktop。
- 安装 OpenWebUI: 打开 Docker Desktop,点击底部的“Terminal”按钮,然后输入以下命令并按 Enter 键:bash折叠复制1docker run -d -p 3000:8080 –add-host=host.docker.internal:host-gateway -v openwebui:/app/backend/data –name openwebui –restart always ghcr.io/open-webui/openwebui:main(如果你有 NVIDIA GPU,可以使用
--gpus all
选项启用 GPU 加速,具体命令请参考之前的说明。) - 访问 OpenWebUI: 打开浏览器,访问
http://localhost:3000
,你应该能看到 OpenWebUI 的登录界面。首次使用需要创建账户。
(二) 安装并运行 Ollama (可选, 如果使用本地LLM和开源Embedding模型)
- 安装 Ollama: 从Ollama官网(https://ollama.com/ )下载并安装。
- 下载模型:
- 下载你选择的 LLM (例如
llama3
,qwen
,mistral
等):bash折叠复制1ollama run llama3 - 如果你需要使用
BAAI/bge-m3
或BAAI/bge-large
, 请下载:bash折叠复制123ollama run bge-m3# 或者ollama run bge-large
- 下载你选择的 LLM (例如
(三) 准备中文文档
你需要准备好要用作知识库的中文文档。这些文档可以是 TXT、PDF、Markdown 等格式。如果你使用 Zotero,可以直接上传 Zotero 存储文件夹中的 PDF 文件,或者使用 Zotero API 或 ZoteroBetterNotes 插件将文献导出为 TXT 或 Markdown 文件。
三、在 OpenWebUI 中配置 RAG
(一) 创建知识库
- 登录 OpenWebUI。
- 点击左侧导航栏中的 “Workspace”,然后选择 “Knowledge”。
- 点击 “+” 按钮创建一个新的知识库。
- 为知识库命名(例如,“我的中文文档库”)。
- 点击新知识库中的 “+” 按钮,上传你的文档。
- 如果你有多个文件或文件夹,可以选择 “Upload Directory”。
- 如果你已经通过其他方式提取了文本,可以将文本保存为 TXT 文件,然后上传。
(二) 配置 RAG 嵌入模型
- 点击左侧导航栏中的头像, 然后选择”Admin Panel”
- 在”Admin Panel”中, 选择 “Settings”.
- 在 “Settings” 页面, 选择”Documents” 选项卡。
使用 text-embedding-3-small
(推荐):
- 确认 “RAG Embedding Engine” 设置为 “openai”。
- 在 “RAG Embedding Model” 字段中,输入
text-embedding-3-small
。 - 在 “API Key” 字段中输入你的 OpenAI API 密钥。
- 点击 “Save” 保存设置。
使用 BAAI/bge-m3
或 BAAI/bge-large
(开源选项):
- 确认 “RAG Embedding Engine” 设置为 “ollama”。
- 在 “RAG Embedding Model” 字段中,输入
bge-m3
或bge-large
。 - 点击 “Save” 保存设置。
- 提示: *
BAAI/bge-m3
支持多语言、多功能和多粒度嵌入,适合需要处理多种语言、长文本或需要多种检索方式(稠密、稀疏、多向量)的场景。 *BAAI/bge-large
是一个较大的通用模型, 在资源允许的情况下, 可以提供更好的性能。 * 这两个开源模型都可能受到本地服务器性能的影响。 如果你的服务器性能有限,或者处理大量文档时遇到速度慢的问题,建议优先使用text-embedding-3-small
。
(三) 创建或选择 LLM 模型配置
- 点击左侧导航栏中的 “Models”。
- 你可以:
- 创建一个新的模型配置(点击 “+” 按钮)。
- 选择一个现有的模型配置。
- 在模型配置中:
- 选择一个基础 LLM (Base Model)。
- 如果使用
text-embedding-3-small
,可以选择 OpenAI 的模型(如gpt-3.5-turbo
、gpt-4
)或其他支持的 LLM。 - 如果使用
BAAI/bge-m3
或BAAI/bge-large
,可以选择通过 Ollama 下载的本地 LLM(如 Llama 3、Mistral、Qwen 等)。
- 如果使用
- 在 “Knowledge” 部分,选择你之前创建的包含你的文档的知识库。
- 确保 “Capabilities” 中的 “Citations” 已启用。
- (可选)调整其他参数,如 “Temperature”、”System Prompt” 等。
- 点击 “Save”(如果创建了新配置)或 “Save and Update”(如果修改了现有配置)。
- 选择一个基础 LLM (Base Model)。
四、使用 RAG 进行问答
- 点击左侧导航栏中的 “New Chat”。
- 选择你配置的模型(在 “Models” 中创建的,或者直接选择基础 LLM)。
- 在聊天框中输入你的问题。
- 要触发 RAG,请在问题前加上
#
符号,或者在问题中使用#
加上知识库的名称。例如:# 人工智能在金融领域有哪些应用?
#我的中文文档库 请总结关于 Transformer 模型的最新研究。
- OpenWebUI 将:
- 使用你选择的嵌入模型(
text-embedding-3-small
、bge-m3
或bge-large
)将你的问题转换为向量。 - 在你的知识库中搜索与问题向量相关的文档片段。
- 将检索到的文档片段作为上下文提供给基础 LLM。
- LLM 根据上下文生成答案,并在 OpenWebUI 中显示,并附带引用的文档来源。
- 使用你选择的嵌入模型(
五、注意事项
- OpenAI API 密钥: 如果使用
text-embedding-3-small
,你需要一个 OpenAI API 密钥,并且需要付费使用。 - OpenWebUI 和 Ollama 版本: 确保你使用的是最新版本的 OpenWebUI 和 Ollama(如果使用),以获得最佳的 RAG 支持和 bug 修复。
- 首次查询: 第一次查询可能需要较长时间,因为 OpenWebUI 需要初始化嵌入模型并建立索引。
- 中文支持: OpenWebUI 的界面已经支持中文。
- 文档分块: 为了获得最佳的 RAG 效果,建议将长文档分割成适当大小的块。你可以手动分块,或者依赖 OpenWebUI 的自动分块功能(但其分块策略可能比较简单)。
- 持续学习: OpenWebUI、Ollama、LLM 和 Embedding 模型领域都在快速发展,请关注官方文档和社区,了解最新的功能和最佳实践。
- bge-m3 的特殊性: 如果你使用
bge-m3
,请注意它支持多种检索方式。OpenWebUI 默认可能使用稠密检索。如果你需要使用稀疏检索或多向量检索,可能需要更高级的配置或自定义集成。
六、总结
通过以上步骤,你可以在 OpenWebUI 中成功配置并使用 text-embedding-3-small
、BAAI/bge-m3
或 BAAI/bge-large
作为 RAG 的嵌入模型,实现基于中文文档的智能问答。
text-embedding-3-small
是 OpenAI 的最新模型,性能和效率俱佳,但需要付费使用。BAAI/bge-m3
是一个多语言、多功能、多粒度的开源模型,适合更复杂的应用场景。BAAI/bge-large
是一个较大的通用模型, 在资源允许的情况下, 可以提供更好的性能。
请根据你的实际需求和资源情况选择合适的嵌入模型。OpenWebUI 简化了 RAG 系统的搭建过程,使你可以轻松地将 LLM 与你的私有知识库连接起来。 如果你需要更高级的 RAG 功能(如更精细的文档解析、元数据处理、自定义检索策略等),可以考虑使用 LangChain 或 LlamaIndex 等专业的 RAG 框架。
回复