在 上部署一个AI聊天机器人以供团队使用 intranet
您的团队未经您同意就使用 ChatGPT,每次输入提示词都可能把内部文件传给 OpenAI。在内网部署企业 AI 聊天机器人,几小时就能解决这个问题:部署一台运行 Ollama 的服务器、支持多用户的 Open WebUI,以及位于前端并启用 HTTPS 的 Nginx,就能为整个团队提供类似 ChatGPT 的界面,且没有任何 token 离开您的网络。本指南涵盖完整技术栈,从硬件选型一直到对话备份。
#为什么要在内网部署企业 AI 聊天机器人?
有三个具体原因促使团队选择内部部署:隐私保护(您的提示中经常包含代码片段、客户数据和财务信息)、成本(ChatGPT Team 订阅每用户每月 25 欧元,20 人的团队一年费用很快就达到 5000 欧元),以及控制权(您可以选择模型、系统提示和对话日志)。
配置得当的企业内网 AI 聊天机器人技术栈,只需一台机器就能支持最多 30–50 人的团队。超过这一规模时,就将推理服务器与前端分开部署,但架构保持不变。
#技术栈架构
在工作场所部署本地 AI:GDPR、AI 法案、多用户架构、成本、供管理层参考的说明材料。
- 在线空间,终身可用
- PDF + 文件
- 终身更新
四个组件堆叠,每个组件均有明确职责:
- Ollama
- 托管模型(Qwen 3.5、Granite 4.2、Gemma 4、Mistral Small)的推理守护进程。默认监听地址为 http://localhost:11434。
- Open WebUI
- 在 Docker 中运行的类 ChatGPT 多用户前端。支持账户、对话、RAG 以及管理员和用户角色的管理。
- Nginx
- 作为前置反向代理,负责终止 HTTPS 连接、实施请求速率限制,并通过一个规范的内部域名提供服务。
- Watchtower + cron
- 自动更新 Docker 镜像,并每天备份 Open WebUI 的数据卷(其中包含账户和对话)。
#硬件和操作系统要求
系统配置取决于目标模型和并发负载情况。团队可参考以下实用建议:
- 小团队(5-15名用户,模型8-9B)
- 16 GB 内存,GPU 需要 8-12 GB 显存(RTX 3060 12GB,4060 Ti 16GB)。Qwen 3.5 9B Q4(6.6 GB,256k 上下文)或 Granite 4.2 8B(5.3 GB,token 消耗极低)
- 中等规模团队(15-30名用户,模型规模20-24B)
- 32 GB 内存,配备 16 GB 显存的 GPU(RTX 4070 Ti Super、5080)。Mistral Small 24B Q4(14 GB,法语表现良好)或 gpt-oss 20B(14 GB,采用 MXFP4 格式时速度很快)。
- 大型团队(30-50 人,模型规模 27-30B)
- 64 GB 内存,配备 24 GB 显存的 GPU(RTX 3090/4090),或 64 GB 的 Mac Studio M5 Max。Qwen 3.8 27B Q4(18 GB,262k 上下文,支持视觉)或 Granite 4.2 30B Q4(18 GB,面向企业)。
- 并发用户超过 50 人
- 切换至 vLLM 或在负载均衡器后部署多个 Ollama 实例。超出本指南范围。
操作系统方面:Ubuntu Server 22.04 或 24.04 LTS 仍是最简单的选择。需预先安装 Docker Engine 和 NVIDIA 驱动程序(使用 GPU 时还需安装 nvidia-container-toolkit)。
#1. 在服务器上安装 Ollama
Linux 上的安装通过官方脚本完成。该脚本会检测 NVIDIA GPU,并自动配置 systemd 服务。
默认情况下,守护进程仅在本地主机上监听。为了让 Docker (Open WebUI) 能从容器内调用它,需将其暴露在服务器的所有本地接口上。编辑 systemd 覆盖文件:
- OLLAMA_HOST=0.0.0.0:11434
- 监听所有网络接口。操作系统防火墙仍会阻止外部访问 11434 端口——只有同一台机器上的 Open WebUI 能访问该端口。
- OLLAMA_KEEP_ALIVE=30m
- 在最后一次提示之后,将模型继续保留在显存中 30 分钟。避免在两次用户请求之间重新加载模型所带来的较大开销。
- OLLAMA_NUM_PARALLEL=4
- 并行请求数。对于在 12 GB 显存上运行的 8–9B 模型(如 Qwen 3.5 9B),可以先设为 4;使用规格更低的 GPU 时,请降至 2。
#2. 使用 Docker 以多用户模式部署 Open WebUI
Open WebUI 通过一条 Docker 命令即可部署。挂载卷 open-webui:/app/backend/data 包含全部数据:账户、对话、提示词。您需要备份的就是这部分数据。
- -p 127.0.0.1:3000:8080
- Open WebUI 仅能在服务器本地访问,Nginx 将作为内部网络的桥梁。这对安全性至关重要。
- ENABLE_SIGNUP=false
- 任何人都无法从登录页面创建账户。您需要在管理后台创建用户账户。
- DEFAULT_USER_ROLE=pending
- 新账户需等待管理员审核。避免员工误邀请外部人员。
- OLLAMA_BASE_URL
- 指向 Ollama,该服务运行在主机上。host.docker.internal 通过 --add-host 参数解析为 Docker 网关。
通过 http://serveur:3000 界面(经 SSH 转发或直接访问)创建的第一个账户会自动成为管理员。请在容器启动后立即创建该账户,并在对外开放服务之前完成这一步。
#3. 使用Nginx配置反向代理并启用内部SSL
为了妥善对外提供 chat.entreprise.local 服务,由 Nginx 终止 HTTPS 连接,再将请求转发到位于 127.0.0.1:3000 的 Open WebUI。在内网中,您可以使用内部 PKI 颁发的证书,或通过 GPO 部署到各台计算机上的自签名证书。
- client_max_body_size 100M
- RAG 不可或缺的设置:允许您的用户上传最大 100 MB 的 PDF 或文档。
- Upgrade / Connection
- 启用WebSocket。缺少这两行时,token级流式输出将停止,界面会显得卡住。
- proxy_read_timeout 600s
- 耗时较长的生成请求(例如为大型文档生成摘要)可能需要数分钟。Nginx 的默认超时时间(60 秒)会导致响应在中途被截断。
#4. 身份认证、角色与用户引导
Open WebUI 原生支持三个角色:admin(配置所有设置)、user(使用聊天功能)、pending(账户已创建但尚未激活)。对于中小企业,本地身份验证就足够了。当用户人数超过 30 至 40 人,或需要严格遵循 IT 管理要求时,请通过 OIDC 对接您的身份提供商(Keycloak、Authentik、Microsoft Entra)。
- 01创建用户在 Admin 面板中进入 Users → Add User。填写电子邮箱、姓名和初始密码。用户会在首次登录时更改该密码。
- 02按角色限制模型在 Admin → Models 中,您可以对普通用户隐藏某些模型。例如,如果已加载 Qwen 3.8 27B(显存占用最高的模型),可以将其设为仅供管理员使用。
- 03强制使用默认系统提示词Admin → Settings → Interface → Default Prompt Suggestions。非常适合设定使用规则(“你用法语回答,拒绝敏感话题等。”)。
- 04禁用外部功能如果您不希望有任何出站网络连接,请在 Admin → Settings 中关闭 Web Search(否则 Open WebUI 会调用 DuckDuckGo)和 Image Generation。
#5. 监控与对话备份
需要监控三项内容:服务器的健康状况(CPU/GPU/RAM)、Ollama API 的健康状况,以及 Open WebUI 数据库的完整性。还需要备份一项内容:Docker 的 open-webui 数据卷。
#快速监控
如果您使用 Prometheus + Grafana,用 nvidia_smi_exporter 监控 GPU、用 node_exporter 监控系统,就足以满足 95% 的情况。Open WebUI 本身提供可通过 GET 请求访问的 /health 接口,可将其加入您的可用性检查。
#每天备份 Open WebUI 数据卷
Docker 卷 open-webui 中包含一个 SQLite 数据库,其中存储了所有账户、对话、自定义提示词以及为 RAG 建立索引的文档。丢失这个卷,就意味着团队的全部历史记录都会丢失。
脚本保留14天的历史记录。要建立像样的灾难恢复计划(PRA),请每晚通过rsync或rclone,将/var/backups/open-webui复制到NAS或加密的S3存储桶。
#故障排除
- Open WebUI 检测不到任何模型
- 容器无法连接到 Ollama。请运行 docker exec open-webui curl http://host.docker.internal:11434/api/tags 进行检查。如果超时,说明您的 Ollama 正在监听 127.0.0.1——请将设置改回 OLLAMA_HOST=0.0.0.0:11434。
- 流式输出不连贯或卡住
- Nginx 缺少 WebSocket 头部。请检查 vhost 配置中是否存在 proxy_set_header Upgrade 和 Connection "upgrade"。
- 长时间请求出现 504 网关超时
- proxy_read_timeout 设置过低。请至少设为 600 秒。为大型文档生成摘要时,请提高到 1200 秒。
- GPU 资源饱和,延迟急剧上升
- 并行请求过多。将 OLLAMA_NUM_PARALLEL 设置为 2,并提高 OLLAMA_KEEP_ALIVE 值以避免频繁重新加载。
- /var/lib/docker 出现 'no space left' 错误
- Ollama 模型不包含在 Docker 中——是 open-webui 的卷导致体积增大。请运行 docker system prune,并监控 RAG(索引文档会迅速达到数 GB)。
#深入了解
您已经有一个供团队使用的实例在运行。接下来,可以从三个方面自然地推进,让它更专业:
- 记录GDPR合规性
- 《本地 LLM 与 GDPR》指南涵盖审计、处理活动记录及 CNIL 建议——如果您的团队处理个人数据,这份指南必不可少。
- 通过 RAG 扩展工具
- 使用 ChromaDB 和 Mistral 的 RAG 指南介绍了如何将您的内部文档库(维基、导出的 SharePoint 内容、合同)连接到 Open WebUI。
- 自动化工作流
- 《使用 n8n 和 Ollama 实现自动化》指南介绍了如何将您的聊天机器人连接到业务系统(收到的邮件、工单、RSS),同时确保数据完全不会泄露到云端。
有反馈、发现了错误,或想补充说明?请告诉我们,让这份指南对每个人都更有帮助。