Clawdbot+Qwen3-32B保姆级教程:日志排查、错误码解读与常见问题解决
1. 为什么需要这篇教程
你刚部署好Clawdbot,也成功接入了Qwen3-32B大模型,页面能打开、输入框能打字、发送按钮也能点——但一问就卡住,或者返回“连接超时”“模型未响应”“502 Bad Gateway”这类提示。你翻遍控制台,看到一堆滚动日志,却分不清哪条是关键线索;你查文档,发现错误码只有一行定义,没说怎么修;你重启服务,问题照旧。
这不是你的问题。Clawdbot + Qwen3-32B 这套组合虽强大,但涉及Ollama本地模型服务、Clawdbot应用层、Nginx/内部代理网关、端口转发链路四层协作,任一环节出偏,都会表现为“聊天没反应”。而官方文档通常只讲“怎么装”,不讲“坏了怎么查”。
本教程不重复部署步骤,不堆砌参数说明,全程聚焦你真正卡住的三个时刻:
- 日志里满屏滚动,哪一行该盯?
- 控制台报
ERR_CONNECTION_REFUSED或504 Gateway Timeout,背后对应哪一层故障? - 输入后无响应、响应延迟高、回答错乱——分别该检查什么?
所有操作均基于真实排障场景验证,命令可复制粘贴,判断逻辑清晰到能写进值班手册。
2. 整体架构与关键链路图解
在动手查问题前,先建立一张“故障地图”。Clawdbot调用Qwen3-32B不是直连,而是经过明确的四段路径:
Clawdbot前端(浏览器) ↓ HTTPS 请求(80/443) Clawdbot后端服务(Node.js) ↓ HTTP 请求(localhost:3000 → 代理转发) 内部Web网关(Nginx / 自研代理) ↓ 端口映射(8080 → 18789) Ollama服务(Qwen3-32B API)关键节点与默认端口如下表所示,后续所有排查都围绕它们展开:
| 组件 | 默认监听地址 | 作用 | 常见异常表现 |
|---|---|---|---|
| Clawdbot后端 | http://localhost:3000 | 接收前端请求,构造对网关的代理请求 | ECONNREFUSED连不上3000端口、500 Internal Server Error |
| Web网关(代理) | http://localhost:8080 | 接收Clawdbot请求,转发至Ollama | 502 Bad Gateway、504 Gateway Timeout |
| Ollama API服务 | http://localhost:11434(原始)→ 映射为:18789 | 提供/api/chat接口,运行Qwen3-32B | curl -v http://localhost:18789/api/chat无响应、超时 |
| Qwen3-32B模型加载状态 | — | 模型需预加载,非启动即可用 | ollama list显示qwen3:32b但状态为not loaded |
重要提醒:文中所有
18789端口均为经网关映射后的对外暴露端口,不是Ollama原生端口(11434)。若直接 curl11434成功但18789失败,问题一定出在网关或映射规则。
3. 日志排查三步定位法
日志不是用来“看全”的,而是用来“抓关键信号”的。我们按从外到内顺序,逐层过滤无关信息,3分钟锁定根因。
3.1 第一步:看Clawdbot后端日志(定位是否抵达应用层)
打开终端,进入Clawdbot项目目录,执行:
npm run dev # 或你实际使用的启动命令当在网页中发送一条消息后,观察终端输出。重点关注以下三类日志:
健康信号(说明请求已进入Clawdbot):
POST /api/chat 200或Forwarding to http://localhost:8080/api/chat
→ 表示Clawdbot正常接收并开始代理,问题不在前端或网络策略。❌阻断信号(Clawdbot自身异常):
Error: connect ECONNREFUSED ::1:3000TypeError: Cannot read property 'map' of undefined
→ 说明Clawdbot进程未启动、端口被占、或代码逻辑报错,立即停止往下查,先修复Clawdbot服务。转发信号但无响应(Clawdbot发出请求,但没收到回包):
Forwarding to http://localhost:8080/api/chat
→ 后续无Received response from gateway或任何HTTP状态码
→ 问题在Clawdbot与网关之间,进入第二步。
3.2 第二步:看Web网关日志(定位代理是否生效)
根据你使用的网关类型,执行对应命令:
若使用Nginx(最常见):
tail -f /var/log/nginx/error.log # 或查看access日志确认请求是否到达 tail -f /var/log/nginx/access.log | grep "POST /api/chat"若使用自研Go/Python代理(查其运行终端或日志文件):
# 假设日志输出到 proxy.log tail -f ./logs/proxy.log
关键判断依据:
网关收到请求:日志中出现类似
"POST /api/chat HTTP/1.1" 502或"POST /api/chat HTTP/1.1" 504
→ 说明Clawdbot请求已抵达网关,但网关无法从下游(Ollama)获得有效响应。❌网关无任何日志:
tail -f后完全静默
→ Clawdbot根本没把请求发到网关地址(检查Clawdbot配置中的GATEWAY_URL是否为http://localhost:8080,而非http://127.0.0.1:8080或带https)。网关日志报连接拒绝:
connect() failed (111: Connection refused) while connecting to upstream
→ 网关尝试连接localhost:18789失败,说明Ollama服务未监听该端口,或端口映射未生效。
3.3 第三步:直连Ollama API(验证模型服务是否就绪)
绕过所有中间层,用curl直接测试Ollama接口是否可用:
# 测试基础连通性(不带模型) curl -v http://localhost:18789 # 测试模型API(发送最小化请求) curl -X POST http://localhost:18789/api/chat \ -H "Content-Type: application/json" \ -d '{ "model": "qwen3:32b", "messages": [{"role": "user", "content": "你好"}], "stream": false }'结果分析:
返回JSON且含
message.content字段:
说明Ollama服务、模型加载、端口映射全部正常。问题必在Clawdbot或网关的请求构造(如header缺失、body格式错误)。❌
Failed to connect或Connection timed out:
检查Ollama是否运行:ps aux | grep ollama
检查端口映射:ss -tuln | grep 18789(应有LISTEN状态)
检查Ollama是否加载模型:ollama list→ 确认qwen3:32b状态为loaded(非not loaded)返回
404 Not Found或400 Bad Request:
说明端口通,但API路径或参数有误。重点检查Clawdbot发送的请求URL是否为/api/chat(不是/chat或/v1/chat/completions),以及model字段值是否严格匹配ollama list输出的名称(区分大小写、冒号、空格)。
4. 错误码速查表与根因对照
浏览器控制台(F12 → Console)或Clawdbot日志中出现的错误码,是最快指向故障层的路标。下表按出现频率从高到低排序,每条均附可执行的验证命令:
| 错误码 | 出现场景 | 根本原因 | 一句话诊断命令 | 修复方向 |
|---|---|---|---|---|
| 502 Bad Gateway | 网关日志或浏览器Network面板 | 网关无法连接下游(Ollama) | curl -I http://localhost:18789 | 检查Ollama是否运行、18789端口是否监听、模型是否loaded |
| 504 Gateway Timeout | 网关日志或浏览器Network面板 | 网关连上了Ollama,但Ollama未在超时时间内返回 | ollama ps查看qwen3-32b是否在运行中;ollama show qwen3:32b --modelfile确认无内存限制 | 增加Ollama内存分配(OLLAMA_NUM_GPU=1 OLLAMA_GPU_LAYERS=40 ollama run qwen3:32b);调大网关超时(Nginx:proxy_read_timeout 300;) |
| ERR_CONNECTION_REFUSED | 浏览器Console或Clawdbot日志 | Clawdbot后端未启动,或前端请求地址错误 | lsof -i :3000(查3000端口占用);grep -r "GATEWAY_URL" .env src/ | 启动Clawdbot;修正.env中GATEWAY_URL=http://localhost:8080 |
| 400 Bad Request | 浏览器Network → Response | 请求body格式错误,如messages数组为空、model名拼错 | curl -v http://localhost:18789/api/chat -d '{"model":"qwen3:32b","messages":[{"role":"user","content":"test"}]}' | 检查Clawdbot源码中fetch调用的body结构,确保messages非空、role为"user"/"assistant"、model精确匹配 |
| 404 Not Found | 浏览器Network → Response | 请求URL路径错误,网关未配置对应路由 | curl -v http://localhost:8080/api/chat(网关层);curl -v http://localhost:18789/api/chat(Ollama层) | 检查网关配置是否将/api/chat路径正确代理至http://localhost:18789/api/chat |
实操提示:遇到502/504,不要立刻重装Ollama。90%的情况是
ollama ps显示模型进程存在,但ollama list中状态为not loaded——此时只需执行ollama run qwen3:32b让其热加载一次即可恢复。
5. 高频问题实战解决方案
5.1 问题:输入后无响应,等待1分钟后返回“Request timeout”
现象:前端输入文字,发送后转圈,1分钟无返回,Network面板显示Pending后变红。
排查路径:
curl -v http://localhost:18789/api/chat→ 有响应 → 排除Ollama层tail -f /var/log/nginx/access.log→ 有POST /api/chat记录 → 排除Clawdbot转发失败tail -f /var/log/nginx/error.log→ 发现upstream timed out (110: Connection timed out)
根因:Qwen3-32B是32B大模型,首次响应需加载权重,Ollama默认超时仅30秒,而网关(Nginx)默认proxy_read_timeout为60秒,但Clawdbot前端设置的fetch timeout可能更短。
解决:
- 临时方案(验证用):
# 在Ollama启动前设置更长超时(单位秒) export OLLAMA_TIMEOUT=300 ollama run qwen3:32b - 长期方案(推荐):
修改Nginx网关配置(/etc/nginx/conf.d/clawdbot.conf):
保存后执行location /api/chat { proxy_pass http://localhost:18789; proxy_read_timeout 300; # 关键:从60改为300 proxy_connect_timeout 300; proxy_send_timeout 300; }sudo nginx -s reload。
5.2 问题:回答内容错乱,如中文夹杂乱码、回复不完整、突然中断
现象:对话中出现``符号、句子截断在半句、或返回{"error":"stream error"}。
根因:Qwen3-32B默认启用流式响应(stream: true),但Clawdbot前端未正确处理SSE(Server-Sent Events)数据流,或网关未透传Content-Type: text/event-stream头。
验证:
# 关闭流式,强制获取完整响应 curl -X POST http://localhost:18789/api/chat \ -H "Content-Type: application/json" \ -d '{"model":"qwen3:32b","messages":[{"role":"user","content":"你好"}],"stream":false}'→ 若此命令返回完整JSON,则确认是流式处理问题。
解决:
- 前端修复:检查Clawdbot中调用
/api/chat的代码,确保:- 请求body中显式设置
"stream": false(开发调试阶段首选) - 或若必须用stream,需用
EventSource或fetch().then(res => res.body.getReader())正确解析SSE
- 请求body中显式设置
- 网关修复(Nginx):添加流式支持头:
location /api/chat { proxy_pass http://localhost:18789; proxy_buffering off; # 关键:禁用缓冲 proxy_cache off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; }
5.3 问题:Clawdbot启动报错Error: listen EADDRINUSE :::3000
现象:终端报端口被占用,无法启动。
根因:3000端口正被其他进程(可能是上次未退出的Clawdbot、VS Code调试、或其他Node服务)占用。
解决:
# 查找占用3000端口的进程PID sudo lsof -i :3000 # 或(macOS) sudo lsof -iTCP:3000 -sTCP:LISTEN # 强制杀死(替换PID为上一步查到的数字) sudo kill -9 PID # 验证释放 lsof -i :3000 # 应无输出6. 总结:建立你的排障 checklist
面对Clawdbot+Qwen3-32B的异常,别再从头翻文档。用这张清单,3分钟完成闭环诊断:
- 看浏览器Network面板:记下错误码(502/504/400)和请求URL
- 查Clawdbot终端日志:确认请求是否抵达
Forwarding to http://localhost:8080 - 查网关日志:确认是否有
502/504记录,或完全静默 - 直连Ollama:
curl http://localhost:18789/api/chat验证底层服务 - 查模型状态:
ollama list看qwen3:32b是否为loaded,ollama ps看进程是否存在
记住:90%的问题集中在端口映射、模型加载状态、超时设置这三点。每次修复后,用一个最简请求(如“你好”)快速验证,比反复重启整个栈高效十倍。
你不需要记住所有命令,只需把这张表存为书签。下次再遇到“发送后没反应”,打开它,按序号执行,问题大概率在第3步就露出马脚。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。