目录
  1. 1. 目录
  2. 2. 项目速览
    1. 2.1. MCP 集成:原生支持 + mcpo 代理双通道
  3. 3. 功能概述
    1. 3.1. 对话与交互
    2. 3.2. Knowledge 与 RAG
    3. 3.3. 模型与 Agent
    4. 3.4. Notes(笔记系统)
    5. 3.5. Channels(频道系统)
    6. 3.6. Open Terminal
    7. 3.7. 可扩展性
    8. 3.8. 认证与权限
    9. 3.9. 生产就绪基础设施
  4. 4. 适用场景
    1. 4.1. 个人 AI 助手
    2. 4.2. 团队 AI 工作平台
    3. 4.3. RAG 知识库问答系统
    4. 4.4. MCP 工具集成中心
    5. 4.5. 模型评测与对比
    6. 4.6. AI 应用开发原型的交互层
  5. 5. 快速上手
    1. 5.1. Docker 部署(推荐)
    2. 5.2. pip 部署
    3. 5.3. 通过 mcpo 接入 MCP 工具
  6. 6. 源码架构
    1. 6.1. 整体架构
    2. 6.2. 技术栈总览
    3. 6.3. 后端设计
    4. 6.4. 前端设计
    5. 6.5. 可扩展性架构
  7. 7. 实操 Demo
    1. 7.1. Demo 1: 构建 RAG 知识库问答系统
    2. 7.2. Demo 2: 通过 mcpo 接入 MCP Memory 服务
    3. 7.3. Demo 3: 使用 Pipelines 实现自定义功能
  8. 8. 同类对比
  9. 9. 参考资源
Open WebUI — 自托管 AI 界面平台与 MCP 工具集成

GitHub: open-webui/open-webui
Stars: 142,000+ | Language: Python (35.3%), Svelte (32.4%), JavaScript (24.6%), TypeScript (4.9%)
License: Open WebUI License(保留 “Open WebUI” 品牌标识)
最新版本: v0.9.6 (2026-06-01) | Commits: 16,810+ | Releases: 163
官网: openwebui.com | 文档: docs.openwebui.com

目录

  1. 项目速览
  2. 功能概述
  3. 适用场景
  4. 快速上手
  5. 源码架构
  6. 实操 Demo
  7. 同类对比
  8. 参考资源

项目速览

Open WebUI 是目前 GitHub 上最受欢迎的自托管 AI 界面平台,截至 2026 年 6 月已获得超过 142,000 颗 Star,是 AI 开源领域 Star 数排名前三的项目之一。它提供了一个功能完整的 Web 界面,让用户可以通过浏览器与本地或云端的大语言模型进行交互,设计目标为「完全离线可运行」。

Open WebUI 的核心竞争力在于其「全栈一体化」架构:它不仅是一个聊天界面,更是一套完整的 AI 工作平台,集成了对话管理、RAG 知识库、模型管理、工具调用、多模态交互(语音/视频/图像)、用户权限管理、插件扩展等能力。支持 Docker 一行命令部署,也支持 Kubernetes、pip install 和桌面应用安装。

项目采用 Svelte 构建前端、Python 构建后端,使用 Tailwind CSS + Vite 作为前端工程栈。2026 年 6 月发布的 v0.9.6 版本是其第 163 个正式发布,项目自开源以来保持着极高频率的迭代节奏(平均每周一个版本)。

MCP 集成:原生支持 + mcpo 代理双通道

Open WebUI 对 MCP 的支持通过两条路径实现:

  1. 原生 Streamable HTTP: 平台的 Extensibility 体系直接支持 Native Streamable HTTP for Model Context Protocol servers,可直连 MCP 服务端。
  2. mcpo 代理(推荐):由 Open WebUI 团队开发的独立工具 open-webui/mcpo,将任意 MCP 服务器包装为 RESTful OpenAPI 接口,Open WebUI 通过其 OpenAPI Servers 机制自动发现和使用这些工具。

功能概述

对话与交互

Open WebUI 提供企业级的对话体验:

  • 多模型并行对话: 同时运行两个模型,并列比较响应
  • 文件与图片上传: 附加文档、图片、代码供 AI 分析
  • Web 搜索: AI 实时搜索网络并引用来源
  • 代码执行: 在浏览器中直接运行 Python,或通过 Open Terminal 执行任意命令
  • 消息队列: AI 回复时可继续输入,消息自动排队发送
  • Memory: AI 跨对话记住关于用户的事实
  • 文件管理: 文件夹、标签、置顶,按工作方式组织对话
  • 语音与视频: Speech-to-Text + Text-to-Speech,支持免提语音/视频通话
  • 图像生成: 集成 DALL-E、Gemini、ComfyUI(本地)、AUTOMATIC1111(本地)
  • 自动化: 定时调度提示词自动执行
  • 任务管理: 模型维护结构化的多步骤任务列表

Knowledge 与 RAG

Open WebUI 内置了从文档摄取到检索增强生成的完整管道:

向量数据库: 官方维护 ChromaDB 和 PGVector,社区支持 Qdrant、Milvus、Elasticsearch、OpenSearch、Pinecone、S3Vector、Oracle 23ai 共 9 种选择。

混合检索: BM25(关键词匹配)+ 向量搜索(语义匹配)+ Cross-Encoder 重排序,实现检索精度最大化。

5 种内容提取引擎: Apache Tika、Docling、Azure Document Intelligence、Mistral OCR、PaddleOCR-vl,覆盖 PDF、Word、Excel、图片等格式。

智能检索模式:

  • Agentic Retrieval: 模型自主决定何时搜索和读取文档,无需手动触发
  • Full Context Mode: 注入完整文档(不切片),适合对精度要求极高的场景
  • Knowledge Base Sync: 通过 oikb 将知识库与文件夹、Git 仓库、Wiki 或云存储桶保持同步

Web 搜索: 支持 15+ 搜索提供商:SearXNG、Google PSE、Brave、Kagi、Tavily、Perplexity、DuckDuckGo、Bing、Jina、Exa 等。

Web 浏览: 使用 # 命令 + URL 直接在对话中加载网页内容。

模型与 Agent

  • Model Presets: 将系统提示词、工具、知识库和参数打包为一个预设
  • 动态变量: {{ USER_NAME }}{{ CURRENT_DATE }} 等自动注入到提示词
  • 绑定工具: 按模型强制启用特定工具
  • 访问控制: 按用户/组限制模型的使用权限
  • 原生函数调用: Python 代码编辑器内置在工具工作区中,模型可直接调用用户定义的函数

Notes(笔记系统)

  • 富文本编辑器: Markdown + 富文本,浮动格式工具栏
  • AI Enhance: 选中文本原地改写或优化
  • 上下文注入: 将笔记附加到对话中,不经过向量搜索切片的无损上下文供给
  • Agentic 访问: 模型可自主搜索、阅读和更新笔记

Channels(频道系统)

  • @model 标记: 在频道对话中按需召唤任意 AI 模型
  • Threads & Reactions: 回复线程、置顶、表情反应
  • 访问控制: 公开、私有、群组、私信四种频道类型
  • AI 频道感知: 模型自主搜索和综合频道的上下文

Open Terminal

  • 命令执行: 执行真实 shell 命令并返回输出
  • 文件浏览器: 侧边栏浏览、上传、下载和编辑文件
  • 网站预览: 在 Open WebUI 内实时预览 Web 项目
  • 隔离可选: Docker 容器隔离或裸金属直接运行

可扩展性

Open WebUI 提供了多层次的可扩展体系:

扩展方式 说明
Tools & Functions 纯 Python 函数(BYOF — Bring Your Own Function),内置代码编辑器,运行时注入到对话中
Pipelines 模块化插件框架,拦截、转换和路由消息。可部署为独立服务,通过 OpenAI 兼容 URL 连接
MCP Servers 原生 Streamable HTTP 支持,直连 MCP 兼容的工具服务器
OpenAPI Servers 自动发现任何 OpenAPI 兼容端点的工具
Skills Markdown 指令集,教模型如何处理特定任务
Prompts 斜杠命令模板,带类型化输入变量和版本管理

认证与权限

  • RBAC: 角色、组、按资源的细粒度权限
  • SSO/OIDC/LDAP: 与任何身份提供商联邦认证
  • SCIM 2.0: 自动化的用户和组配置
  • API Keys: 程序化访问,适合脚本、机器人、外部集成

生产就绪基础设施

  • 数据库: SQLite(默认,可选加密)+ PostgreSQL
  • 对象存储: S3、Google Cloud Storage、Azure Blob Storage
  • 可观测性: OpenTelemetry 全链路追踪、指标和日志
  • 水平扩展: Redis 支持的会话管理和多 Worker WebSocket
  • Docker/K8s: 一行 Docker 命令或 Helm Chart 即可部署

适用场景

个人 AI 助手

最简单的使用场景:在自己的机器上部署 Open WebUI,连接本地 Ollama 或云端 API,获得类似 ChatGPT Plus 的完整体验,但数据完全属于自己。支持离线模式(HF_HUB_OFFLINE=1),无需互联网连接。

团队 AI 工作平台

通过 RBAC 权限系统、Channels 频道和 Notes 笔记功能,团队可以在一个平台上共享 AI 资源、协作对话、积累团队知识库。支持 LDAP/AD/SSO 企业认证和 SCIM 2.0 自动配置。

RAG 知识库问答系统

借助内置的 9 种向量数据库支持和 5 种文档提取引擎,快速搭建基于私有文档的问答系统。Hybrid Search(BM25 + 向量 + Rerank)确保检索质量,Full Context Mode 保证机密文档不被切分。

MCP 工具集成中心

通过原生 MCP Streamable HTTP 支持或 mcpo 代理,Open WebUI 可以成为组织内所有 MCP 工具的统一入口。将 Memory、Fetch、Git、Sequential Thinking 等 MCP 服务器接入后,用户在一个聊天界面中即可使用所有工具。

模型评测与对比

利用 Model Presets 和 Many Models Conversations 功能,同时对比多个模型对同一问题的回答。内置的 Model Arena、A/B Testing 和 ELO 排行榜为正式评测提供基础设施。

AI 应用开发原型的交互层

对于正在开发 AI Agent 或工具链的团队,Open WebUI 可充当交互界面层,通过 Functions/Pipelines/MCP 三种方式将开发中的工具快速暴露给测试用户,无需自建前端。

快速上手

Docker 部署(推荐)

默认安装(连接本地 Ollama):

docker run -d -p 3000:8080 \
--add-host=host.docker.internal:host-gateway \
-v open-webui:/app/backend/data \
--name open-webui \
--restart always \
ghcr.io/open-webui/open-webui:main

Nvidia GPU 支持:

docker run -d -p 3000:8080 \
--gpus all \
--add-host=host.docker.internal:host-gateway \
-v open-webui:/app/backend/data \
--name open-webui \
--restart always \
ghcr.io/open-webui/open-webui:cuda

捆绑 Ollama 一键部署(CPU):

docker run -d -p 3000:8080 \
-v ollama:/root/.ollama \
-v open-webui:/app/backend/data \
--name open-webui \
--restart always \
ghcr.io/open-webui/open-webui:ollama

连接远程 Ollama:

docker run -d -p 3000:8080 \
-e OLLAMA_BASE_URL=https://ollama.example.com \
-v open-webui:/app/backend/data \
--name open-webui \
--restart always \
ghcr.io/open-webui/open-webui:main

仅使用 OpenAI API:

docker run -d -p 3000:8080 \
-e OPENAI_API_KEY=sk-your-key \
-v open-webui:/app/backend/data \
--name open-webui \
--restart always \
ghcr.io/open-webui/open-webui:main

pip 部署

pip install open-webui
open-webui serve

通过 mcpo 接入 MCP 工具

步骤一:启动 mcpo 代理

# 启动 Memory MCP 服务器,暴露为 OpenAPI 接口
uvx mcpo --port 8000 --api-key "my-secret-key" -- \
npx -y @modelcontextprotocol/server-memory

步骤二:在 Open WebUI 中添加 OpenAPI 服务器

进入 Admin Panel > Settings > Connections > OpenAPI Servers,添加:

http://localhost:8000

mcpo 会自动生成该服务器的 OpenAPI 文档(位于 http://localhost:8000/docs),Open WebUI 将自动发现所有 MCP 工具。

步骤三:多服务器配置(可选)

使用 JSON 配置文件同时挂载多个 MCP 服务器:

{
"mcpServers": {
"memory": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-memory"]
},
"fetch": {
"command": "uvx",
"args": ["mcp-server-fetch"]
},
"time": {
"command": "uvx",
"args": ["mcp-server-time", "--local-timezone=Asia/Shanghai"]
}
}
}
uvx mcpo --port 8000 --config /path/to/mcp_config.json --api-key "my-secret-key"

每个服务器会获得独立的路由前缀(如 /memory/fetch/time),Open WebUI 将分别发现它们的工具。

源码架构

整体架构

open-webui/
├── backend/ # Python 后端(FastAPI)
│ ├── open_webui/ # 核心应用
│ │ ├── main.py # FastAPI 入口
│ │ ├── routers/ # API 路由(chat, models, auth, RAG, tools...)
│ │ ├── apps/ # 子应用模块
│ │ ├── internal/ # 内部服务(数据库、存储、任务调度)
│ │ └── utils/ # 工具函数
│ ├── pyproject.toml # Python 项目配置
│ └── uv.lock # 依赖锁定
├── src/ # 前端源码(Svelte)
│ ├── lib/ # Svelte 组件库
│ ├── routes/ # 页面路由
│ └── app.html # HTML 模板
├── static/ # 静态资源
├── Dockerfile # 容器构建文件
├── docker-compose.yaml # 主 Docker Compose 编排
├── docker-compose.gpu.yaml # GPU 专用编排
├── docker-compose.api.yaml # API 专用编排
├── docker-compose.data.yaml # 数据服务编排
├── docker-compose.otel.yaml # OpenTelemetry 编排
├── Makefile # 构建自动化
├── package.json # 前端依赖
├── svelte.config.js # Svelte 配置
├── tailwind.config.js # Tailwind CSS 配置
├── vite.config.ts # Vite 构建配置
└── tsconfig.json # TypeScript 配置

技术栈总览

层级 技术 占比 说明
前端框架 Svelte 32.4% 编译时框架,运行时体积小
后端 Python (FastAPI) 35.3% 高性能异步 Web 框架
样式 Tailwind CSS 2.4% 原子化 CSS
构建 Vite 下一代前端构建工具
国际化 i18next 多语言支持
容器化 Docker + Compose 8 个 compose 文件覆盖各种场景

后端设计

后端基于 FastAPI 构建,核心特征:

  • 异步优先: 全面使用 async/await 模式,支持高并发 WebSocket 连接
  • 模块化路由: routers/ 目录下按功能域拆分路由(chat、models、auth、knowledge、tools 等)
  • 多数据库支持: 通过存储抽象层同时支持 SQLite 和 PostgreSQL
  • 多对象存储: S3/GCS/Azure Blob 通过统一接口接入
  • WebSocket 多 Worker: Redis Pub/Sub 作为消息总线,支持水平扩展下的实时通信

前端设计

前端使用 Svelte + Vite:

  • Svelte 组件化: src/lib/ 下的组件库构建了整个 UI
  • TypeScript 增强: 关键业务逻辑使用 TypeScript(4.9%)
  • PWA 支持: 完整的离线缓存策略,可在移动端安装为原生应用
  • 响应式设计: Tailwind CSS 确保桌面、平板、手机三端适配

可扩展性架构

Open WebUI 的三层扩展体系:

  1. Functions(函数层): 最简单的扩展方式,在 Web UI 中直接编写 Python 函数,代码编辑器内置在平台中
  2. Pipelines(管道层): 独立的 Python 服务(open-webui/pipelines),作为 OpenAI 兼容的中间件部署,可以在请求到达模型之前/之后拦截和修改消息
  3. MCP/OpenAPI(协议层): 通过标准协议接入外部工具服务器,实现跨平台的工具复用

实操 Demo

Demo 1: 构建 RAG 知识库问答系统

步骤一:部署 Open WebUI

docker run -d -p 3000:8080 \
-v open-webui:/app/backend/data \
--name open-webui \
ghcr.io/open-webui/open-webui:main

步骤二:配置文档知识库

进入 Workspace > Knowledge > Create Knowledge Base,上传技术文档(PDF、Markdown、代码文件等)。Open WebUI 会自动:

  1. 使用 Tika/Docling 提取文本内容
  2. 使用嵌入模型生成向量
  3. 存储到默认的 ChromaDB 中

步骤三:对话中使用知识库

在对话中通过 # 命令选择知识库,或在 Model Preset 中将知识库绑定到特定模型。提问时模型会先检索相关文档,再基于检索结果生成回答。

用户: #my-knowledge-base 这个系统的认证流程是怎样的?

AI: [检索 my-knowledge-base 中的相关文档...]
根据文档,认证流程分为三步:
1. 客户端发送登录请求到 /api/auth/login...
2. 服务器验证凭据并返回 JWT token...
3. 后续请求在 Authorization header 中携带 token...

Demo 2: 通过 mcpo 接入 MCP Memory 服务

步骤一:启动 mcpo + Memory Server

uvx mcpo --port 8000 --api-key "demo-key" -- \
npx -y @modelcontextprotocol/server-memory

访问 http://localhost:8000/docs 确认 Swagger UI 中显示所有 9 个 Memory 工具。

步骤二:在 Open WebUI 中配置

Admin Panel > Settings > Connections > OpenAPI Servers > Add:

  • URL: http://localhost:8000
  • API Key: demo-key

步骤三:在对话中验证

用户: 我叫李华,在 ByteDance 做前端工程师,喜欢用 TypeScript。

AI: [通过 OpenAPI 调用 create_entities 和 create_relations]
好的李华,我已经记下你的信息了。
- 你在 ByteDance 工作
- 职位是前端工程师
- 偏好 TypeScript
有什么需要帮助的吗?

[下一个对话]
用户: 我之前提到过我的技术栈吗?

AI: [通过 OpenAPI 调用 search_nodes 检索记忆]
是的!你之前提到在 ByteDance 做前端工程师,主要使用 TypeScript。
需要我帮你查什么跟 TypeScript 相关的内容吗?

Demo 3: 使用 Pipelines 实现自定义功能

Pipelines 是 Open WebUI 最强大的扩展机制。下面展示一个「敏感词过滤」Pipeline:

"""
pipelines.py - 敏感词过滤 Pipeline
部署方式: OPENAI_API_BASE=http://pipeline:9099
"""
from typing import List, Optional
from open_webui.pipelines import Pipeline

SENSITIVE_WORDS = ["password", "secret_key", "private_token"]

class ContentFilterPipeline(Pipeline):
def __init__(self):
self.name = "Content Filter"
self.version = "1.0.0"

async def inlet(self, body: dict, user: Optional[dict] = None) -> dict:
"""在请求到达模型之前过滤"""
messages = body.get("messages", [])
for msg in messages:
if "content" in msg and isinstance(msg["content"], str):
for word in SENSITIVE_WORDS:
msg["content"] = msg["content"].replace(word, "[REDACTED]")
return body

async def outlet(self, body: dict, user: Optional[dict] = None) -> dict:
"""在模型响应返回之前过滤"""
if "choices" in body:
for choice in body["choices"]:
if "message" in choice and "content" in choice["message"]:
for word in SENSITIVE_WORDS:
choice["message"]["content"] = (
choice["message"]["content"].replace(word, "[REDACTED]")
)
return body

部署 Pipeline 服务后,在 Open WebUI 中将模型的 OpenAI API URL 指向 Pipeline 地址即可生效。

同类对比

维度 Open WebUI LibreChat LobeChat Anything LLM
前端框架 Svelte React React/Next.js React
后端 Python (FastAPI) Node.js Node.js/Next.js Node.js
Stars 142k 23k 65k 34k
RAG 能力 9 向量库 + 5 提取引擎 + Hybrid Search 基础 RAG 有限 RAG 基础 RAG
MCP 集成 原生 + mcpo 代理
语音/视频 原生支持 基础 TTS TTS 支持
权限管理 RBAC + LDAP/SSO/SCIM 基础权限 基础权限 多用户
Pipelines 成熟插件框架 有限 插件系统 自定义 Agent
企业功能 OTel、Redis 集群、K8s 有限 有限 有限
定位 全栈 AI 平台 ChatGPT 替代 ChatGPT 替代 文档问答

参考资源

文章作者: Leo·Cheung
文章链接: http://tufusi.com/2026/06/15/SKILL-OpenWebUI/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ONE·PIECE
打赏
  • 微信
  • 支付宝

评论