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

Abierto
#3,678 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
52/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
react, typescript

Línea de trabajo

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.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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)的模型。该问题出在显示层的条目结构与停靠逻辑,与具体模型或供应商无关(显示代码不读取模型字段)
Lenguaje dominante
Rust
Estrellas
2.3k
Forks
236
Merge medio
13 h 23 min
PR fusionados (30 d)
333

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de GCWing/OpenBitFun

Todos los issues de GCWing/OpenBitFun

Issues similares

Más issues de Rust

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.