[Bug]: 流式输出的助手文本被重复渲染多次(模型实际只输出一次)
- Vorherrschende Sprache
- Rust
- Sterne
- 2.2k
- Forks
- 229
- Ø Merge
- 2 Std. 46 Min.
- Gemergte PRs (30 T.)
- 577
Beschreibung
### Summary
在长 agent 会话(多轮工具调用 + 流式文本输出)中,UI 里同一条助手文本段落会重复显示多次(实测同一句完整句子渲染了约 8 遍),看起来像模型陷入了重复输出循环。
排查本地会话日志后确认:模型实际只输出了这句话一次,重复发生在桌面端渲染层。
期望行为:流式 chunk 到达时应更新(replace)同一条消息的累积文本,而不是重复追加渲染。
### Area
Desktop app
### Reproduction or evidence
## 现象
一次包含大量工具调用的 agent 任务中,模型在某个 round 输出一句话后,聊天界面里这句话完整重复出现了约 8 次,中间还穿插正常的命令卡片,视觉上像是模型在复读。
## 证据 A:持久化会话记录
`sessions//turns/turn-XXXX.json` 中该 turn 共 **17 个 model round**,目标句「看来只有 part3 入队成功,补上 part1/2。」仅在 round 13 的 `textItems` 中出现 **1 次**;其余 round 文本各不相同、逻辑连贯("走 DLink 中转…" → "KatFile 三卷全部有效…" → "part1/2 还在排队…"),无循环。
## 证据 B:原始流式事件
`~/.bitfun/runtime-events/.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 次工具调用,开启自动批准)
Beitragsleitfaden
Rechercherichtung
Start by comparing sessions//turns/turn-XXXX.json with ~/.bitfun/runtime-events/.jsonl, then trace how TextChunk events reach the desktop rendering layer. Reproduce with the supplied session and check whether each chunk appends accumulated text or replays an existing message. Done means each streaming update replaces the same message content and the sentence renders once.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- rust
- Bereich
- desktop
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Aktiv
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 50/100