[Bug] Queued PDF loses original media payload when merged with a text follow-up

当微信 PDF 消息在 agent 回合进行中被 Redis 队列缓存,并与后续文本指令一起合并处理时,路由层合并了消息,却只保留了最后一条消息的 raw 负载,导致 PDF 附件在提取阶段丢失,最终 files=0。优先确认是否使用了队列并发 + 消息合并逻辑,以及提取阶段是否仍依赖单条 raw.

快速结论:当微信 PDF 消息在 agent 回合进行中被 Redis 队列缓存,并与后续文本指令一起合并处理时,路由层合并了消息,却只保留了最后一条消息的 raw 负载,导致 PDF 附件在提取阶段丢失,最终 files=0。优先确认是否使用了队列并发 + 消息合并逻辑,以及提取阶段是否仍依赖单条 raw.item_list。

适用环境:LobeChat 自托管 canary.11 环境;微信机器人 + Redis 队列并发;问题在上游修复版本 v2.2.18(由 #19405 合并)中解决。Issue 未提供操作系统、Python、CUDA、显卡等细节。

最快修复方案:升级到包含 #19405 修复的 v2.2.18 或更高版本。该版本通过 mergeBotMessages/getSourceMessages 保留原始消息负载,并在 AgentBridgeService.resolveFiles 中从每条源消息提取附件和警告。

注意事项:Issue 中自托管微信部署对升级版本的验收仍处于 pending 状态;#19253 的队列过期问题不在本次修复范围内。若无法升级,需自行改动合并与提取逻辑,保留所有原始消息的平台负载。

问题场景

在 LobeChat 自托管环境中,使用微信机器人并启用 Redis 队列并发。用户先发送一个 PDF,随后发送一条文本指令要求读取该 PDF。此时当前 tool 任务使 handler 保持 active,两条消息被队列缓存并在稍后一起 drain。BotMessageRouter.mergeSkippedMessages 将文本和附件合并,但提取阶段只处理了最新的文本消息。

报错原文

merged=2, mergedAttachments=1
files=0
[Bug] Queued PDF loses original media payload when merged with a text follow-up

原因分析

BotMessageRouter.mergeSkippedMessages 在合并时会组合文本和附件,但只保留最新消息的 raw 字段。微信提取逻辑重新下载媒体时依赖 raw.item_list,而 Redis 序列化会丢弃 attachment buffers,因此较早那条 PDF 消息的下载描述符在提取阶段不可用。其他平台的提取器同样依赖原始消息 payload,因此同类问题可能不仅限于微信。

环境排查

  • 确认 LobeChat 版本是否为 canary.11 或更早,检查是否包含 #19405 修复。
  • 确认是否启用 Redis 队列并发及消息合并行为。
  • 确认微信机器人提取器是否依赖 raw.item_list 重新下载媒体。
  • 确认日志中是否出现 merged=2、mergedAttachments=1 与 files=0 的组合。
  • Issue 未提供操作系统、Python、CUDA、PyTorch、显卡等版本信息,无需额外假设。

解决步骤

  1. 将 LobeChat 升级到 v2.2.18 或更高版本,该版本已合并 #19405 修复。
  2. 升级后确认合并逻辑改用 mergeBotMessages/getSourceMessages,保留所有原始消息的 payload。
  3. 确认 AgentBridgeService.resolveFiles 会从每条源消息中提取附件和下载警告,而不是只处理最新一条。
  4. 确认 deferred replay 路径同样保留 sources,避免重放时再次丢附件。
  5. 若暂无法升级,可优先尝试参照上游补丁思路,保留原始消息列表并在提取阶段复用现有 extractors;该思路为 Issue 中描述的源码补丁,尚未作为独立发布版本验证。

验证方法

按复现步骤重新发送 PDF + 文本指令,确认新用户消息关联到新的 PDF 记录,附件字节数与原始文件一致且 SHA-256 匹配,agent 能读取页数和标题。Issue 中真实微信复现验证了 44,403,719 字节全部可检索且哈希匹配。

参考来源

lobehub/lobe-chat #19367

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 26209

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注