-
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Open
Labels
area:platformThe bug / feature is about IM platform adapter, such as QQ, Lark, Telegram, WebChat and so on.The bug / feature is about IM platform adapter, such as QQ, Lark, Telegram, WebChat and so on.enhancementNew feature or requestNew feature or request
Description
Description / 描述
问题描述
当前 aiocqhttp 适配器在处理 Image 和 Record 消息段时,强制将所有文件内容转换为 base64,导致网络传输数据膨胀 ,大图片(5MB以上)内存占用增加(图片全部加载到内存编码),以及CPU资源浪费,尤其是对于大图片有发送延迟的显著增加。
期望行为
参考 NoneBot2 的实现,优先使用原始文件路径格式,让 NapCat 等协议端自行处理文件读取:
| 输入类型 | 当前行为 | 期望行为 |
|---|---|---|
file:///path/to/img.jpg |
读取 → base64 编码 → 发送 | 原样透传给协议端 |
http://example.com/img.jpg |
下载 → base64 编码 → 发送 | 原样透传(协议端可直接访问时) |
内存中的 bytes |
base64 编码 → 发送 | base64 编码 → 发送 |
Use Case / 使用场景
场景1:图片类插件(如 setu/涩图插件)
问题:插件需要发送从网络下载的动漫图片,用户通常一次请求多张(3-9张)。每张图片 2-5MB,使用 base64 后:
- 单张 5MB 图片 → 6MB+ 传输数据
- 一次发 5 张 → 额外传输 8MB+ 数据
- 内存瞬间占用 33MB+,很容易触发 OOM
优化后:图片保存到本地临时文件,通过 file:// 发送,零内存拷贝。
场景2:AI 绘图插件(如 Stable Diffusion/NovelAI)
问题:AI 生成的高清图片(1024x1024 或更高)通常 3-8MB。用户频繁请求生成图片时:
- base64 编解码占用大量 CPU
- 生成的图片已经在本地文件系统,强制转 base64 是多余的
优化后:直接传递生成的文件路径给 NapCat 读取。
Willing to Submit PR? / 是否愿意提交PR?
- Yes, I am willing to submit a PR. / 是的,我愿意提交 PR。
Code of Conduct
- I have read and agree to abide by the project's Code of Conduct. /
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
area:platformThe bug / feature is about IM platform adapter, such as QQ, Lark, Telegram, WebChat and so on.The bug / feature is about IM platform adapter, such as QQ, Lark, Telegram, WebChat and so on.enhancementNew feature or requestNew feature or request