Open WebUI + Ollama — 全本地推理客服方案
数据完全不出网的硬要求下,单台 GPU 服务器跑 Open WebUI + Ollama + Qwen + 本地 Embedding,覆盖金融 / 医疗 / 政企合规场景。
- 场景
- 金融 / 医疗 / 政企等数据合规严苛场景,所有 AI 推理必须在本地
- 月成本
- $700 - $4,000(含 GPU)
- 难度
- 复杂
Open WebUIOllamaQwenbge-m3ChatwootvLLM (可选)
这套方案在解决什么问题#
云端 LLM(OpenAI / Claude / 国产云接口)虽然便宜好用,但有些场景根本不能用:
- 银行 / 证券 / 保险——客户对话含金融数据,监管不允许出境
- 医院 / 医美——病历 / 检查报告属于 PHI 健康信息
- 政企 / 国央企——所有数据必须在境内、加密存储、审计留存
- 涉密研究机构——数据流出即重大事故
Open WebUI + Ollama 是 2026 年「全本地推理 AI 客服」最成熟的组合:
- 单台 GPU 服务器即可启动
- LLM、Embedding、Reranker 都本地
- 提供完整的多用户、Pipelines(Python 中间件)、知识库
- 可外接 Chatwoot 当客户入口
架构#
何时选这套方案#
| 情况 | 适合? |
|---|---|
| 数据合规要求数据不出境 / 本地 | ✓ 必须 |
| 已经有 GPU 服务器(沉没成本) | ✓ 强烈推荐 |
| 月会话量 < 5,000,且能接受较高延迟 | ✓ 可行 |
| 月会话量 > 50,000,需要高并发 | ⚠ 需要专业 GPU 集群 |
| 没有合规约束,只是想省钱 | ✗ 云端 DeepSeek 更便宜 |
硬件配置#
| 场景 | 模型 | GPU | CPU / 内存 | 月成本(云租) |
|---|---|---|---|---|
| 小型 / POC | Qwen 2.5-7B q4 | 1 × A10 24GB | 8C/32G | ~$500 |
| 中型生产 | Qwen 2.5-14B q4 | 1 × A100 40GB | 16C/64G | ~$1,500 |
| 大型 / 企业 | Qwen 2.5-72B q4 | 2 × A100 80GB | 32C/128G | ~$4,000 |
| 极致性能 | Qwen 2.5-72B fp16 + vLLM | 4 × H100 | 64C/256G | $10k+ |
部署步骤#
1. 装 Ollama 与模型#
# 装 Ollama
curl -fsSL https://ollama.com/install.sh | sh
sudo systemctl enable --now ollama
# 拉模型(量化版本,省显存)
ollama pull qwen2.5:14b-instruct-q4_K_M
# 测试
ollama run qwen2.5:14b-instruct-q4_K_M "你好"
GPU 利用率检查:
nvidia-smi # 应该看到 ollama 进程占用 GPU
2. 装本地 Embedding 服务#
关键:不要用 OpenAI Embedding,否则数据出网,合规直接废。
docker run -d --name tei \
--gpus all -p 8080:80 \
-v $PWD/tei-data:/data \
ghcr.io/huggingface/text-embeddings-inference:1.5 \
--model-id BAAI/bge-m3
3. 装 Open WebUI#
docker run -d --name openwebui \
-p 3000:8080 \
-v openwebui:/app/backend/data \
--add-host=host.docker.internal:host-gateway \
-e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
-e DEFAULT_MODELS=qwen2.5:14b-instruct-q4_K_M \
-e DEFAULT_LOCALE=zh-CN \
ghcr.io/open-webui/open-webui:main
打开 http://YOUR_IP:3000,注册管理员。
Settings → Documents → Embedding Model:
- Type: OpenAI
- API Base URL:
http://host.docker.internal:8080 - Model: bge-m3
4. 配置 Pipelines(业务中间件)#
Pipelines 是 Open WebUI 给 Python 工程师的「中间件层」,跑在独立容器:
docker run -d --name pipelines \
-p 9099:9099 \
-v pipelines-data:/app/pipelines \
ghcr.io/open-webui/pipelines:main
写一个 Pipeline 实现「对话脱敏 + 审计」:
# pipelines/desensitize.py
import re
from typing import List, Optional
class Pipeline:
def __init__(self):
self.name = "Desensitize + Audit"
self.id_pattern = re.compile(r'\b\d{15,18}[Xx0-9]?\b') # 身份证
self.phone_pattern = re.compile(r'\b1[3-9]\d{9}\b')
def pipe(self, body: dict, user: dict, **kwargs):
msg = body['messages'][-1]['content']
# 脱敏
msg = self.id_pattern.sub('[ID]', msg)
msg = self.phone_pattern.sub('[PHONE]', msg)
body['messages'][-1]['content'] = msg
# 审计日志
with open('/app/pipelines/audit.log', 'a') as f:
f.write(f"{user.get('id')}|{user.get('name')}|{msg[:200]}\n")
return body
Open WebUI 配上 Pipelines URL http://pipelines:9099 即可在 LLM 调用前自动应用。
5. 接 Chatwoot 作为客户入口#
# Chatwoot Agent Bot
Outgoing URL: http://openwebui:3000/api/chat/completions
Auth Header:
Authorization: Bearer <Open WebUI API Key>
客户在 Chatwoot 提问 → Open WebUI → Pipelines 脱敏 → Ollama 本地推理 → 答案返回 → Chatwoot 回复客户。
实测性能(Qwen 14B q4 on 1 × A100 40GB)#
| 指标 | 数值 |
|---|---|
| 首 token 延迟 | 800-1200 ms |
| 生成速度 | 45-60 tokens/秒 |
| RAG 检索延迟 | 50-80 ms |
| 端到端首响 | 1.5-2.5 秒 |
| 单 GPU 并发上限 | ~80 并发 |
| 单日吞吐 | 80 并发 × 80 秒/会话 ≈ 86,400 会话/天理论 |
合规设计要点#
数据流必须本地#
| 数据 | 必须在哪 |
|---|---|
| 客户对话明文 | 本地 |
| LLM 推理 | 本地 GPU |
| Embedding 计算 | 本地 GPU |
| 向量库 | 本地存储 |
| 知识库原文 | 本地存储 |
| 审计日志 | WORM 存储 |
强身份验证#
- Chatwoot Widget 必须接 SSO(OAuth / 公司 IDP)
- 未认证客户只能访问「公开 FAQ」分支
- 已认证客户才能进入业务问答
审计留存#
- 每条对话、Prompt、模型版本、知识库版本都记录
- 用 WORM 存储或 S3 Object Lock
- 留存周期看监管要求(金融通常 5 年+)
成本估算#
自有 GPU(最划算)#
| 项 | 月成本 |
|---|---|
| GPU 折旧(A100 一次性 $15k / 36 月) | $400 |
| 电费(A100 ~250W × 24h) | $50 |
| CPU 主机 + 网络 | $80 |
| Chatwoot 等辅助服务 | $30 |
| 合计 | ~$560 / 月 |
云租 GPU#
中型生产 1 × A100 40GB + 16C/64G:~$1,500 / 月
关键提醒#
- vLLM 替代 Ollama 能把并发拉到 5-10 倍,生产环境推荐
- 量化精度:q4 比 fp16 快 2-3 倍但准确率下降 < 5%,合规场景可接受
- 不要 GPU 共享多个项目——内存碎片会卡死
与云端方案的真实对比#
| 维度 | 本地 Qwen 14B | 云端 Qwen 72B |
|---|---|---|
| 准确率(同测试集) | 4.0 / 5 | 4.4 / 5 |
| 首响延迟 | 1500 ms | 800 ms |
| 月成本(5,000 会话) | $560-1,500 | $50-150 |
| 数据合规 | ✓ | ✗ 部分场景禁用 |
| 运维复杂度 | 高 | 极低 |
坦白结论:本地推理唯一的理由是合规。成本上云端碾压本地。
常见坑#
- GPU 显存不够:14B 用 q4 量化占约 9GB,24GB 卡够;32B 需要 80GB
- Ollama 并发瓶颈:默认串行,需要改
OLLAMA_NUM_PARALLEL=4 - Pipelines 中间件易丢消息:要加重试 + 死信队列
- 审计日志膨胀:每日几 GB,需要 logrotate + 定期归档到 WORM
- Open WebUI 升级风险:升级前先在测试环境跑一遍,社区版偶尔有 breaking change