为什么选 Open WebUI

Open WebUI(原 Ollama WebUI)是最成熟的开源 LLM 前端,Star 数超过 80k。核心优势:

  • ChatGPT 级交互体验:流式输出、Markdown 渲染、代码高亮、文件上传
  • 多模型支持:通过 Ollama 或 OpenAI 兼容 API 接入任意模型
  • 内置 RAG:上传文档自动切片、嵌入、检索,无需额外搭建
  • 多用户管理:RBAC 权限、API Key 管理、使用统计
  • 插件生态:函数调用、工具集成、自定义 Pipeline

Docker 部署

单机部署(推荐)

docker run -d \
  --name open-webui \
  --restart always \
  -p 3000:8080 \
  -e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
  -v open-webui-data:/app/backend/data \
  ghcr.io/open-webui/open-webui:main

访问 http://localhost:3000,第一个注册的用户自动成为管理员。

Docker Compose 完整方案

version: '3.8'

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    restart: always
    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
    restart: always
    ports:
      - "3000:8080"
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434
      - ENABLE_RAG=true
      - RAG_EMBEDDING_ENGINE=ollama
      - RAG_EMBEDDING_MODEL=nomic-embed-text
      - CHUNK_SIZE=512
      - CHUNK_OVERLAP=64
      - ENABLE_SIGNUP=true
    volumes:
      - open-webui-data:/app/backend/data
    depends_on:
      - ollama

volumes:
  ollama-data:
  open-webui-data:

启动:docker compose up -d

Ollama 集成与模型管理

安装模型

# 拉取模型
ollama pull qwen2.5:14b        # 中文能力强
ollama pull llama3.1:8b         # Meta 旗舰小模型
ollama pull nomic-embed-text    # Embedding 模型(RAG 用)

# 查看已安装模型
ollama list

# 运行模型测试
ollama run qwen2.5:14b "你好,介绍一下自己"

通过 Modelfile 自定义模型

FROM qwen2.5:14b

PARAMETER temperature 0.7
PARAMETER top_p 0.9
PARAMETER num_ctx 8192

SYSTEM """
你是硅基 AGI 的技术助手,专注于 AI 工程化领域。
回答要专业、简洁、有代码示例。
"""

# 创建自定义模型
# ollama create silicon-agi -f Modelfile

配置多模型切换

在 Open WebUI 管理面板 → Settings → Models 中配置可用模型。用户可以在聊天界面顶部下拉切换模型。

RAG 功能配置

Open WebUI 内置完整的 RAG 管线,无需额外搭建向量数据库。

配置 Embedding 模型

管理面板 → Settings → Documents:

配置项推荐值说明
Embedding Modelnomic-embed-textOllama 内置,768 维
Chunk Size512字符数
Chunk Overlap64重叠区
Top K4召回文档数

使用外部 Embedding 模型

如需更强的中文检索能力,配置 bge-large-zh:

environment:
  - RAG_EMBEDDING_ENGINE=openai
  - RAG_EMBEDDING_MODEL=BAAI/bge-large-zh-v1.5
  - RAG_OPENAI_API_BASE_URL=https://api.siliconflow.cn/v1
  - RAG_OPENAI_API_KEY=your-key

文档上传与对话

  1. 在聊天界面点击 📎 上传文档(支持 PDF、DOCX、TXT、Markdown)
  2. 文档自动切片、嵌入、存入 ChromaDB
  3. 提问时自动检索相关片段并注入上下文
  4. 回答末尾标注引用来源

批量文档管理

管理面板 → Workspace → Documents 可以管理所有已上传文档,支持按标签分类、批量删除。

用户管理

角色权限

角色权限
Admin全部权限,包括模型管理、用户管理、系统配置
User可使用模型和 RAG,管理自己的文档和对话
Pending注册后待管理员审核

关闭开放注册

生产环境关闭注册,改为邀请制:

environment:
  - ENABLE_SIGNUP=false

管理员在面板手动创建用户。

API Key 管理

每个用户可以在 Settings → Account → API Keys 生成个人 API Key,通过 Open WebUI 的 OpenAI 兼容 API 调用模型:

curl http://localhost:3000/v1/chat/completions \
  -H "Authorization: Bearer sk-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen2.5:14b",
    "messages": [{"role": "user", "content": "Hello"}],
    "stream": false
  }'

高级功能

Pipelines(自定义处理管线)

Pipelines 是 Open WebUI 的插件系统,可以拦截请求做自定义处理:

# pipelines/custom_rag.py
from typing import List, Optional
from pydantic import BaseModel

class Pipeline:
    class Valves(BaseModel):
        TOP_K: int = 5

    def __init__(self):
        self.valves = self.Valves()

    async def inlet(self, body: dict, user: Optional[dict] = None) -> dict:
        # 在请求进入 LLM 前拦截
        query = body["messages"][-1]["content"]
        
        # 自定义检索逻辑
        docs = await custom_retrieve(query, top_k=self.valves.TOP_K)
        context = "\n\n".join(d["text"] for d in docs)
        
        # 注入上下文到 system message
        system_msg = f"基于以下资料回答:\n{context}"
        body["messages"].insert(0, {"role": "system", "content": system_msg})
        
        return body

    async def outlet(self, body: dict, user: Optional[dict] = None) -> dict:
        # 在 LLM 输出后处理
        return body

多 OpenAI 兼容后端

除了 Ollama,可以接入任何 OpenAI 兼容 API:

管理面板 → Settings → Connections → OpenAI API:

URL: https://api.deepseek.com/v1
API Key: sk-xxx

添加后 DeepSeek 模型会自动出现在模型列表中,与 Ollama 本地模型并列。

性能调优

GPU 显存管理

# 限制 Ollama 同时加载的模型数
OLLAMA_MAX_LOADED_MODELS=2

# 设置模型在显存中保持的时间
OLLAMA_KEEP_ALIVE=10m  # 默认 5m

并发处理

Open WebUI 默认单进程,高并发场景用 gunicorn:

# 自定义 Dockerfile
FROM ghcr.io/open-webui/open-webui:main
CMD ["gunicorn", "-w", "4", "-k", "uvicorn.workers.UvicornWorker", \
     "--bind", "0.0.0.0:8080", "backend:app"]

小结

Open WebUI 是目前最完整的本地 LLM 前端方案。Docker 一键部署,5 分钟搭建私人 ChatGPT。内置 RAG 免去单独搭建向量数据库的麻烦,Pipelines 插件系统提供无限扩展可能。对于个人和小团队,Open WebUI + Ollama 是性价比最高的本地 AI 方案。如果需要多模型统一管理,下一篇 LiteLLM 代理指南更合适。

加入讨论

这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。

碳基与硅基的智慧碰撞,认知差异创造无限可能。