Open WebUI:在本地和云端运行你自己的AI界面
设置Open WebUI用于本地开发和云端部署——比较自托管AI界面与商业替代方案。

我认识的每个开发者,在任何给定时间都至少打开着三个AI聊天标签页。一个用于ChatGPT,一个用于Claude,也许还有一个Gemini窗口用于多模态任务。每个都有自己的聊天历史、自己的上下文、自己的计费。在它们之间切换是一种摩擦,你直到它消失后才停止注意到。
Open WebUI消除了这种摩擦。它是一个自托管界面,可以连接到多个AI后端——通过Ollama连接本地模型,连接OpenAI和Anthropic等云API,或任何兼容OpenAI的端点。一个界面,一个聊天历史,一个地方管理所有内容。而且由于是你自己托管,除非你明确地将数据发送到云API,否则你的数据永远不会离开你的基础设施。
Open WebUI是什么
Open WebUI(前身为Ollama WebUI)是一个开源的自托管Web界面,用于与大型语言模型交互。它最初是Ollama(在本地运行LLM的工具)的前端,但已发展成为一个功能齐全的AI平台,支持:
- 多个模型后端(Ollama、OpenAI、Anthropic,任何兼容OpenAI的API)
- 带有搜索和组织功能的聊天历史
- 带有文档上传的RAG(检索增强生成)
- 自定义模型预设和系统提示
- 用户管理和团队访问控制
- 函数调用和工具使用
- 图像生成集成
- 语音输入和输出
这不是一个玩具项目。界面精美,功能集全面,社区活跃。截至撰写本文时,GitHub仓库拥有超过75,000颗星,发布周期大约每两周一次。
真正的价值主张是控制权。你决定它在哪里运行,连接哪些模型,谁有访问权限,以及数据流向何处。对于处理敏感代码、专有业务数据或受监管行业的开发者来说,这比任何功能比较都更重要。
使用Docker进行本地设置
在本地运行Open WebUI最快的方法是使用Docker。一个命令,无需安装依赖,无需编写配置文件:
docker run -d \
-p 3000:8080 \
-v open-webui:/app/backend/data \
--name open-webui \
ghcr.io/open-webui/open-webui:main
就是这样。在浏览器中打开http://localhost:3000,创建一个管理员账户,你就拥有了一个可用的AI界面。-v open-webui:/app/backend/data标志创建了一个Docker卷用于持久存储——你的对话、设置和上传的文档在容器重启后仍然存在。
连接到Ollama
要使用本地模型,你需要在你的机器上运行Ollama。从ollama.com安装它,然后拉取一个模型:
ollama pull llama3.1
ollama pull codellama
ollama pull mistral
如果Open WebUI和Ollama都在同一台机器上运行,Open WebUI会自动在http://host.docker.internal:11434(在macOS和Windows上)或http://localhost:11434(在Linux上使用--network host)检测到Ollama。
对于Linux,Docker命令需要网络主机模式才能访问Ollama:
docker run -d \
-p 3000:8080 \
--network host \
-v open-webui:/app/backend/data \
--name open-webui \
ghcr.io/open-webui/open-webui:main
连接后,你在Ollama中拉取的所有模型都会出现在Open WebUI的模型下拉菜单中。你可以在对话中途切换模型,比较输出,并为每个模型设置系统提示。
连接到云API
Open WebUI也连接到云模型提供商。在管理员设置的“连接”下,添加你的API密钥:
- OpenAI:添加你的API密钥后,所有GPT模型都将可用
- Anthropic:为Claude模型添加你的API密钥(根据版本通过兼容OpenAI的代理或直接集成)
- 自定义端点:任何公开兼容OpenAI API的服务——Azure OpenAI、Together AI、Groq、本地vLLM实例
这就是Open WebUI作为日常驱动程序真正有用的地方。你获得了一个统一的界面,用于本地Llama模型(免费、私有、适合实验)和云模型(功能更强大、基于使用量计费)。上下文切换成本降至零——你只需在下拉菜单中更改模型。
使用Docker Compose构建完整堆栈
为了更健壮的本地设置,使用Docker Compose将Open WebUI和Ollama一起运行:
# docker-compose.yml
version: "3.8"
services:
ollama:
image: ollama/ollama
container_name: ollama
ports:
- "11434:11434"
volumes:
- ollama-data:/root/.ollama
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
ports:
- "3000:8080"
volumes:
- open-webui-data:/app/backend/data
environment:
- OLLAMA_BASE_URL=http://ollama:11434
depends_on:
- ollama
volumes:
ollama-data:
open-webui-data:
docker compose up -d
GPU预留部分是可选的——如果你只在CPU上运行,请删除它。在Apple Silicon Mac上,Ollama会自动使用Metal GPU框架,无需Docker GPU直通(为了获得最佳性能,请在macOS上原生运行Ollama而不是在Docker中)。
云部署选项
在本地运行Open WebUI非常适合个人使用。但当你想让你的团队访问它,或者你想从任何设备使用它时,你需要进行云部署。
VPS部署(Hetzner、DigitalOcean等)
最简单的云路径是安装了Docker的VPS。Hetzner或DigitalOcean每月20美元的服务器足以运行Open WebUI界面本身。如果你还想在服务器上运行模型,你需要一个GPU实例(每月50-150美元,具体取决于GPU)。
# 在你的VPS上
apt update && apt install docker.io docker-compose-plugin -y
# 创建docker-compose.yml(与上面相同,减去GPU预留)
docker compose up -d
# 设置带有SSL的反向代理
apt install nginx certbot python3-certbot-nginx -y
Nginx反向代理配置:
server {
server_name ai.yourdomain.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
然后使用certbot --nginx -d ai.yourdomain.com从Let's Encrypt获取免费SSL证书。你现在拥有了一个私有的、受SSL保护的AI界面,可以从任何地方访问。
Railway / Fly.io 部署
对于无需服务器管理的托管部署:
# 使用Railway
railway login
railway init
railway up
或者使用Fly.io:
fly launch --image ghcr.io/open-webui/open-webui:main
fly secrets set OLLAMA_BASE_URL=http://your-ollama-server:11434
fly deploy
这些平台会自动处理SSL、扩展和重启。与VPS相比,权衡是基础设施的控制权较少,并且在大规模部署时成本更高。
架构决策:在哪里运行模型
云部署的关键架构决策是,模型是与Open WebUI在同一服务器上运行,还是连接到外部API提供商。
同一服务器:更低的延迟,没有按token计费的API成本,完整的数据隐私。但你需要一台配备GPU的服务器(一个不错的GPU实例每月100-300美元),并且模型选择受限于你的硬件。
仅外部API:无需GPU,可以访问所有提供商的最佳模型,按token付费。Open WebUI服务器轻量且托管成本低廉。但每次对话都会通过第三方API,并且成本随使用量而增加。
混合模式:运行本地模型处理日常任务和隐私敏感工作,连接云API处理需要更强大模型的任务。我就是这样使用的——Llama 3.1用于快速提问和代码补全(注重隐私),Claude或GPT-4o用于复杂的推理和生成任务。
与商业界面的比较
ChatGPT Plus(每月20美元)
ChatGPT为你提供GPT-4o、DALL-E集成、浏览、代码解释器和自定义GPT。界面精美,移动应用出色。
Open WebUI的优势:模型灵活性(你不受OpenAI锁定)、数据隐私(对话保留在你的服务器上)、自定义(自定义系统提示、RAG管道、函数调用)。本地模型没有使用限制。
ChatGPT的优势:原生工具集成、代码解释器沙盒、移动体验、零设置。插件和GPT Store生态系统在Open WebUI中没有等效项。
结论:对于想要即用型体验的非技术用户来说,ChatGPT Plus很难被超越。Open WebUI更适合需要控制和灵活性的开发者。
Claude Pro(每月20美元)
Claude Pro为你提供Claude Sonnet和Opus模型,具有扩展的上下文窗口、工件创建和具有持久上下文的项目。Claude的指令遵循和长文档处理能力是一流的。
Open WebUI的优势:你仍然可以通过API使用Claude模型,同时也可以访问所有其他模型。你拥有自己的聊天历史。你可以添加RAG和自定义工具。
Claude的优势:具有持久上下文的项目功能,用于代码和文档的工件系统,以及原生的思考/推理显示。这些功能深度集成到Claude的界面中,在Open WebUI中没有等效项。
结论:如果Claude是你的主要模型,那么其原生界面很难舍弃。当你使用多个提供商时,Open WebUI作为统一界面会更好。
适用于团队
Open WebUI最引人注目的用例是团队使用。商业AI界面提供团队计划,但它们通常按席位收费(每用户每月25-30美元),对话存储在提供商的基础设施上,并且你无法自定义体验。
带有团队访问权限的Open WebUI为你提供:无论用户数量多少,只需一个托管成本;对话存储在你的基础设施上;每个团队或项目可自定义模型预设;共享RAG文档集合;以及对可用模型和功能的管理员控制。
对于一个10人的开发团队,商业AI聊天订阅费用为每月200-300美元。一个自托管的Open WebUI实例,加上云API访问,托管费用为每月20-40美元,外加按使用量付费的API费用。随着团队的壮大,经济效益将进一步向你倾斜。
RAG管道设置
检索增强生成(RAG)是Open WebUI最强大的功能之一。上传文档后,AI在回答问题时可以参考它们。这使得Open WebUI从一个通用聊天工具转变为一个理解你特定文档、代码库或业务数据的知识库。
文档上传
Open WebUI支持通过界面直接上传文档。将PDF、Markdown文件或文本文件拖入聊天中,它会自动进行分块、嵌入和索引以供检索。AI在回答问题时会参考这些上传的文档。
对于批量文档摄取,请使用管理员面板的文档管理部分。你可以将文档组织成集合,并控制哪些集合在哪些聊天中可用。
嵌入配置
Open WebUI使用嵌入模型将文档转换为向量以进行语义搜索。默认情况下,它使用本地嵌入模型,但你可以配置它使用OpenAI的嵌入API以获得更好的质量:
在管理员设置的“文档”下,配置:
- 嵌入模型:
text-embedding-3-small(OpenAI) 或通过Ollama的本地模型 - 分块大小:1000 token(默认值,根据你的文档进行调整)
- 分块重叠:100 token(有助于在不同分块之间保持上下文)
- Top K:5(每次查询检索的相关分块数量)
实际RAG用例
代码库文档:上传你的项目的README、架构文档和API文档。向AI提问关于你自己的项目的问题,并获得基于你实际文档的答案,而不是模型的一般训练数据。
会议记录和决策:上传会议记录和决策日志。“上周会议中关于数据库迁移时间表做了什么决定?”会得到准确的答案,而不是凭空捏造的。
研究论文和技术规范:上传你正在处理的论文或规范的PDF文件。AI可以总结、比较并回答关于其训练数据中不存在的内容的问题。
RAG答案的质量很大程度上取决于文档分块和嵌入质量。如果答案似乎遗漏了相关信息,请尝试减小分块大小(使每个分块更集中)或增加Top K(以便检索更多分块)。
自定义模型配置
Open WebUI允许你创建模型预设——保存的配置,包含自定义系统提示、温度设置和模型选择。这对于创建特定用途的助手非常有用,而无需修改底层模型。
创建代码审查预设
在Open WebUI设置中,创建一个新的模型预设:
- 名称:代码审查员
- 基础模型:Claude Sonnet(或你偏好的模型)
- 系统提示:“你是一名高级代码审查员。分析提供的代码是否存在错误、安全问题、性能问题和风格违规。具体说明行号并提供修正后的代码片段。按严重程度优先处理问题。”
- 温度:0.3(较低的温度可获得更一致、集中的输出)
创建写作助手预设
- 名称:技术撰稿人
- 基础模型:GPT-4o
- 系统提示:“你是一名技术写作助手。帮助起草清晰、简洁的技术文档。使用主动语态。除非受众是技术人员,否则避免使用行话。在适当的地方使用标题、列表和代码示例来组织内容。”
- 温度:0.7(较高的温度可获得更具创造性的输出)
这些预设会出现在模型下拉菜单中,与你的常规模型并列。在审查代码时切换到“代码审查员”预设,在起草文档时切换到“技术撰稿人”预设。系统提示会自动应用。
隐私优势
自托管AI的隐私论点并非理论。它对不同的用例具有具体的意义。
敏感代码
当你将专有代码粘贴到ChatGPT或Claude中时,你正在将其发送到第三方服务器。提供商有数据处理政策——OpenAI和Anthropic都声明他们不会使用API数据进行训练——但数据仍然离开了你的基础设施。对于拥有严格知识产权政策、受监管行业或政府合同的公司来说,这可能是一个无法接受的起点。
将Open WebUI连接到Ollama后,你的代码永远不会离开你的机器。模型在本地运行,推理在本地发生,聊天历史在本地存储。对于云部署,数据保留在你的服务器上。
客户数据
如果你是一名顾问或代理机构,处理客户数据,使用商业AI界面会产生一个你需要为每个客户回答的数据处理问题。自托管的Open WebUI给你一个明确的答案:数据保留在你的基础设施中,在你的控制之下,并受你的安全策略约束。
合规性
HIPAA、SOC 2、GDPR——这些框架都关注数据的处理和存储位置。在你的合规基础设施上自托管AI界面,本质上比第三方SaaS工具更容易纳入你的合规范围。
这并不意味着本地总是更好。云AI API有其自身的合规认证,对于许多用例来说,OpenAI或Anthropic的企业级产品的合规态势比你自己构建的更强大。关键在于,当你需要时,自托管为你提供了一个选择。
性能考量
本地模型性能
在本地运行模型意味着你的硬件决定了体验。以下是Llama 3.1 8B的粗略基准:
- Apple M1 Pro (16GB RAM):约15 token/秒——可用于短交互
- Apple M2 Ultra (64GB RAM):约40 token/秒——适用于长时间对话
- NVIDIA RTX 4090:约80 token/秒——近乎即时响应
- 仅CPU(无GPU):约2-5 token/秒——速度极慢,不推荐
对于Llama 3.1 70B这样更大的模型,你需要至少48GB的RAM(Mac上的M2 Max或更高版本,或服务器级GPU)。质量提升显著,但硬件要求很高。
延迟比较
对于云API连接,Open WebUI增加的开销极小——通常在API原生延迟的基础上增加10-30毫秒。瓶颈始终是模型推理,而不是界面。
对于本地模型,延迟是模型大小和硬件的函数。首个token延迟(模型开始生成之前的时间)从小型模型在快速硬件上的100毫秒到大型模型在有限硬件上的几秒不等。流式显示隐藏了大部分延迟,用户感知不明显。
何时选择自托管与商业服务
自托管时机:
- 你处理敏感或专有数据时
- 你想出于隐私或成本原因使用本地模型时
- 你需要一个没有按席位许可的团队AI界面时
- 你想自定义RAG管道或添加自定义工具时
- 你使用多个模型提供商并想要一个统一界面时
使用商业界面时机:
- 你需要与特定模型(Claude Projects、ChatGPT插件)进行最紧密的集成时
- 你重视移动应用和跨设备同步时
- 你不想管理基础设施时
- 你的用例不涉及敏感数据时
- 你需要最精致、最新功能体验时
对于大多数开发者来说,答案是两者兼顾。我使用Claude的原生界面进行受益于Claude Projects的深度工作,使用ChatGPT处理需要代码解释器的任务,而Open WebUI则用于其他所有情况——尤其是我希望使用本地模型、比较不同提供商的输出,或处理我不想发送到云API的文档时。
Open WebUI并非旨在取代商业界面。它关乎在控制权至关重要时,拥有控制你的AI基础设施的选择。设置只需30分钟。隐私和灵活性优势是永久的。