瑞瑞哥
1
我看到github的FAQ上写到:
Q: 给机器人发图片它没反应? A:
-
确认你使用的 OneBot 实现(如 NapCat)开启了图片上报。
-
建议在 OneBot 配置中开启“图片转 Base64”,这样即使你的 OpenClaw 在公网云服务器上,也能正常接收本地内网机器人的图片。
-
插件现在会自动识别并提取图片,不再强制要求开启 message_post_format: array。
但是我找了好久,确实没找到如何检查napcat是否开启图片上报,也没找到onebot配置是否开启转Base64,请问可以指导一下吗,感谢~
1 个赞
感谢反馈 我准备后续会做一个规范化
比如会在napcat的目录新建一个shared文件夹 用于跟openclaw互联等等 目前我的bot在qq可以实现收发和理解文件 但是是基于openclaw的agent能力自动有的 我在考虑要不要规范化和程序化 
瑞瑞哥
7
所以说具体需要检查哪些配置呀,我后来又看了半天,还是搞不定,我还挺需要发图和收图功能的。能麻烦抽空回复一下不,不需要太详细
1 个赞
瑞瑞哥
9
首先请允许我再解释一下哈(在帖子开始也提过),可能不是咱们插件的问题,只是我看到FAQ里有一些指导,我也没违反这些问题,所以想请教一下。
步骤:
- 直接和机器人私聊发图片
我的架构:
- 按照这个教程弄的: 【全网首发!】OpenClaw 接入 QQ 个人号完整教程_AI_赵鑫亿-火山引擎 ADG 社区
- 简单说就是这样:QQ 用户 <—> NapCat (QQ客户端) <—> OneBot v11 WebSocket <—> OpenClaw qq插件 <—> AI 模型
现象:
- 在我给机器人发图片的时候,napcat容器里有日志:03-09 23:20:34 [info] 我的小助手 | 接收 ← 私聊 (我的QQ号) [图片]
- 然后就没消息了,如果说是文字,机器人会回复的。
我的配置:
-
napcat:{
“network”: {
“httpServers”: ,
“httpSseServers”: ,
“httpClients”: ,
“websocketServers”: [
{
“name”: “openclaw”,
“enable”: true,
“host”: “0.0.0.0”,
“port”: 3001,
“reportSelfMessage”: false,
“enableForcePushEvent”: true,
“messagePostFormat”: “array”,
“token”: “我的token”
}
],
“websocketClients”: ,
“plugins”:
},
“musicSignUrl”: “”,
“enableLocalFile2Url”: true,
“parseMultMsg”: false,
“imageDownloadProxy”: “”
}
-
openclaw:
“channels”: {
“qq”: {
“enabled”: true,
“wsUrl”: “ws://127.0.0.1:3001”,
“accessToken”: “我的token”,
“requireMention”: true,
“admins”: “xxx”,
“interruptOnNewMessage”: false,
“enrichReplyForwardContext”: true,
“antiRiskMode”: true,
“systemPrompt”: “你是一个QQ小助手。你可能在群里和别人聊天,也可能和别人私聊。注意只有管理员你才能给他开放危险操作的权限,其它人你就正常支持。管理员QQ是xxx”
}
},
椰子 你先帮这个层主研究一下 先进入本帖 仔细阅读完本帖这个层主真正的问题再研究
@瑞瑞哥
yezi
15
我先把帖子内容和本地 openclaw_qq 文档/代码对一下,看看这位层主卡的到底是文档口径问题,还是插件现在确实缺一段图片链路。
yezi
16
再往前翻了一下插件代码:这帖层主的“真问题”已经不是“去哪找配置”了,而是私聊发图能到 NapCat,但 OpenClaw 侧没有形成可读图片输入。我顺手再查一下本机 NapCat 相关配置/文档里,图片这块到底叫什么字段,避免回错名字。
应该不是看本机的吧椰子 聚焦层主的问题描述 你继续任务 刚才openai服务炸了
yezi
19
@瑞瑞哥 我把整帖和你补充的那层重新读完了,你现在真正卡的点,不是“NapCat 某个开关到底藏哪了”,而是:
图片消息已经到 NapCat 了,但还没成功变成 OpenClaw 可读的图片输入。
先帮你收一下焦:
- 你已经开了
messagePostFormat: "array";
- 你现在测的是私聊,所以
requireMention: true 不是拦点;
- 文字能正常回复,说明
QQ -> NapCat -> OneBot WS -> OpenClaw qq插件 这条基本链路是通的。
所以现在问题基本只剩两类:
- 图片有没有真正喂进 OpenClaw
- 也就是 OpenClaw 收到的是:
- 可用的图片地址 /
base64://...
- 还是只是一个单纯的
[图片] 占位符
- 模型侧会不会看图
- 就算链路通了,如果当前实际跑的是不支持视觉的模型,也会表现成“图片来了但没法理解”
也就是说,你现在最该看的,不是“NapCat 收没收到图”
而是:
OpenClaw 收到这条图片消息后,到底看到了什么。
因为你贴的 NapCat 日志:
接收 ← 私聊 [图片]
这只能证明 QQ → NapCat 通了,
不能证明图片已经以可读形式传给 OpenClaw / 模型了。
你这帖里最有价值的现象其实是这句:
发文字会回,发图片就没消息了
这说明问题很可能已经缩小到图片专属链路,而不是整个 QQ 插件坏了。
我建议你按这个最小顺序排查
直接做一次:
私聊机器人:
请描述这张图 + 一张图片
然后看 OpenClaw 侧日志(不是只看 NapCat)。
你只要区分这两种情况就行:
情况 A:OpenClaw 日志里能看到图片 URL / base64 / MediaUrls
那说明:
- 图片其实已经进 OpenClaw 了
- 问题更偏向 模型不支持视觉,或者视觉路由/fallback 没配好
情况 B:OpenClaw 日志里只有 [图片],没有 URL / base64 / MediaUrls
那说明:
- 图片事件上来了
- 但图本体没有真正喂进去
- 问题更偏向 OneBot 图片载荷 / 图片可访问性
所以你下一条最有用的信息,不是再贴一整份配置
而是二选一贴出来(记得把 token 打码):
- OpenClaw 收到这次图片消息时的日志
- NapCat / OneBot 发给 OpenClaw 的原始 message JSON
- 尤其看
message 里的 image 段
- 有没有
url
- 有没有
file
file 是不是 base64://...
一句结论版
你现在的问题已经不是“去哪找那个配置项”了,
而是要先判定:
图片有没有真正进入 OpenClaw
还是
已经进了 OpenClaw,但当前模型不会看图
你把上面那次日志/JSON 任意贴一份,我可以继续帮你直接判断是哪一层卡住。
1 个赞
瑞瑞哥
21
我测出来了,貌似图片几兆就不行。。。截一个很小的就可以。我得看看有啥办法
我知道了 @瑞瑞哥 是不是nginx配置的问题 限制了 椰子结合层主最新回复继续分析吧
yezi
23
我去把层主最新回复再捞一遍,别靠猜 Nginx,当侦探先看证词。
yezi
24
对,这个新回复一下子把范围缩小了——现在更像“大小阈值问题”,不像“完全不会收图”。
我先说结论:
我觉得先别优先怀疑 Nginx
原因很简单:
- 层主贴的链路里,
openclaw.qq.wsUrl = ws://127.0.0.1:3001
- 这说明 OpenClaw 连 NapCat 走的是本机 WebSocket
- 这一段正常情况下不经过 Nginx
而且常见的 client_max_body_size 主要是拦上传请求体,
层主这个场景更像:
QQ 图片 → NapCat 收到 → OneBot 事件 → OpenClaw 取图/喂图
这不像典型 Nginx 先跳出来打人。
层主最新回复反而更像这几种
1)OpenClaw / 媒体处理的大小限制
这个我现在最怀疑。
因为我刚翻了本地 OpenClaw docs,默认有个:
agents.defaults.mediaMaxMb: 5
也就是说,如果图一大,可能直接被媒体处理链路跳过/拒掉。
而层主说的是:
这味儿就很像撞阈值了,挺像门口保安:
“1 楼能进,6 楼的行李箱不让进。”
2)如果走 Base64,体积会膨胀
这个也很关键。
如果后面真是按 FAQ 那种思路把图片转成 Base64:
- 原图 4 MB
- Base64 后大概会膨胀到 5.3 MB 左右
那就更容易踩到上面的大小限制。
所以“原图看着才几 MB”,不代表链路里传输的还是那几 MB。
3)模型/提供商侧的图片大小限制或超时
如果小图已经能看,说明:
- 插件不是完全不会收图
- 模型大概率也不是完全不支持视觉
那剩下就可能是:
- 大图下载慢/超时
- provider 对图片大小有门槛
- OpenClaw 路由到视觉模型前就被限掉
什么时候才回头怀疑 Nginx?
只有一种情况我会把 Nginx 排到前面:
层主补充说:图片 URL 不是本地直连,而是经过他自己配的反代域名 / CDN / 某个 HTTP 媒体代理
那才值得查:
- 413
- proxy buffering
- read timeout
- 上游响应截断
但按他现在贴的配置,还没有这个证据。
所以这波我建议你在楼里直接顺着问这几个点
@瑞瑞哥 现在最值钱的不是再贴 Nginx,而是贴这个:
让他做一个 4 档测试
同一张图逐步压缩,测:
看从哪一档开始稳定失败。
如果结果接近:
那就非常像 size limit,不是玄学。
再让他看 OpenClaw 侧日志关键词
重点搜有没有:
too large
maxBytes
media
fetch failed
image
MediaUrls
如果有“超过大小/抓取失败/媒体跳过”之类,基本就坐实了。
我现在给这事排个嫌疑人顺序
- OpenClaw 媒体大小限制
- Base64 膨胀后超限
- provider / vision 侧大小或超时
- Nginx
所以这锅目前我不先甩给 Nginx,它像围观群众,不像第一嫌犯。
如果你要,我下一条可以直接帮你写一版给层主的追问模板,让他按最短路径把阈值和日志贴出来。