open-webui:给本地大模型套上统一浏览器工作台
open-webui 用 Python 把 Ollama、OpenAI API 等后端统一到一个浏览器界面,整合模型调用、对话管理与 prompt 调试,适合团队在私有环境自建 A
一条 docker run 之后,你在浏览器里打开 localhost:3000,看到的不只是一个聊天框——左侧是模型列表和对话历史,中间是对话流,右侧能挂知识库、工具、笔记和日历。这就是 open-webui 想做的事:它不生产模型,它把模型接进来,然后给模型配一整套工作台。
先看它到底站在哪一层
理解 open-webui 的定位,最省事的办法是把它和 ollama 摆在一起看。Ollama 解决的是“模型怎么在本地跑起来”:一条命令拉模型、起推理服务、暴露 API。open-webui 解决的是“模型跑起来之后,人和团队怎么用它”。
所以它不是推理引擎,也不是 agent 框架。README 里对自己的定义是 a home for AI,一个 self-hosted AI platform。关键词是 self-hosted:整个东西跑在你自己的机器或集群上,数据不出你的边界。官网首页那句话说得更直白——Run AI on your own terms。
这决定了它的技术形态:一个 Python 后端 + 浏览器前端的 Web 应用,中间夹着一层“provider 适配”,把 Ollama 和任何 OpenAI-compatible API 统一成同一种调用方式。你在界面上切换模型时,背后可能一个是本地 Ollama 实例,一个是 LMStudio,一个是 GroqCloud,一个是 OpenRouter,一个是 vLLM——README 明确列了这些可以混搭的 provider。对使用者来说,它们长得一样。
架构:从 provider 适配到插件层
README 没有给出一张正式的架构图,但功能清单本身就把分层讲清楚了。按职责归纳,它大致是这么几层:
第一层:模型接入层(provider 适配)
最底下是模型来源。两种接入方式:本地 Ollama,以及任何 OpenAI-compatible API。这一层的关键词是 provider-agnostic——上层不关心模型在哪跑,只关心它是否符合统一的调用契约。README 里“Point the API URL at LMStudio, GroqCloud, Mistral, OpenRouter, vLLM, and more”说的就是这件事:改一个 URL 就能换一家。
第二层:能力层(RAG、搜索、图像、语音、代码执行)
模型接进来之后,open-webui 在它周围堆了一圈能力,这些能力不是模型自带的,是平台补的:
- 本地 RAG:9 种向量数据库(ChromaDB、PGVector、Qdrant、Milvus、Elasticsearch、OpenSearch、Pinecone、S3Vector、Oracle 23ai),多种内容抽取引擎(Tika、Docling、Document Intelligence、Mistral OCR、PaddleOCR-vl、外部 loader),支持 BM25 + 向量的混合检索加重排序,还有 full-context 模式。用
#命令把文档拉进对话。 - Web 搜索:几十个 provider,从 SearXNG、Brave、Kagi、Tavily 到 DuckDuckGo、Bing、Exa,结果直接注入对话。
- Web 浏览:
#加 URL 把网页拉进对话,或者让模型自己按需抓取。 - 图像生成与编辑:OpenAI DALL·E、Gemini、本地 ComfyUI、本地 AUTOMATIC1111。
- 语音/视频:STT 支持 Local Whisper、OpenAI、Deepgram、Azure;TTS 支持 Azure、ElevenLabs、OpenAI、Transformers、WebAPI。
- Agentic 执行:通过 Open Terminal 给 agent 一个终端和文件系统,让它跑脚本、读输出、修错误、产出文件。
这一层是 open-webui 真正“重”的地方。它不是一个薄壳,RAG 支持 9 种向量库这件事本身就说明它想覆盖从个人 SQLite 到企业 Oracle 的全谱系。
第三层:插件与扩展层
README 把插件分成五类,这是理解它扩展模型的关键:
| 插件类型 | 作用 |
|---|---|
| Filters | 在消息流转中拦截/改写 |
| Actions | 给对话挂可触发的动作 |
| Pipes | 自定义处理管道 |
| Tools | 给模型挂外部工具 |
| Skills | 可复用的能力单元 |
外部服务通过 MCP、MCPO 和 OpenAPI tool servers 接进来。也就是说,任何有 OpenAPI 描述的服务,理论上都能变成模型可调用的工具。这一层还承载了限流、审批流、数据连接这些治理能力。
第四层:模型与 Agent 编排层
在基础模型之上,你可以包一层“自定义指令 + 工具 + 知识”做成专用 agent。支持动态变量、按用户/组的访问控制,还能从 Open WebUI Community 导入社区预设。这一层的产物是“模型”,但它已经不是原始模型,而是配置好的 agent。
第五层:协作与工作区层
Notes(独立于对话的内容工作区,富文本编辑、AI 改写选中文本、笔记可挂到任意对话做全上下文注入)、Channels(团队和模型在一条时间线上协作,可 @ 模型起草或批评,有 thread、reaction、pin 和访问控制)、Calendar(个人和共享日历,模型通过原生 function calling 管理日程)、Automations(定时跑 prompt,运行结果出现在日历上并链回产生的对话)。
第六层:存储、认证与运维层
- 数据库:SQLite(可选加密)或 PostgreSQL
- 文件存储:本地、S3、Google Cloud Storage、Azure Blob Storage
- 认证:LDAP/AD、trusted headers、OAuth SSO、SCIM 2.0 自动 provisioning(Okta、Azure AD、Google Workspace)
- 可观测性:内置 OpenTelemetry,traces/metrics/logs 接入现有监控栈
- 横向扩展:Redis 支撑的 session 管理和 WebSocket,多 worker 多节点跑在负载均衡后面
这六层叠起来,才解释了为什么它自称 platform 而不是 UI。最上面是界面,最下面是基础设施,中间全是可替换的部件。
最小可用:两条命令
README 给的 pip 路径干净到不能再干净。前提是 Python 3.11:
bashpip install open-webui open-webui serve
服务起在 http://localhost:8080。
Docker 路径更适合“我要马上看到东西”的场景。README 里有一条针对本机已装 Ollama 的默认配置命令,并且反复强调一件事:必须挂载 -v open-webui:/app/backend/data,否则数据库不持久化,容器一停数据就没了。这条警告在 README 里是加粗的 WARNING,值得单独拎出来说——很多人第一次跑 open-webui 丢数据,就是漏了这个 volume。
镜像有两个值得注意的 tag::ollama 把 Ollama 一起打进去,:cuda 开 CUDA 加速(需要宿主机装 Nvidia CUDA container toolkit)。安装方式除了 pip 和 Docker,还支持 uv、Kubernetes(kubectl / kustomize / helm)。
和同主题项目比,它差在哪、强在哪
把 open-webui 放进这批对照项目里,定位差异非常清楚:
| 项目 | 定位 | 和 open-webui 的关系 |
|---|---|---|
| open-webui | 自托管 AI 平台 / 浏览器工作台 | 本体 |
| ollama | 本地模型运行时 | 上游,open-webui 的主要后端之一 |
| AutoGPT | 自主多步任务 agent 平台 | 目标不同:AutoGPT 让 agent 自己规划执行,open-webui 让人和 agent 在界面里协作 |
| hermes-agent | Python agent 框架 | 更底层,面向开发者写调度逻辑;open-webui 面向使用者开箱即用 |
| firecrawl | 网页抓取成 Markdown/JSON 的 API | 互补,open-webui 的 Web 搜索/浏览能力可以接这类数据源 |
| ECC | 给编程 agent 加 skills 和记忆层 | 正交,ECC 优化 agent 本身,open-webui 提供承载 agent 的工作台 |
一句话概括:其他项目大多在造“更强的模型/agent”,open-webui 在造“装这些模型的容器”。它的价值不在单点能力有多深,而在把模型接入、RAG、搜索、语音、图像、权限、审计、多节点部署这些零散需求收进一个可自托管的系统里。
这也解释了它的功能密度为什么这么高——每一项单拎出来都有更专精的替代品(RAG 有专门的框架,搜索有专门的 API),但团队自建 AI 工作台时不想拼十个组件,open-webui 卖的就是这个“拼好了”。
谁该用它,谁不该
适合:需要在私有环境给团队统一 AI 入口的组织。LDAP/AD、SCIM、RBAC、按组的权限、OpenTelemetry、Redis 横向扩展——这些不是个人玩具会做的功能,README 把它们列出来,说明目标客户是有 IT 治理要求的团队。以及想要一个浏览器界面同时调本地模型和云 API、还要带 RAG 和工具调用的个人开发者。
不太适合:只想在终端里跑模型做推理的人,ollama 本身就够了;或者要深度定制 agent 调度逻辑的人,hermes-agent 这类框架更直接。
事实卡片
- 源码:github.com/open-webui/open-webui
- 官网:openwebui.com
- 语言:Python
- Stars:156,005 · Forks:22,706 · Open Issues:307
- License:NOASSERTION(README 未在正文中声明具体许可类型,使用前请查仓库 LICENSE 文件)
- 创建:2023-10-06 · 最近推送:2026-10-16
- Topics:ai, llm, llm-ui, llm-webui, llms, mcp, ollama, ollama-webui, open-webui, openai, openapi, rag, self-hosted, ui, webui
生态里还有几个配套项目值得知道:Open WebUI Computer(移动优先的独立编码 agent,可当模型接回 open-webui)、Open Terminal / Terminals(自托管计算环境,后者提供按用户隔离的容器)、oikb(从 45+ 数据源喂知识库)、Desktop(macOS/Windows/Linux 原生应用,带 Spotlight 式聊天栏和内置 llama.cpp 本地推理)。
最后一个判断:open-webui 的 topics 里有 mcp、rag、self-hosted,这三个词基本就是它的路线图——把模型能力通过标准协议接进来,把私有数据通过 RAG 接进来,把整套东西留在自己的服务器上。它不追某一个模型的最强,它追的是“换任何模型,工作台不变”。