-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
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.priority: p0will fix asapwill fix asap
Description
问题描述
在 aiocqhttp (OneBot v11) 平台下,如果用户发送“合并转发消息”并随后要求机器人“总结一下”,机器人经常会把输入判定为“空消息”,无法总结。
这个问题在群聊里比较常见:
- A 发送合并转发(日志显示为
[转发消息]) - B 引用该消息并
@机器人 总结一下 - 机器人返回类似“你贴的是空消息,没法总结。发内容。”
复现方式
- 在 QQ 群(OneBot v11 / Napcat)中发送一条合并转发消息(包含若干文本节点)。
- 另一个用户引用该消息并
@机器人 总结一下。 - 观察机器人回复。
实际行为
机器人上下文中只拿到 [转发消息] 占位符,未拿到转发节点正文,导致 LLM 认为可总结文本为空。
期望行为
机器人应尝试展开 forward 节点内容,将可读文本注入 message_str / 上下文,再执行总结。
现场日志证据(2026-02-13)
13:54:20vowm/...: [转发消息]13:54:50加班到神志不清.ing/...: [引用消息] [At:...] 总结一下13:55:02机器人回复:你贴的是空消息,没法总结。发内容。
根因分析
astrbot/core/platform/sources/aiocqhttp/aiocqhttp_platform_adapter.py 的 _convert_handle_message_event 对 reply 有 get_msg 回查逻辑,但对 forward/forward_msg 没有调用 get_forward_msg 展开节点内容。
因此:
message_str里只有占位信息([转发消息]),- 下游模型收到的有效文本不足,导致误判为空消息。
修复思路
在 aiocqhttp 适配器内新增 forward 展开逻辑:
- 识别
forward/forward_msg段; - 使用
get_forward_msg拉取节点数据(兼容id/message_id/forward_id参数差异); - 递归提取节点文本(保留
at/image/face的轻量占位); - 将展开文本拼入
message_str(附加长度上限,避免上下文爆炸); - 拉取失败时至少保留
[转发消息],避免完全空输入。
影响范围
- 主要影响
aiocqhttp平台(OneBot v11 / Napcat)。 - 其他适配器不受此改动直接影响。
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.priority: p0will fix asapwill fix asap