跳转至

Open WebUI: Ollama/OpenAI 兼容的本地 ChatGPT 界面

为什么要学 Open WebUI

Ollama 让本地运行大语言模型变得简单,但它只提供命令行界面和 API。如果你想要一个类似 ChatGPT 的网页聊天界面来使用本地模型,Open WebUI(原名 Ollama WebUI)是最成熟的开源选择。

需求原有方案Open WebUI
本地模型 Web 界面无 / text-generation-webui功能完整的 ChatGPT 风格 UI
多模型切换手动 API 调用下拉选择模型
对话历史终端记录持久化存储 + 搜索
RAG 知识库自行实现内置文档上传 + RAG
多用户管理用户注册 + 角色管理
工具/函数调用自行实现内置 Tools/Functions
API 兼容仅 Ollama APIOllama + OpenAI + 其他

Open WebUI 本质上是一个自托管的 ChatGPT 替代品,可以连接本地模型(Ollama)和云端模型(OpenAI/Anthropic 等)。


核心概念

白话解释

Open WebUI 就是你自己的 ChatGPT 网站。安装后你会得到一个网页: - 左侧是对话列表(类似 ChatGPT 的聊天历史) - 右侧是聊天区域 - 顶部可以选择模型 - 可以上传文件进行 RAG 检索 - 管理员可以管理用户和配置

所有数据都存储在你自己的服务器上,不会发送到任何第三方。

核心概念表

概念说明ChatGPT 等价物
Chat一次对话会话ChatGPT 对话
Model可选择的 AI 模型GPT-4/GPT-3.5 选择
Modelfile自定义模型配置(系统提示词等)Custom GPT
Workspace工作区(知识库 + 提示词 + 工具)ChatGPT 工作区
Document/Collection上传的文档和知识库ChatGPT 文件上传
RAG检索增强生成ChatGPT 文件搜索
Tools模型可调用的工具/函数ChatGPT Actions
Functions自定义 Python 函数ChatGPT Plugins
Pipe自定义模型管道
Arena模型对比评测ChatGPT 模型切换

架构

┌────────────────────────────────┐
│        用户浏览器              │
│    (Open WebUI 前端)           │
└────────────┬───────────────────┘
             │ HTTP
┌────────────▼───────────────────┐
│      Open WebUI 后端           │
│  (Python/FastAPI)              │
│  ┌─────────┬──────────┐       │
│  │ SQLite  │ ChromaDB │       │
│  │(对话/用户)│ (RAG向量)│       │
│  └─────────┴──────────┘       │
└─────┬──────────────┬──────────┘
      │              │
┌─────▼─────┐  ┌─────▼──────────┐
│  Ollama   │  │  OpenAI API    │
│ (本地模型) │  │ (云端模型)      │
│ llama3    │  │ gpt-4o         │
│ codellama │  │ claude-3.5     │
│ mistral   │  │ (通过兼容API)   │
└───────────┘  └────────────────┘

安装配置

前置条件

  • Docker(推荐)或 Python 3.11+
  • Ollama(如果要使用本地模型)

方式一:Docker(推荐)

# 如果 Ollama 在同一台机器上
docker run -d \
  --name open-webui \
  -p 3000:8080 \
  -v open-webui:/app/backend/data \
  --add-host=host.docker.internal:host-gateway \
  -e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
  --restart always \
  ghcr.io/open-webui/open-webui:main

# 访问 http://localhost:3000
# 如果只使用 OpenAI API(不需要 Ollama)
docker run -d \
  --name open-webui \
  -p 3000:8080 \
  -v open-webui:/app/backend/data \
  -e OPENAI_API_KEY=sk-... \
  --restart always \
  ghcr.io/open-webui/open-webui:main

方式二:Docker Compose

# docker-compose.yml
version: '3'

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    volumes:
      - ollama-data:/root/.ollama
    ports:
      - '11434:11434'
    # GPU 支持 (NVIDIA)
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    restart: unless-stopped

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    ports:
      - '3000:8080'
    volumes:
      - open-webui:/app/backend/data
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434
      - OPENAI_API_KEY=${OPENAI_API_KEY:-}
      - WEBUI_AUTH=true
    depends_on:
      - ollama
    restart: unless-stopped

volumes:
  ollama-data:
  open-webui:
docker compose up -d

# 拉取模型
docker exec ollama ollama pull llama3
docker exec ollama ollama pull codellama

方式三:pip 安装

pip install open-webui

# 启动
open-webui serve
# 默认访问 http://localhost:8080

首次配置

  1. 访问 http://localhost:3000
  2. 注册第一个账户(自动成为管理员)
  3. 设置中配置模型连接:
  4. Ollama URL:http://host.docker.internal:11434(Docker)或 http://localhost:11434
  5. OpenAI API Key(可选)

快速上手

基本对话

  1. 登录 Open WebUI
  2. 点击 "New Chat"
  3. 在顶部选择模型(如 llama3
  4. 在输入框中输入消息
  5. 按 Enter 或点击发送

管理模型

# 通过 Ollama 下载模型
ollama pull llama3
ollama pull codellama
ollama pull mistral
ollama pull llama3:70b  # 大模型(需要足够 VRAM)
ollama pull nomic-embed-text  # 嵌入模型(RAG 用)

# 模型会自动出现在 Open WebUI 的模型选择列表中

对话管理

操作方法
新建对话点击 "New Chat"
重命名对话点击对话标题编辑
删除对话对话上右键菜单 → Delete
搜索历史对话左侧搜索框
导出对话对话菜单 → Export
分享对话对话菜单 → Share(生成链接)

文件上传

Open WebUI 支持在对话中上传文件:

  1. 点击输入框左侧的附件图标
  2. 选择文件(PDF、TXT、Markdown、CSV、DOCX 等)
  3. 文件内容会被提取并作为上下文提供给模型
  4. 你可以针对文件内容提问

自定义模型(Modelfile)

在 Open WebUI 中创建自定义模型角色:

  1. 进入 Workspace → Models
  2. 点击 "Create a Model"
  3. 设置:
字段说明示例
Name模型显示名称"生信助手"
Base Model基础模型llama3
System Prompt系统提示词"你是一个生物信息学专家..."
Temperature创造性参数0.7
Context Length上下文长度8192

进阶用法

RAG 知识库

Open WebUI 内置了 RAG(检索增强生成)功能:

创建知识库

  1. 进入 Workspace → Knowledge
  2. 点击 "Create a Knowledge Collection"
  3. 命名知识库(如"公司文档"、"论文库")
  4. 上传文档到知识库

在对话中使用

# 在输入框中使用 # 引用知识库
#公司文档 请帮我找到关于审批流程的规定

# 也可以在模型设置中默认关联知识库

配置嵌入模型

# 下载嵌入模型(用于 RAG 向量化)
ollama pull nomic-embed-text

# 在 Admin → Settings → Documents 中配置
# Embedding Model: nomic-embed-text
# Chunk Size: 1000
# Chunk Overlap: 200

Tools(工具)

Open WebUI 支持为模型添加可调用的工具:

内置工具 - Web 搜索 - 代码执行 - 图片生成(对接 DALL-E/Stable Diffusion)

自定义 Tool

# 在 Workspace → Tools 中创建

class Tools:
    def __init__(self):
        pass

    async def get_weather(self, city: str) -> str:
        """Get current weather for a city.

        :param city: City name
        :return: Weather information
        """
        # 实现天气查询逻辑
        import requests
        response = requests.get(f"https://wttr.in/{city}?format=3")
        return response.text

Functions(管道函数)

Functions 允许你自定义模型的输入/输出处理:

# Filter Function — 处理输入/输出
class Filter:
    def inlet(self, body, user):
        """处理用户输入(发送给模型前)"""
        # 添加系统上下文
        body["messages"].insert(0, {
            "role": "system",
            "content": "当前时间: " + str(datetime.now())
        })
        return body

    def outlet(self, body, user):
        """处理模型输出(返回给用户前)"""
        # 添加免责声明
        for message in body["messages"]:
            if message["role"] == "assistant":
                message["content"] += "\n\n---\n*此回答由 AI 生成,仅供参考*"
        return body

多用户管理

角色权限
Admin全部权限(用户管理、系统设置)
User创建对话、使用模型、上传文件
Pending待审批用户
# 环境变量配置
# 启用注册
WEBUI_AUTH=true
# 禁用注册(仅管理员创建用户)
ENABLE_SIGNUP=false
# 默认用户角色
DEFAULT_USER_ROLE=pending  # 新用户需要管理员审批

连接多个 API

# 在 Admin → Settings → Connections 中配置

# Ollama(本地模型)
# URL: http://localhost:11434

# OpenAI
# API Key: sk-...
# URL: https://api.openai.com/v1

# OpenRouter(多模型聚合)
# API Key: sk-or-...
# URL: https://openrouter.ai/api/v1

# 本地 vLLM/llama.cpp 服务
# URL: http://localhost:8000/v1
# API Key: (任意值,如 "not-used")

外观自定义

# 环境变量
WEBUI_NAME="我的 AI 助手"
DEFAULT_LOCALE="zh-CN"

# 在 Admin → Settings → General 中设置:
# - 站点名称
# - 默认语言
# - 主题(浅色/深色/自动)

API 访问

Open WebUI 自身提供了 OpenAI 兼容的 API:

# 获取 API Key(在 Settings → Account → API Keys)

# 使用 Open WebUI 作为 API 网关
curl http://localhost:3000/api/chat/completions \
  -H "Authorization: Bearer YOUR_OPEN_WEBUI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "llama3",
    "messages": [{"role": "user", "content": "Hello!"}]
  }'

# 这意味着你可以用任何 OpenAI 客户端库连接 Open WebUI
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:3000/api",
    api_key="YOUR_OPEN_WEBUI_API_KEY"
)

response = client.chat.completions.create(
    model="llama3",
    messages=[{"role": "user", "content": "你好!"}]
)
print(response.choices[0].message.content)

常见问题

Q1: Open WebUI 和 Ollama 是什么关系?

  • Ollama:下载和运行本地大模型的工具(提供 API)
  • Open WebUI:连接 Ollama(或 OpenAI)的 Web 前端界面
  • 两者独立,Open WebUI 不仅可以连接 Ollama,还可以连接任何 OpenAI 兼容的 API

Q2: 需要什么配置才能流畅运行?

模型大小VRAM 需求适合的 GPU
7B4-6 GBRTX 3060+
13B8-10 GBRTX 3080+
34B20+ GBRTX 4090 / A100
70B40+ GB2x RTX 4090 / A100

Open WebUI 本身资源消耗很小(<500MB 内存),瓶颈在 Ollama 运行模型。

Q3: 如何备份数据?

# Docker 方式
docker cp open-webui:/app/backend/data ./backup

# 或直接备份 volume
docker run --rm -v open-webui:/data -v $(pwd):/backup \
  busybox tar czf /backup/open-webui-backup.tar.gz /data

Q4: 多人同时使用会影响性能吗?

Ollama 会排队处理请求。多人同时使用时,后来的请求会等待前一个完成。解决方案: - 使用更强的 GPU - 使用支持并发的推理后端(如 vLLM) - 部署多个 Ollama 实例

Q5: 如何让局域网内其他设备访问?

# Docker 方式已经监听 0.0.0.0
# 其他设备通过 http://服务器IP:3000 访问

# 如果需要 HTTPS,前面加 Caddy
# Caddyfile:
# chat.local {
#     reverse_proxy localhost:3000
#     tls internal
# }

Q6: 中文支持怎么样?

  • UI 界面支持中文(在设置中切换语言)
  • 模型的中文能力取决于模型本身
  • 推荐中文模型:Qwen2.5、ChatGLM、Yi

参考资源

资源链接
官方网站https://openwebui.com
GitHub 仓库https://github.com/open-webui/open-webui
官方文档https://docs.openwebui.com
Ollama 官网https://ollama.com
模型库https://ollama.com/library
Open WebUI Pipelineshttps://github.com/open-webui/pipelines
社区插件/工具https://openwebui.com/tools

总结:Open WebUI 是本地 AI 体验的"最后一公里"。Ollama 负责运行模型,Open WebUI 负责提供交互界面。两者配合,你就拥有了一个完全私有的、功能接近 ChatGPT 的 AI 助手。内置的 RAG、多用户管理、工具系统让它不仅适合个人使用,也适合小团队内部部署。