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

Ouverte
#3,678 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
3/5
Temps estimé
1-2 jours
Accessibilité débutants
52/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
react, typescript

Piste de recherche

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.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

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

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de GCWing/OpenBitFun

Toutes les issues de GCWing/OpenBitFun

Issues similaires

Plus d'issues Rust

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.