项目快照:open-webui/open-webui,约 148,676 个 Star,21,645 个 Fork;最新推送时间 2026-08-13T08:07:04Z。本文基于仓库公开资料撰写。
项目地址:https://github.com/open-webui/open-webui · https://openwebui.com

项目速览(TL;DR)
open-webui 是一个面向自托管场景的人工智能(AI)界面与平台,仓库描述为“User-friendly AI Interface (Supports Ollama, OpenAI API, ...)”。README 将它定位为可扩展、功能丰富、面向用户的自托管 AI 平台,并说明其设计目标是完全离线运行,同时连接 Ollama 和 OpenAI 兼容应用程序编程接口(API)。
根据给定 GitHub 元信息,项目主要语言为 Python,默认分支为 main,Star 数为 148676,Fork 数为 21645,许可证字段显示为 NOASSERTION。仓库同时包含 Python 项目配置、前端 package.json 与 Dockerfile,因此源码形态是前后端协同的应用,而不是单一 Python 命令行工具。
“Open WebUI is an extensible, feature-rich, and user-friendly self-hosted AI platform designed to operate entirely offline.”
来源:README
定位与目标用户
本项目解决的是模型服务与终端用户界面之间的整合问题:用户可以通过 Web 界面访问本地 Ollama 模型,也可以接入 OpenAI 兼容 API。它还把检索增强生成(Retrieval-Augmented Generation,RAG)、权限、插件、笔记和协作空间纳入同一套自托管应用。
目标用户应当具备部署应用、管理模型服务和处理访问凭据的能力。README 明确提到 Docker、Kubernetes、pip 和 uv 等安装路径,但给定资料没有提供完整的生产拓扑、硬件规格、并发容量或数据库容量建议,因此这些部署决策需要依据实际环境验证。
使用边界
- 如果需求是为本地 Ollama 或多个 OpenAI 兼容服务提供统一界面,项目的功能范围与该需求直接对应。
- 如果需求包含团队成员、角色、组和权限控制,README 提供了细粒度基于角色的访问控制(Role-Based Access Control,RBAC)与用户组能力说明。
- 如果需求只需要一个极简的模型调用脚本,Open WebUI 的插件、文档处理、日历和协作能力可能超出必要范围;这是根据功能范围作出的场景判断。
核心功能
核心能力可以分为模型接入、知识增强、界面扩展和协作管理四类。每项能力并非独立的模型实现,而是围绕统一 Web 应用、外部模型服务和内置推理组件组织。
模型与 API 接入
Open WebUI 可以连接 Ollama 模型,也可以连接 OpenAI 兼容 API。README 明确列举了 LMStudio、GroqCloud、Mistral、OpenRouter 和 vLLM 等可作为 API URL 指向的服务;触发条件是管理员或用户配置相应模型服务,输入是对话请求,输出则由所连接的模型服务返回,再由 WebUI 展示。
从 pyproject.toml 看,后端依赖包含 openai、anthropic 和 google-genai 客户端库,同时包含 FastAPI、Uvicorn 及异步网络库。资料没有给出每个供应商的具体配置字段、认证流程或请求接口签名,不能据此推导统一的环境变量名称。
RAG、文档与嵌入处理
README 将内置推理引擎与 RAG 联系起来,项目依赖中也包含 LangChain、文本切分器、ChromaDB、OpenSearch、句子转换器(sentence-transformers)、Transformers、PyArrow、PDF、Office 文档和图像处理相关组件。其工作链路可以从依赖关系确认到“文档解析、切分、向量化、检索和模型调用”这些组件类别,但给定资料没有提供完整的运行时数据流、默认向量数据库选择或检索接口。
Dockerfile 声明了默认嵌入模型 sentence-transformers/all-MiniLM-L6-v2,并特别说明:改变嵌入模型后,已有文档需要重新嵌入,才能继续用于 RAG Chat。该限制意味着嵌入模型不是普通界面主题配置,而会影响已持久化知识内容的向量表示。
插件、工具与外部服务
README 将 Filters、Actions、Pipes、Tools 和 Skills 列为扩展形式,并提到 MCP、MCPO 与 OpenAPI 工具服务器。它们分别可用于过滤或修改消息流、执行动作、封装模型管线、暴露工具以及复用技能;实际输入输出、权限审批方式和插件生命周期需以官方文档及仓库对应实现为准。
pyproject.toml 中存在 mcp 和 RestrictedPython 依赖,说明项目包含与工具协议和受限 Python 执行相关的实现基础,但不能仅凭依赖名断定所有插件都在默认安装中启用,也不能断定外部工具服务器具备某种固定安全等级。
模型封装与代理能力
README 说明可以基于基础模型组合自定义指令、工具和知识,形成专用代理,并支持动态变量以及按用户或用户组控制访问。典型输入是基础模型、系统指令和附加知识,输出是带有定制行为的模型入口;权限配置决定哪些用户或组可以使用该入口。
资料没有给出代理定义文件格式、保存位置、版本迁移策略或导入接口。社区预设可以通过 README 提到的 Open WebUI Community 获取,但社区内容的安全性、维护状态和许可条件不能由仓库资料统一推断。
笔记、频道与持久化记忆
Notes 提供独立于对话的内容工作区,README 描述了富文本编辑、选中文本重写以及将笔记附加到聊天并注入完整上下文的能力。Channels 则是实时共享空间,团队与模型在同一时间线中协作,并支持线程、反应、置顶和访问控制。
持久化记忆用于跨对话保留关于用户的事实。由于这类内容可能包含个人信息或组织信息,启用前应明确数据保留、删除、导出和访问审计策略;给定资料未提供这些策略的具体实现说明。
工作流、日历和多媒体能力
README 还列出实时工作流与消息流:用户可以观察模型处理清单,并在模型回复期间排队消息。日历能力包括个人与共享日历、月/周/日视图、重复事件、颜色、参与者和提醒,模型可以通过原生函数调用管理日程。
pyproject.toml 同时包含 APScheduler、音频、语音转写、OCR、图像和视频平台转录相关依赖。依赖只能证明项目声明了这些组件,不能证明所有能力在每种安装方式中默认启用,也不能证明外部平台访问不需要单独授权。
系统架构与关键模块
从现有资料可以确认,系统由 Python 后端、Svelte 前端和可选的容器构建参数组成。以下是基于 pyproject.toml、package.json、Dockerfile 与 README 的模块化解读;仓库资料未提供完整架构图,因此涉及调用顺序的部分不应视为官方架构图。
后端服务层
后端使用 FastAPI 与 Uvicorn,依赖中还包括 Starlette 相关压缩组件、Socket.IO、HTTP 客户端、会话、JWT、OAuth 以及 LDAP3。由此可以确认,后端承担 HTTP 服务、异步网络访问、会话与认证集成等职责,但具体路由、鉴权中间件顺序和进程模型仍需查看源码。
数据与任务层
数据访问依赖包括 SQLAlchemy 异步支持、SQLite、PostgreSQL 驱动和 Alembic;同时声明 Redis、Hiredis 以及可选的 PostgreSQL 向量扩展依赖。项目还列出 APScheduler,说明存在计划任务相关组件。资料没有给出默认数据库、迁移命令、缓存键设计或备份脚本。
前端构建层
根据 package.json,前端基于 Svelte、SvelteKit、Vite 和 TypeScript,并使用 Tailwind CSS。Tiptap 提供富文本编辑相关扩展,CodeMirror 用于代码编辑,Vitest、Cypress 和 Svelte Check 分别覆盖测试、端到端测试和类型检查方向。
容器构建层
Dockerfile 通过构建参数控制 CUDA、Ollama、精简镜像、权限强化、嵌入模型、重排序模型和辅助嵌入模型。它还明确记录了 CUDA 11 与 CUDA 12 的测试版本信息,以及默认 CUDA 构建参数 cu128;这属于镜像构建输入,不等同于运行主机已经具备对应驱动。
依赖与运行环境
后端要求 Python 版本为 >=3.11, <3.13.0a1,分类器列出 Python 3.11 与 3.12。前端开发工具链要求 Node.js 版本在给定资料中未明确提供,因此不能从 Svelte、Vite 或 package version 反推出最低 Node.js 版本。
Python 依赖以精确版本固定为主,例如 FastAPI 0.136.3、Uvicorn 0.51.0、Pydantic 2.13.4、SQLAlchemy 2.0.50、OpenAI 客户端 2.29.0 和 MCP 1.27.2。这些版本来自给定的 pyproject.toml,随仓库更新可能变化,部署前应以目标提交的文件为准。
主要依赖类别
- 服务基础:FastAPI、Uvicorn、Pydantic、Socket.IO。
- 身份与凭据:cryptography、bcrypt、argon2-cffi、PyJWT、Authlib、LDAP3。
- 数据存储:SQLAlchemy、SQLite、PostgreSQL、Redis、Alembic。
- 模型与编排:OpenAI、Anthropic、Google GenAI、LangChain、MCP。
- 知识处理:ChromaDB、OpenSearch、Transformers、sentence-transformers、PDF 与 Office 文档库。
- 前端工具:Svelte、SvelteKit、Vite、TypeScript、Tailwind CSS、Tiptap。
快速开始
资料明确列出 pip、uv、Docker 和 Kubernetes 安装方式,但给定 README 片段没有包含对应完整命令。下面的最小闭环采用仓库 package.json 中真实存在的前端脚本,适合用于源码获取后的本地开发检查,不代表完整生产部署流程。
安装
先准备符合项目要求的 Python 版本,以及能够执行 npm 脚本的前端开发环境。由于资料没有给出 Node.js 版本、锁文件安装命令和后端启动命令,安装阶段只使用仓库已声明的 npm 依赖安装方式。
git clone https://github.com/open-webui/open-webui.git
cd open-webui
npm install上述命令中的仓库地址来自项目元信息,npm install 用于安装 package.json 声明的前端依赖。若目标是运行完整应用,而非前端开发服务器,官方仓库未提供该信息,建议以最新 README 为准。
运行
npm run dev该脚本来自 package.json,实际执行内容是先运行 npm run pyodide:fetch,再执行 vite dev --host。资料没有写明 Vite 开发服务器最终分配的访问端口,因此这里不写死访问 URL;请以终端输出为准。
验证
npm run checknpm run check 会执行 svelte-kit sync 和 svelte-check --tsconfig ./tsconfig.json。它可以验证前端项目同步与类型检查是否通过,但不能替代后端、模型服务、RAG 或认证链路的集成验证。
配置说明
资料中能核查到的配置项主要出现在 Dockerfile 的构建参数中,而不是环境变量文件。下表只列出真实出现的字段,并将默认值与作用区分为“未提供”和文件中明确写出的内容。
| 字段名 | 类型 | 默认值 | 作用 |
|---|---|---|---|
USE_CUDA |
布尔构建参数 | false |
控制是否使用 CUDA 构建路径。 |
USE_OLLAMA |
布尔构建参数 | false |
控制镜像构建是否包含 Ollama 相关路径。 |
USE_SLIM |
布尔构建参数 | false |
控制是否使用精简构建路径。 |
USE_PERMISSION_HARDENING |
布尔构建参数 | false |
控制是否启用权限强化构建选项。 |
USE_CUDA_VER |
字符串构建参数 | cu128 |
指定 CUDA 构建版本标识。 |
USE_EMBEDDING_MODEL |
字符串构建参数 | sentence-transformers/all-MiniLM-L6-v2 |
指定嵌入模型;变更后已有文档需要重新嵌入。 |
USE_RERANKING_MODEL |
字符串构建参数 | 空字符串 | 指定重排序模型;Dockerfile 未给出默认模型名称。 |
USE_AUXILIARY_EMBEDDING_MODEL |
字符串构建参数 | TaylorAI/bge-micro-v2 |
指定辅助嵌入模型。 |
README 资料片段没有提供完整环境变量表、管理员初始账户字段、模型 API Key 字段、数据库连接字符串或端口配置。对这些内容,官方仓库未提供该信息,建议以最新 README 和官方文档为准,不要根据依赖名称自行猜测变量名。
进阶用法
进阶使用的重点不是单独开启某个开关,而是明确模型、知识、工具和权限之间的边界。README 提供了功能名称,具体配置流程则应在测试环境中逐项确认。
构建 CUDA 或 Ollama 镜像
Dockerfile 注释明确给出使用 docker build 传入构建参数的方式。下面仅展示资料中已声明的安全本地构建形式,不包含真实凭据,也不假定镜像名称、启动参数或服务端口。
docker build \
--build-arg USE_CUDA=true \
--build-arg USE_OLLAMA=true \
--build-arg USE_CUDA_VER=cu128 \
--build-arg USE_EMBEDDING_MODEL=sentence-transformers/all-MiniLM-L6-v2 \
-t open-webui-local .Dockerfile 说明 CUDA 11 和 CUDA 12 曾分别使用 cu117 与 cu121 测试,并将 cu128 设为当前默认构建参数。是否能在目标机器运行,仍取决于主机驱动、容器运行时和实际资源;给定资料未提供兼容矩阵。
组合模型、知识与工具
可以把基础模型视为能力来源,把自定义指令和知识视为行为与上下文约束,把 Tools、MCP 或 OpenAPI 工具服务器视为外部动作入口。触发工具调用时,模型生成的请求需要经过应用的工具处理链路;资料没有给出审批策略和失败重试语义,因此生产环境应先用无敏感数据的测试工具验证。
多用户与用户组
RBAC 和用户组适合将模型、代理、频道或工具访问范围按组织结构拆分。README 明确提到按用户和组控制访问,但没有提供权限名称、继承关系、默认角色和审计字段;这些细节不能用自定义名称替代。
可观测性与运维
仓库依赖中包含 Loguru、Uvicorn、Socket.IO、Redis、数据库迁移和任务调度组件,说明应用具备日志、实时通信、缓存或会话以及计划任务相关的技术基础。资料没有提供指标名称、健康检查路径、日志格式、追踪协议、告警规则或官方 SLA。
运维时应至少分离以下几类状态:应用配置与凭据、关系数据库、Redis 或其他缓存、用户上传文档及其向量索引、模型服务状态。嵌入模型变更会影响既有文档,Dockerfile 已明确要求重新嵌入;因此模型升级前应保留可恢复的数据副本并在测试环境校验检索结果。
建议的验证清单
- 验证前端构建和类型检查,使用仓库脚本
npm run check与npm run build。 - 验证 Ollama 和 OpenAI 兼容 API 的连接凭据,避免在日志、Issue 或截图中暴露 Key。
- 用非敏感文档验证解析、嵌入、检索和重新嵌入流程。
- 用最小权限账户验证角色、用户组、工具和频道的访问边界。
- 确认数据库、缓存、上传文件和向量数据的备份与恢复方式;官方仓库未提供统一运维脚本。
安全与合规边界
项目涉及身份认证、外部模型 API、LDAP、工具服务器、文档上传、持久化记忆和日程信息,因此安全边界主要由凭据管理、数据流向、工具权限和多用户隔离共同决定。以下内容仅适用于拥有数据、模型服务和外部系统授权的环境。
- API Key、OAuth 凭据、LDAP 配置和数据库连接信息应通过受控的秘密管理方式提供;资料未指定具体秘密管理产品。
- 接入 MCP、MCPO 或 OpenAPI 工具服务器前,应确认服务器来源、可调用动作、网络范围和数据权限。
- 上传文档、聊天记录、Notes、Memory、Channels 和日历事件可能包含个人或组织数据,应依据适用法律、合同和内部政策进行最小化收集与保留。
- 对外部 API 的调用应确认服务商的授权范围、数据处理条款和跨境传输要求;仓库资料没有提供任何服务商合规承诺。
- 任何工具自动化都应在授权环境中测试,不应将其用于未授权账号、系统或网络目标,也不应尝试绕过检测、访问控制或审计机制。
README 提到“完全离线运行”,但当用户配置 OpenAI 兼容 API、GroqCloud、OpenRouter、Mistral 或其他外部服务时,实际数据流向会由部署配置决定。离线要求必须通过网络出口、凭据和依赖下载策略进行验证,不能仅凭产品描述作结论。
许可证与商用条款
仓库元信息中的许可证字段为 NOASSERTION,而 LICENSE 文件标题为 “Open WebUI License”,并写明版权归 Open WebUI Inc. 所有。pyproject.toml 的分类器使用的是 “Other/Proprietary License”,因此不能将该项目简单标注为 MIT、Apache-2.0 或 BSD。
LICENSE 允许在符合条件的前提下以源代码和二进制形式再分发,并要求保留版权声明、许可条件和免责声明;二进制分发还必须在文档或其他随附材料中复现这些内容。许可证同时限制未经书面许可使用贡献者或版权持有者名称进行背书或推广。
特别需要注意品牌条款:除总用户数在任意连续 30 天期间不超过 50、取得版权持有者书面许可,或取得明确允许此类修改的企业许可证等情形外,许可证禁止移除、遮挡、替换或修改 Open WebUI 品牌标识。材料受既有许可证约束时仍保留原许可证条款,贡献代码还涉及 Contributor License Agreement。
因此,能否商用不能只依据“允许再分发”一句判断。具体部署是否满足品牌、版权、贡献协议和第三方依赖要求,应以仓库 LICENSE、LICENSE_HISTORY 及适用的企业许可文本为准;本文不作额外商业承诺。
局限性与已知限制
项目功能覆盖范围较广,但资料也暴露出若干需要在部署前确认的限制。它们不是性能结论,而是版本、配置和资料完整性方面的工程约束。
- Python 要求为
>=3.11, <3.13.0a1,给定资料没有声明其他 Python 版本支持。 - 改变 Dockerfile 中的嵌入模型后,已有文档需要重新嵌入,否则不能按原方式用于 RAG Chat。
- 默认嵌入模型的下载、存储和运行资源要求未在资料中给出,不能据此制定固定硬件规格。
- 默认端口、完整启动命令、生产部署拓扑、健康检查、指标和备份流程未出现在给定资料中。
- 许可证元信息为
NOASSERTION,项目文件又明确使用 Open WebUI License;许可证核查必须以仓库文件为准。 - 项目分类器标为 Beta,不能将资料中的功能列表解释为稳定性、兼容性或长期支持承诺。
适合谁与不适合谁
选择该项目的关键依据是是否需要统一的自托管 AI 工作台,而不是 Star 数量。下列判断信号来自功能范围和工程依赖;涉及并发、数据规模或合规等级的部分,需由部署方实测。
适合谁
- 已经运行 Ollama,或同时使用多个 OpenAI 兼容 API,需要通过一个 Web 界面管理对话和模型入口的团队。
- 需要将 RAG、文档解析、嵌入模型、知识库和聊天流程放在同一应用中的内部研发或知识管理场景。
- 需要按用户、用户组和角色控制模型、代理、频道或工具访问范围的组织。
- 需要通过 Filters、Actions、Pipes、Tools、Skills、MCP 或 OpenAPI 工具服务器扩展应用行为,并能承担扩展审查责任的团队。
- 具备 Python、前端构建、容器或 Kubernetes 运维能力,并愿意根据官方文档补齐未在资料中列出的生产配置。
不适合谁
- 只需要调用一个模型的少量代码,不需要 Web UI、用户组、知识库或插件管理的项目。
- 不能接受 Open WebUI 品牌保留要求,且没有书面许可或适用企业许可证的再分发场景。
- 要求仓库资料直接提供固定端口、完整生产清单、容量基准、SLA 或现成合规证明的团队。
- 没有能力隔离外部工具、模型 API 凭据和用户上传数据的多租户生产环境。
- 必须使用不在项目声明 Python 范围内的运行时,或无法处理嵌入模型变更后重新嵌入工作的知识库项目。
常见问题与排查(FAQ / Troubleshooting)
排查应先区分前端构建问题、后端启动问题、模型连接问题和知识检索问题。由于给定资料没有提供完整部署命令,下面只引用仓库中可以确认的脚本、版本和构建参数。
为什么执行开发脚本后不知道访问地址
npm run dev 调用的是 vite dev --host,资料没有给出固定端口。应以命令行输出为准;不要把 dev:5050 脚本的端口直接当作默认端口,因为该脚本是另一个明确指定 --port 5050 的入口。
npm run check 失败怎么办
先确认依赖已安装,再执行该脚本,因为它依赖 SvelteKit 同步和 ./tsconfig.json。如果错误涉及 Node.js 版本,给定资料未提供最低 Node.js 版本,建议以最新仓库说明和实际构建错误为准。
修改嵌入模型后,旧文档为什么需要处理
Dockerfile 已明确说明,变更 USE_EMBEDDING_MODEL 后,之前加载的文档不能继续直接用于 RAG Chat,需要重新嵌入。排查时应核对模型标识是否发生变化,并确认旧索引是否已按新模型重建。
模型 API 无法连接如何定位
- 先确认目标服务确实是 Ollama 或 OpenAI 兼容 API。
- 核对 API URL、模型名称和凭据,但不要把真实 Key 写入命令、日志或工单。
- 确认部署网络是否允许访问目标服务;若目标是离线部署,不应配置需要外网访问的供应商。
- 查阅最新 README 与官方文档,补充资料中未提供的具体字段和启动方式。
许可证字段为什么显示为 NOASSERTION
GitHub 元信息与仓库 LICENSE 文件的呈现不同:元信息是 NOASSERTION,LICENSE 文件则定义了 Open WebUI License。发布、修改、分发或商业部署前,应直接审阅仓库 LICENSE 与 LICENSE_HISTORY,而不是根据仓库页面的单一字段作结论。
项目地址与资源
以下链接均来自项目元信息或 README 中出现的官方资源,适合用于源码、文档、社区和许可核查。



