[Bug]: 流式输出的助手文本被重复渲染多次(模型实际只输出一次)
メンテナーはふだん 1 日以内に返信
評価
調査の方向性
まず sessions//turns/turn-XXXX.json と ~/.bitfun/runtime-events/.jsonl を比較し、次に TextChunk イベントがデスクトップのレンダリング層に到達するまでを追跡します。提供されたセッションで再現し、各 chunk が累積テキストを追加しているのか、それとも既存のメッセージを再生しているのかを確認します。各ストリーミング更新が同じメッセージの内容を置き換え、文が一度だけレンダリングされれば完了です。
索引モデルが issue の本文から書いたものです。
説明
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 次工具调用,开启自动批准)
- 主要言語
- Rust
- スター
- 2.3k
- フォーク
- 236
- 平均マージ
- 2時間 53分
- マージ済み PR(30日)
- 404
環境構築
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
GCWing/OpenBitFun のほかの issue
-
難易度 2/5 半日 初心者へのやさしさ 74/100
GCWing/OpenBitFun#3279 ·
メンテナーはふだん 1 日以内に返信
-
[Bug]: 界面写“敏感诊断信息默认关闭”,但后端配置当前实际默认是 true対応中かも @xiechimon が 12 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
GCWing/OpenBitFun#3213 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
GCWing/OpenBitFun#2363 ·
メンテナーはふだん 1 日以内に返信
-
question
難易度 1/5 1時間未満 初心者へのやさしさ 78/100
GCWing/OpenBitFun#2340 ·
メンテナーはふだん 1 日以内に返信
-
難易度 4/5 3〜5日 初心者へのやさしさ 35/100
GCWing/OpenBitFun#3278 ·
メンテナーはふだん 1 日以内に返信
GCWing/OpenBitFun の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
メンテナーはふだん 1 日以内に返信
-
bug llm translation
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
メンテナーはふだん 1 日以内に返信
-
skillfs: one malformed chat-log line aborts the entire skill-usage analysis (skill_usage_from_chat_logs.py)対応中かも @zjncs が今日担当しました。 オープンcomponent:skillfs
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
agentic-os-org/ANOLISA#6116 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
indygreg/cryptography-rs#99 ·