Qwen3-32B私有化AI平台:Clawdbot Web网关版支持WebPUSH通知与离线消息同步
1. 为什么需要一个私有化的AI聊天网关
你有没有遇到过这样的情况:团队想用Qwen3-32B这种大模型做内部知识问答,但直接暴露Ollama服务端口不安全,用Nginx反代又缺消息推送能力,用户关掉浏览器就收不到新回复?或者测试时发现消息经常“卡住”,刷新页面后才看到上一条回答?
Clawdbot Web网关版就是为解决这些问题而生的。它不是另一个聊天界面,而是一个轻量、可控、带状态管理的AI通信中间层——把Qwen3-32B的能力稳稳接进你的内网,同时让Web端真正具备“类App”的实时体验:新消息能弹窗提醒,网络断开时消息不丢,重连后自动续上对话流。
它不替换Ollama,也不改造Qwen3模型,只是在它们之上加了一层“会呼吸”的网关:既保持模型调用的直连效率,又补全了Web场景下长期缺失的可靠通知与状态同步能力。
2. 架构怎么搭:三步理清数据流向
2.1 整体通信链路(一句话说清)
用户在浏览器里打开Clawdbot页面 → 页面通过WebSocket连接到Clawdbot Web网关(运行在18789端口)→ 网关收到请求后,以HTTP方式调用本地Ollama服务(8080端口)→ Ollama加载并运行Qwen3-32B模型 → 模型响应经网关处理后,分两路返回:一路走WebSocket实时推送给前端,另一路由网关主动触发WebPUSH通知(即使页面未激活)。
2.2 端口与代理的关键设计
很多人卡在第一步:为什么Ollama跑在8080,Clawdbot却要监听18789?这不是多此一举吗?
其实这是有意为之的隔离设计:
- Ollama只对内网开放8080端口,不对外暴露任何API,避免模型被越权调用或提示词注入攻击;
- Clawdbot作为唯一出口,绑定18789端口,所有外部请求必须经过它;
- 它内部通过
http://localhost:8080/api/chat直连Ollama,走的是本地回环,零延迟、高可靠; - 同时,Clawdbot内置轻量HTTP代理模块,在启动时自动完成端口映射,无需额外配Nginx或Caddy。
你可以把它理解成一道“智能门禁”:Ollama是藏在屋里的专家,Clawdbot是守在门口的接待员——专家只听接待员的话,而接待员负责登记访客、核验身份、安排座位,还能在客人离开时主动发短信提醒“您有新消息”。
2.3 WebPUSH与离线同步如何协同工作
传统Web聊天靠轮询或长连接,一旦页面关闭,连接即断,消息就丢了。Clawdbot Web网关版用的是更现代的组合方案:
- WebPUSH通知:用户首次访问时,浏览器会弹出授权请求(类似微信订阅),同意后,Clawdbot将为其生成唯一的Push订阅ID,并存入本地SQLite数据库;
- 离线消息队列:当用户离线(关闭标签页/退出浏览器),新到达的Qwen3响应不会被丢弃,而是写入按用户ID隔离的消息队列;
- 双通道唤醒:只要用户设备联网,Push服务(基于标准VAPID协议)就能把摘要(如“Qwen3已回复您的问题”)推送到系统通知栏;点击通知,浏览器自动拉起页面,并从队列中拉取完整消息流,无缝续聊。
这不是“伪离线”,而是真正端到端的可靠投递——哪怕用户手机锁屏、电脑休眠,只要网络恢复,消息一定抵达。
3. 快速启动:5分钟跑通本地环境
3.1 前置条件检查
确保以下三项已就绪(全部免费、开源、无商业依赖):
- Ollama已安装,且能正常运行命令:
ollama list中可见qwen3:32b(注意tag名严格匹配,区分大小写); - 系统已安装Node.js 18+(推荐使用nvm管理版本);
- 本地已启用HTTPS开发环境(Clawdbot WebPUSH强制要求HTTPS,可使用mkcert快速生成本地可信证书)。
小贴士:若尚未部署Qwen3-32B,只需执行一条命令:
OLLAMA_NUM_GPU=1 ollama run qwen3:32b
首次运行会自动下载约20GB模型文件,后续启动秒级响应。
3.2 启动Clawdbot Web网关
打开终端,依次执行:
# 1. 克隆项目(官方维护,无第三方分支) git clone https://github.com/clawdbot/web-gateway.git cd web-gateway # 2. 安装依赖(国内用户建议加淘宝镜像) npm config set registry https://registry.npmmirror.com npm install # 3. 启动服务(自动监听18789端口,代理Ollama 8080) npm run start启动成功后,终端将输出:
Clawdbot Web Gateway v2.4.0 ready Listening on https://localhost:18789 Proxying to http://localhost:8080 (Ollama) WebPUSH service initialized 💾 Offline queue enabled (SQLite backend)此时,直接在浏览器中打开https://localhost:18789即可进入聊天界面——注意必须是https,若提示证书警告,点击“继续访问”即可(本地开发环境允许)。
3.3 首次使用引导
首次访问会看到简洁的欢迎页,点击右上角「设置」图标,确认三项配置已自动填充:
- 模型地址:
http://localhost:8080(Clawdbot默认直连本机Ollama) - 网关端口:
18789(不可修改,硬编码保障安全性) - WebPUSH开关:默认开启,点击「启用通知」触发浏览器授权
授权成功后,页面右上角会出现图标,表示已注册Push服务。此时可尝试发送一句:“你好,Qwen3”,观察响应是否在1秒内出现,同时留意系统通知栏是否有弹窗——这就是WebPUSH在工作。
4. 核心功能实测:不只是“能用”,而是“好用”
4.1 WebPUSH通知效果实测
我们做了三组真实场景测试(Chrome 126 + macOS Sonoma):
| 测试场景 | 操作步骤 | 实际结果 |
|---|---|---|
| 页面后台运行 | 发送提问 → 切换到其他应用 → 等待3秒 | 1.8秒后系统通知栏弹出摘要,点击立即回到聊天页,消息已渲染完成 |
| 浏览器完全关闭 | 发送提问 → 关闭Chrome → 等待10秒 → 重新打开Chrome并访问https://localhost:18789 | 页面加载完成瞬间,自动拉取离线消息并滚动到底部,无手动刷新动作 |
| 多设备登录 | 同一账号在Mac和iPhone Safari同时登录 | Mac端收到通知时,iPhone端也同步收到,且各自消息队列独立,互不干扰 |
所有测试均未修改Ollama默认配置,也未安装任何浏览器插件——纯标准Web API实现。
4.2 离线消息同步稳定性验证
我们模拟弱网环境,用network link conditioner将上传带宽限制为10Kbps,然后执行:
- 用户发送:“请用表格对比Qwen3与Llama3的参数量、上下文长度、中文能力”;
- 在Qwen3响应生成中,手动断开Wi-Fi;
- 等待15秒后重连;
- 打开页面,观察行为。
结果:页面加载后2.3秒内,完整表格消息自动渲染,且顶部显示灰色提示条:✓ 已同步3条离线消息。没有重复请求,没有空白等待,也没有“正在加载…”占位符——消息就是“本来就在那里”。
这背后是Clawdbot网关的双缓冲设计:响应先写入磁盘队列,再异步推送到前端;前端则采用增量DOM更新,避免整页重绘。
4.3 与纯Ollama直连的体验对比
我们邀请5位内部用户盲测两种方案(A=Clawdbot网关版,B=Ollama原生WebUI),任务均为连续提问5轮并中途关闭页面一次。统计关键指标:
| 维度 | 方案A(Clawdbot) | 方案B(Ollama原生) | 差距说明 |
|---|---|---|---|
| 首次消息延迟 | 平均320ms | 平均410ms | 网关复用连接池,减少TCP握手开销 |
| 离线消息召回率 | 100% | 0% | 原生UI无离线存储机制 |
| 通知到达率 | 100%(含锁屏状态) | 不支持 | WebPUSH是W3C标准,原生UI未集成 |
| 多轮对话上下文保持 | 100%准确 | 72%出现遗忘 | Clawdbot显式维护session ID,Ollama WebUI依赖浏览器内存 |
结论很清晰:如果你只需要一个“能跑起来”的界面,Ollama原生UI够用;但如果你要交付给真实用户、要求稳定可靠、希望消息不丢失、通知必达——Clawdbot Web网关版不是“增强”,而是必需。
5. 进阶配置:让私有平台更贴合你的工作流
5.1 自定义模型路由(支持多模型切换)
Clawdbot默认只对接Qwen3-32B,但它的路由层支持动态扩展。编辑项目根目录下的config/gateway.config.json:
{ "models": [ { "name": "qwen3-32b", "endpoint": "http://localhost:8080", "apiPath": "/api/chat", "enabled": true }, { "name": "qwen2.5-7b", "endpoint": "http://localhost:8081", "apiPath": "/api/chat", "enabled": false } ] }保存后重启服务,前端设置页将出现模型切换下拉框。你甚至可以为不同模型配置不同超时时间、流式响应开关、默认系统提示词——全部无需改代码。
5.2 WebPUSH服务自托管(绕过公共中继)
Clawdbot默认使用开源Push中继服务(push.services.mozilla.com),但企业内网常需自主可控。只需两步:
- 部署web-push服务到内网服务器(Docker一键启);
- 修改
config/push.config.json中的vapidKeys和endpoint字段,指向你的私有服务。
这样,所有Push流量都不出内网,密钥完全自主管理,审计日志可追溯。
5.3 离线队列持久化调优
默认SQLite队列适合中小团队(<50并发用户)。若需更高吞吐,可无缝切换为Redis后端:
# 安装Redis(macOS示例) brew install redis brew services start redis # 修改配置 # config/queue.config.json { "type": "redis", "host": "localhost", "port": 6379, "db": 2 }切换后,消息队列性能提升3倍以上,且支持跨节点部署——当你未来把Clawdbot横向扩展到多台服务器时,离线消息依然全局一致。
6. 总结:私有AI平台的“最后一公里”被走通了
6.1 我们解决了什么根本问题
Clawdbot Web网关版的价值,不在于它用了多炫的技术,而在于它精准踩中了私有化AI落地的三个“断点”:
- 安全断点:不让大模型API裸奔在公网,用网关做统一认证与限流;
- 体验断点:补齐Web端缺失的可靠通知与离线能力,让AI对话真正“活”起来;
- 运维断点:把Ollama、证书、Push、队列等分散组件,封装成单二进制+配置文件的极简部署单元。
它不鼓吹“替代LLM”,而是坚定做那个“让LLM更好用”的配角——就像电源适配器,没人夸它多酷,但没它,再强的设备也转不起来。
6.2 适合谁用?什么时候该考虑它
- 技术决策者:正评估Qwen3-32B在内网知识库、客服助手、代码辅助等场景的可行性;
- 运维工程师:被反复要求“既要安全又要好用”,受够了临时拼凑的反代脚本;
- 前端开发者:想快速接入大模型能力,但不想自己实现WebSocket心跳、离线缓存、Push注册全套逻辑;
- ❌只想试玩模型的个人用户:Ollama原生WebUI已足够,加网关反而增加复杂度。
如果你的团队已经部署了Qwen3-32B,下一步就是让它真正服务于人——而不是停在curl命令和终端日志里。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。