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

Aberta
#3,678 0 comentários 2 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
3/5
Tempo estimado
1-2 dias
Facilidade para iniciantes
52/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
react, typescript
Domínio
desktop-dev, frontend

Direção de pesquisa

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.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

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)的模型。该问题出在显示层的条目结构与停靠逻辑,与具体模型或供应商无关(显示代码不读取模型字段)
Linguagem predominante
Rust
Estrelas
2.3k
Forks
236
Merge médio
13h 23min
PRs com merge (30d)
335

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de GCWing/OpenBitFun

Todas as issues de GCWing/OpenBitFun

Issues semelhantes

Mais issues de Rust

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.