[Bug]: 思考流式输出完成后行首展开标记消失,无法回读思考内容

Aperta
#3,678 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
52/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
react, typescript

Direzione di ricerca

Start with the collapseIntoNext prop passed at ModelThinkingDisplay.tsx:234, then follow how ThinkingBlock.tsx uses wantsDock and docked (lines 86-88) and the data-thinking-attachment attribute (line 110) to see when the marker is dropped after the stream ends. Reproduce by enabling reasoning, sending a message that triggers thinking, and waiting for the turn to finish. Done means the collapsed thinking block keeps a clickable expand/collapse marker beside its successor, as it did in 1.0.6.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Summary

在助理会话开启思考(reasoning)模式后,思考块在流式输出期间于行首显示一个小标记,可以点击展开和关闭。但一旦这一轮流式输出完成、思考结束,这个行首标记就彻底消失了——不是折叠成一行摘要,是整个标记不见。此时想回读「模型为什么这么决定、排除了哪些方案以及原因」进行学习时,界面上没有找到可见入口,思考内容没有可见选项了。对依赖阅读推理过程来学习的用户(例如通过追问「为什么排除某个方案」来建立理解),思考不可见会使模型输出退化为黑箱——只能选择接受或不接受结论,而无法审视得出结论的过程。

期望恢复 1.0.6 的行为:思考完成后行首标记依然保留且可点击,点击后能展开/关闭该轮思考的完整内容。折叠可以是默认态,但入口不应消失。

这是一个回归而非设计取舍,依据有三:

  1. ModelThinkingDisplay.tsx 顶部的设计注释从 1.0.5 到 1.0.8 一字未改,原文是 "Completion folds that same viewport without enlarging it"——折叠的前提是视口仍在、可被展开,而不是把入口移除。
  2. ThinkingBlock.tsx L117-148 无条件渲染该标记,并挂有 aria-expanded / aria-controls(L129-130)。不存在任何以「完成后移除思考入口」为意图的代码路径。
  3. 1.0.6 中该标记在完成后存在且可交互;1.0.7 / 1.0.8 中消失,而同期设计注释未变。
Area

Desktop app

Reproduction or evidence

复现步骤:

  1. 使用任意开启思考(reasoning)的模型
  2. 发送一条会触发思考的消息
  3. 流式输出过程中:行首出现思考标记,点击可展开 / 关闭
  4. 等待该轮完全结束(正文输出完毕、工具调用全部返回)
  5. 观察:行首思考标记消失,整块思考无任何可见入口

代码层定位(建议从这里入手):

已确认的开关是 collapseIntoNext,它为真时思考块从独立的一行「停靠」到后继块旁边,行首标记随之消失:

ModelThinkingDisplay.tsx:234
  collapseIntoNext={(!isLastItem || successorReady) && (!forceExpanded || isActive)}

ThinkingBlock.tsx:86-88
  const wantsDock = collapseIntoNext && !expanded && !visuallyStreaming;
  const docked    = wantsDock && hasContinuation;

ThinkingBlock.tsx:110
  data-thinking-attachment={collapseIntoNext ? (docked ? 'side' : 'block') : undefined}

停靠机制本身是合理设计(ThinkingBlock 为它写了一整组 props),但停靠应当产出一个依附在后继块旁边的胶囊,而不是一个空。若实际看到的是完全没有任何标记,说明停靠后的可见性出了问题。

已排除:显示组件卸载(ThinkingBlock 无条件渲染该标记)、条目被可见性过滤(flowItemVisibility.ts 不处理 thinking 类型)、分组合并(activityClassification.ts 两版对 thinking 命中均为 0)

量化影响: 在我自己的一个工作会话中,思考内容量约为正文的一半,约占总输出的三分之一。这部分在流式结束后无法回读实际上是一种损失。

Environment, if relevant
  • 版本:1.0.8
    • 1.0.7 疑似同样存在该问题;1.0.6 正常
  • OS:Windows 11 家庭版 25H2 x64
  • 形态:桌面端
  • 界面语言:简中
  • 模型 / 供应商:任意开启思考(reasoning)的模型。该问题出在显示层的条目结构与停靠逻辑,与具体模型或供应商无关(显示代码不读取模型字段)
Lingua principale
Rust
Stelle
2.3k
Fork
236
Merge medio
13h 23m
PR unite (30g)
333

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di GCWing/OpenBitFun

Tutte le issue di GCWing/OpenBitFun

Issue simili

Altre issue su Rust

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.