Skip to main content
ai2025年11月16日3 分钟阅读

Open WebUI:在本地和云端运行你自己的AI界面

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

open-webuiself-hostedai
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分钟。隐私和灵活性优势是永久的。

DU

Danil Ulmashev

Full Stack Developer

有兴趣一起合作吗?