快速结论:当微信 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、显卡等版本信息,无需额外假设。
解决步骤
- 将 LobeChat 升级到 v2.2.18 或更高版本,该版本已合并 #19405 修复。
- 升级后确认合并逻辑改用 mergeBotMessages/getSourceMessages,保留所有原始消息的 payload。
- 确认 AgentBridgeService.resolveFiles 会从每条源消息中提取附件和下载警告,而不是只处理最新一条。
- 确认 deferred replay 路径同样保留 sources,避免重放时再次丢附件。
- 若暂无法升级,可优先尝试参照上游补丁思路,保留原始消息列表并在提取阶段复用现有 extractors;该思路为 Issue 中描述的源码补丁,尚未作为独立发布版本验证。
验证方法
按复现步骤重新发送 PDF + 文本指令,确认新用户消息关联到新的 PDF 记录,附件字节数与原始文件一致且 SHA-256 匹配,agent 能读取页数和标题。Issue 中真实微信复现验证了 44,403,719 字节全部可检索且哈希匹配。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[BUG]: Installation Error - "Anything LLM cannot be closed."](https://www.chat-gpts.plus/wp-content/uploads/2026/09/6516-129ea3ac-768x403.jpg)

