-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
[Feature] 优化 QQ Official 适配器 markdown 发送策略 #5845
Copy link
Copy link
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
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
Description / 描述
2026/03/26更新:
目前QQ官Bot已经开放md权限,因此可以将优化方式改为在
MessageChain数据结构中增加use_markdown_(和 use_t2i_ 模式一致),后续其他支持发送md文本的适配器(tg 飞书等)也可以根据这个表示来选择是发送纯文本还是mdQQ Official 适配器
_send_with_markdown_fallback优化:增加 markdown 模式配置与按目标能力缓存当前 QQ Official 适配器在发送消息时,始终优先尝试以 markdown 格式发送,若服务端返回"不允许发送原生 markdown"错误则回退至纯文本模式重试。此设计存在以下问题:
无能力缓存,重复失败请求:对于没有 markdown 权限的目标(非沙盒群/用户)以及对于没有使用markdown需求的用户,每条消息都会先发送一次 markdown 请求(失败),再用纯文本重试(成功),导致 API 调用量翻倍,日志无用信息增加。
建议方案:
建议实现两种模式,通过配置项 markdown_mode 控制:
auto(默认)always_plain此方案向后兼容:
auto作为默认值时行为与当前基本一致,但更智能(同一目标最多首次产生一次额外请求)。这种设计实际上也是权宜之计,我的想法是应该由发送源控制消息是否使用markdown消息格式,而不是在适配器层默认转换为markdown消息的行为。这种行为只考虑了Astrbot在沙盒环境中展示LLM信息更美观的情况,而实际上对于只把Astrbot作为Bot框架来使用,不使用LLM的用户来说,输出结果根本不需要Markdown格式,因为有些输出结果在Markdown格式下,会渲染出歧义。
Use Case / 使用场景
大部分无 markdown 权限的 Bot:auto 模式下增加 per-target 缓存后,每个目标最多只有首次触发一次额外的失败请求,后续消息不再产生冗余调用。
明确无权限或者不需要markdown:配置 always_plain 后彻底消除所有 markdown 相关请求,零额外开销。
Willing to Submit PR? / 是否愿意提交PR?
Code of Conduct