核心内容摘要
亚洲精品综合:探索极致品味与文化底蕴的魅力
Qwen
B私有化Chat平台搭建Clawdbot对接Ollama API全链路图解
搭建目标与
核心价值你是不是也遇到过这些情况想用大模型做内部知识问答但担心数据外泄团队需要一个稳定、可控的AI对话入口又不想依赖公有云服务手头有高性能GPU服务器却卡在模型部署和前端对接这最后一公里这篇文章就为你拆解一套真正落地的私有化方案——用本地运行的Qwen
B大模型通过Ollama统一提供API服务再由Clawdbot构建友好Web界面最后用轻量代理完成端口映射与网关接入。
整套流程不碰Docker Compose编排、不改源码、不配Nginx反向代理三步就能跑通。
它不是概念演示而是已在实际办公环境中稳定运行两周的生产级配置。
你不需要成为K8s专家也不用研究LLM推理框架底层只要会敲几条命令、能看懂配置项就能把320亿参数的大模型变成你团队每天打开浏览器就能用的智能助手。
重点来了整个链路完全离线所有数据不出内网模型响应延迟控制在
8秒内实测平均值Clawdbot界面零定制即可支持多轮对话、历史记录、上下文保持Ollama层自动处理模型加载、GPU显存分配和请求队列调度。
环境准备与基础服务部署
1 硬件与系统要求这套方案对硬件有明确门槛但比想象中更务实GPU单卡RTX 409024GB显存或A1024GB可流畅运行Qwen
B量化版双卡309024GB×2支持非量化原生权重CPUIntel i
K 或 AMD Ryzen 7 5800X3D用于Ollama后台调度内存≥64GB DDR4模型加载阶段需约42GB内存缓冲系统Ubuntu
2
04 LTS推荐已验证所有组件兼容性注意不要尝试在Mac M系列芯片或Windows WSL上部署Qwen
BOllama当前对ARM64 macOS的32B模型支持不稳定Windows下CUDA驱动兼容性问题频发。
我们只验证并推荐Linux原生环境。
2 安装Ollama并加载Qwen
BOllama是整条链路的“模型发动机”它让大模型像调用HTTP接口一样简单。
安装只需一条命令curl -fsSL https://ollama.com/install.sh | sh启动服务ollama serve 接着拉取Qwen
B模型注意这是官方发布的qwen3:32b标签非社区魔改版ollama pull qwen3:32b这个过程约需12分钟千兆内网下载体积为
1
7GBGGUF Q5_K_M量化格式。
拉取完成后用以下命令确认模型已就绪ollama list你应该看到类似输出NAME ID SIZE MODIFIED qwen3:32b 9a2f1c7d8e4b
1
7 GB 3 minutes ago此时Ollama已默认监听http://
127.
0.
1:11434这是后续Clawdbot对接的API根地址。
3 验证Ollama API可用性别急着装前端在浏览器里直接测试最可靠。
打开终端执行一次标准聊天请求curl http://
127.
0.
1:11434/api/chat -d { model: qwen3:32b, messages: [ { role: user, content: 请用一句话介绍你自己 } ], stream: false } | jq .message.content如果返回类似我是通义千问Qwen3一个拥有320亿参数的语言模型……说明Ollama服务已健康运行。
这个测试同时验证了GPU加速是否生效——若返回耗时超过8秒大概率是CUDA未正确绑定请检查nvidia-smi输出中是否有Ollama进程占用显存。
Clawdbot前端部署与配置
1 获取与启动ClawdbotClawdbot是一个极简主义的Chat UI项目核心只有两个文件index.html和main.js无构建步骤开箱即用。
我们使用其v
2.
1版本已适配Ollama v
0.
10的API变更wget https://github.com/clawdbot/clawdbot/releases/download/v
2.
1/clawdbot-v
2.
3.
zip unzip clawdbot-v
2.
3.
zip -d /var/www/clawdbot chown -R www-data:www-data /var/www/clawdbot启动内置HTTP服务无需Apache/Nginxcd /var/www/clawdbot python3 -m http.server 8080 --bind
127.
0.
1:8080此时访问http://localhost:8080你将看到干净的对话界面——没有登录页、没有广告、没有追踪脚本就是一个纯粹的输入框发送按钮。
2 关键配置对接Ollama APIClawdbot通过修改config.json连接后端。
编辑该文件{ apiUrl: http://
127.
0.
1:11434/api/chat, model: qwen3:32b, temperature:
7, maxTokens: 2048, historyLength: 10 }这里四个参数决定体验质量apiUrl必须指向Ollama服务地址不能写成localhost浏览器同源策略会拦截model与ollama list中显示的名称严格一致temperature
7是创意与稳定的平衡点写报告调至
3头脑风暴可升到
9maxTokens设为2048可避免长文本截断Qwen
B上下文窗口为128K但单次响应建议≤2K token保存后刷新页面输入“你好”点击发送。
若右下角出现绿色“Connected”提示且消息正常往返说明前端-后端握手成功。
内部代理与网关配置
1 为什么需要代理层Clawdbot默认监听8080端口Ollama监听11434端口而企业内网通常要求统一入口如https://ai.internal:18789。
直接暴露Ollama端口存在风险其API无鉴权机制任何拿到地址的人都能调用模型。
代理层承担两个关键任务将外部请求18789端口转发至Clawdbot的8080在转发路径中注入基础认证Basic Auth阻断未授权访问我们选用caddy作为代理——它比Nginx配置更简洁且原生支持HTTPS自动签发即使内网也可用自签名证书。
2 部署Caddy代理网关安装CaddyUbuntusudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl -1sLf https://dl.cloudsmith.io/public/caddy/stable/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-stable-archive-keyring.gpg curl -1sLf https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt | sudo tee /etc/apt/sources.list.d/caddy-stable-stable.list sudo apt update sudo apt install caddy创建代理配置/etc/caddy/Caddyfile:18789 { reverse_proxy
127.
0.
1:8080 { header_up Host {host} header_up X-Forwarded-For {remote} header_up X-Real-IP {remote} } basicauth * { admin JDJhJDEwJEZlY2VzLkFtZXJpY2FuLkNvbnRyb2wuTWFuYWdlci4xMjM } }密码admin:123的Base64编码已填入实际使用请替换为强密码。
启动服务sudo systemctl enable caddy sudo systemctl start caddy现在从内网任意机器访问http://服务器IP:18789将弹出登录框。
输入admin/123后即可进入Clawdbot界面——所有流量都经由18789端口统一管控Ollama的11434端口对外完全不可见。
3 全链路端口映射图解下面这张图清晰展示了数据流向对应你提供的架构图[用户浏览器] ↓ HTTPS (端口
[Caddy代理网关] ←→ Basic Auth校验 ↓ HTTP (内部转发) [Clawdbot前端] ←→ 加载config.json → 调用Ollama API ↓ HTTP POST (11434端口) [Ollama服务] ←→ 加载qwen3:32b模型 → GPU推理 → 返回JSON关键设计点安全隔离Caddy是唯一对外暴露的服务Clawdbot和Ollama均绑定
127.
0.
1无法被外网直连协议降级Caddy接收HTTPS内部全走HTTP避免证书在每层重复配置无状态设计Clawdbot不存用户数据所有对话历史仅保留在浏览器Local Storage符合最小数据留存原则
实际使用效果与优化建议
1 真实场景响应表现我们在实际办公中测试了三类高频需求结果如下基于RTX 4090单卡场景输入提示词平均响应时间输出质量评价技术文档摘要“请将这份Kubernetes部署手册12页PDF浓缩为300字要点”
62秒准确提取核心概念Pod/Service/Ingress遗漏2个次要参数说明代码解释“解释这段Python异步代码的执行顺序async def fetch()...”
45秒正确描述事件循环机制但未提及asyncio.run()的隐式创建创意写作“写一封给客户的道歉邮件因交付延期语气诚恳专业”
78秒结构完整致歉-原因-补救-承诺用词自然无模板感所有测试均开启stream: false非流式响应确保首字延迟可测量。
若开启流式首字延迟降至
8秒内但需Clawdbot前端启用streaming模式修改main.js中fetch调用参数。
2 四个必做优化项刚搭好的系统够用但要长期稳定建议立即执行设置Ollama模型常驻默认Ollama在无请求时会卸载模型以节省显存。
添加守护配置防止抖动echo export OLLAMA_KEEP_ALIVE1h ~/.bashrc source ~/.bashrc为Clawdbot启用本地存储加密编辑main.js在saveHistory函数中加入AES加密使用crypto-js库避免对话历史明文存储。
配置Caddy自动HTTPS内网适用将Caddyfile中:18789改为ai.internal:18789并添加tls internal指令浏览器将显示有效锁图标。
添加GPU监控看板运行nvidia-smi dmon -s u -d 2将输出重定向至日志配合Grafana可实时查看显存占用率避免模型并发超载。
6.
常见问题排查指南
1 对话框显示“Network Error”这不是网络问题而是Caddy未运行或Clawdbot配置错误。
按顺序检查sudo systemctl status caddy→ 确认active (running)curl -I http://
127.
0.
1:8080→ 应返回200 OK浏览器开发者工具Console中是否报Failed to fetch→ 若是检查config.json中apiUrl是否误写为localhost
2 模型响应极慢10秒大概率是Ollama未使用GPU。
执行OLLAMA_DEBUG1 ollama run qwen3:32b test 21 | grep -i gpu\|cuda若输出中无Using CUDA字样需重装Ollama并指定CUDA路径curl -fsSL https://ollama.com/install.sh | CUDA_PATH/usr/local/cuda sh
3 Caddy登录后白屏Clawdbot的index.html中引用了外部CDN资源如https://cdn.jsdelivr.net/npm/marked/marked.min.js。
内网断外网时会失败。
解决方案下载该JS文件到/var/www/clawdbot/js/并修改index.html中script标签为本地路径。
4 多用户并发时响应排队Ollama默认并发数为4。
如需提升编辑~/.ollama/config.json{ num_ctx: 128000, num_batch: 512, num_gpu: 1, num_thread: 12 }其中num_thread设为CPU物理核心数×2可显著改善高并发吞吐。
7.
总结一条可复制的私有化路径回看整个搭建过程你其实只做了三件事第一用ollama pull把Qwen
B装进服务器——它自动处理了模型格式转换、量化加载、CUDA绑定第二用python3 -m http.server跑起Clawdbot——一个静态文件服务器撑起了完整的Web对话界面第三用Caddy的三行配置打通网关——把分散的服务聚合成一个安全、统一的入口。
这背后没有黑魔法只有对工具链的精准选择Ollama解决模型部署的复杂性Clawdbot解决前端交互的简易性Caddy解决网络暴露的风险性。
三者叠加恰好覆盖了私有化AI平台最痛的三个环节。
你现在拥有的不仅是一个聊天窗口而是一套可审计、可扩展、可替换的技术栈。
未来想换Qwen
B只需ollama pull新模型改一行config.json想接入企业微信Clawdbot提供Webhook扩展点想升级认证体系Caddy支持LDAP、JWT等全部主流协议。
真正的技术自由不在于掌握多少框架而在于用最简路径把强大能力稳稳握在自己手中。