Skip to content

[Bug]: 流式输出的助手文本被重复渲染多次(模型实际只输出一次) #2778

Open

Description

@QZQ-go

Summary

在长 agent 会话(多轮工具调用 + 流式文本输出)中,UI 里同一条助手文本段落会重复显示多次(实测同一句完整句子渲染了约 8 遍),看起来像模型陷入了重复输出循环。

排查本地会话日志后确认:模型实际只输出了这句话一次,重复发生在桌面端渲染层。

期望行为:流式 chunk 到达时应更新(replace)同一条消息的累积文本,而不是重复追加渲染。

Area

Desktop app

Reproduction or evidence

现象

一次包含大量工具调用的 agent 任务中,模型在某个 round 输出一句话后,聊天界面里这句话完整重复出现了约 8 次,中间还穿插正常的命令卡片,视觉上像是模型在复读。

证据 A:持久化会话记录

sessions/<sessionId>/turns/turn-XXXX.json 中该 turn 共 17 个 model round,目标句「看来只有 part3 入队成功,补上 part1/2。」仅在 round 13 的 textItems 中出现 1 次;其余 round 文本各不相同、逻辑连贯("走 DLink 中转…" → "KatFile 三卷全部有效…" → "part1/2 还在排队…"),无循环。

证据 B:原始流式事件

~/.bitfun/runtime-events/<sessionId>.jsonl 共 38 个 TextChunk 事件。该句被拆成 6 个 chunk 依次到达:
"看来" / "只有 part3 入" / "队成功" / "," / "补" / "上 part1/2。"
每个 chunk 仅出现一次,整个事件流中该句相关文本无任何重复。

结论

模型侧输出正常,重复发生在客户端渲染层。怀疑方向:流式更新时按 chunk 把累积全文重复 append(而非 replace 同一条消息),或事件重放/断线重连时同一条消息被重复渲染。

本地排查用 sessionId:613dcec9-7526-47b9-8890-11c9ce6d59ae

Environment, if relevant

BitFun version/commit: 桌面版 0.2.19 (com.bitfun.desktop)
OS: macOS
Browser/device: BitFun 桌面客户端
Model/provider: GLM-5.3(agent 会话,3 turn / 52 次工具调用,开启自动批准)

Activity

  1. QZQ-go commented on Sep 4, 2026

    @QZQ-go
    ContributorAuthor

    补充定位:重复出现在远程中继控制会话层面,不是本地桌面窗口。

    复现截图来自另一台设备上的 BitFun 桌面客户端(BitFun app ↔ BitFun app 远程控制)查看/控制本机 BitFun 时的会话界面,不是被控端本机的聊天窗口。即:同一条助手文本的多次重复渲染,发生在远程控制会话的事件推送/渲染链路上。

    结合主楼的证据(该句被模型拆成 6 个 TextChunk 流式输出),一个高度吻合的机制假设:

    远程控制端收到的会话更新如果按 append-only 消息流渲染——即每个 TextChunk 到达时,中继层/控制端把当前累积全文当作新消息段追加渲染(而不是原地更新同一条消息)——那么 N 个 chunk 就会产生 N 条"部分→完整"的重复消息;本例 6 个 chunk + round 完成后的最终全文推送 ≈ 7-8 次,与实测约 8 次重复吻合。

    建议排查方向相应缩小为:

    1. 远程控制链路对流式 TextChunk 的推送/渲染逻辑(增量 vs 累积全文);
    2. round 完成事件是否会再推送一次全文,与流式过程的消息产生叠加;
    3. 中继断线重连时是否对已推送内容做无去重重放。

    被控端本机窗口未观察到此现象(如有其他用户在本地窗口复现,欢迎补充修正)。

    补充: 远程控制端与被控端均为 0.2.19 同一版本,可排除两端版本差异因素。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions