Qwen Code 改进建议
April 5, 2026 · View on GitHub
核心洞察:随着大模型单次窗口支持高达 100K 甚至 200K Tokens,一次长篇重构任务可能会在终端里来回输出数万行的代码差异、几十次的
read_file打印以及长长的工作流日志。如果 TUI(终端用户界面)引擎老实地把这些数据一股脑全量渲染(并在每次敲击键盘时重绘),不仅会把 Node.js 的内存撑爆,更会让滚动变得犹如幻灯片般卡顿(甚至会导致终端模拟器崩溃)。Claude Code 在这块布局了大量激进的渲染级优化:包括对于已过去的同类工具调用的自动折叠(History Snip/Collapse)以及专为终端打造的虚拟滚动列表(Virtual Scrolling);而 Qwen Code 的历史列表目前基本是无限制的平铺渲染。返回 改进建议总览
一、无尽历史日志带来的 TUI 灾难
1. Qwen Code 现状:全量重绘陷阱
如果你在 Qwen Code 中让 Agent 排查一个难以捕捉的 Bug,它可能连续调用了 15 次 grep_search,并且每次都把几十上百行的匹配结果印在屏幕上。
- 痛点一(信息过载):当你往上滚动想找一开始它读了哪个文件时,你必须穿越这 15 个长长的
grep结果区。满屏的代码让你无法快速建立对历史对话(宏观流程)的把握。 - 痛点二(渲染冻结):React Ink(终端 UI 库)的默认行为会对整个状态树进行重渲染。当历史列表堆积了数千个包含高亮 ANSI 控制符的节点时,哪怕你在输入框敲一个空格,都会触发几千个组件的
Diff,导致打字严重卡顿。
2. Claude Code 解决方案:视界之外皆虚无
在 Claude Code 的渲染引擎中(如 utils/collapseReadSearch.ts),它通过业务层聚合与底层视口裁剪两套组合拳,彻底干掉了长列表卡顿。
机制一:智能的业务流折叠 (Read/Search Collapse)
当历史记录中出现连续多条的“只读探索型”操作(比如连续 5 个 Read, Glob, LS, Grep 时):
Claude 会在 UI 渲染层将它们自动合并为一个名为 [Exploration: 5 actions collapsed] 的单行组件。
关键细节:这仅仅是 UI 层级的折叠(Visual Snip)!这些操作产生的文件内容和底层数据依然原封不动地保留在发送给大模型 API 的 Context 数组中,大模型不会失忆。这完美隔离了“模型需要看大量细节”与“人类只想看宏观摘要”的矛盾需求。
机制二:虚拟滚动视口 (Virtual Scrolling)
即便折叠了冗余信息,对话条数依然可能很多。Claude Code 的终端引擎引入了前端网页中经常使用的“虚拟列表”技术。
系统实时监听终端的物理高度(process.stdout.rows,如通常是 40 行)。
不管历史数组有 1000 条还是 10000 条,渲染引擎在计算布局时,永远只对刚好落在这个 40 行视口(Viewport)内的组件进行真实的 ANSI 绘制。落在屏幕上方或下方的一律被跳过(剪裁)。这让重绘性能从 直接降维到了 常数级!
二、Qwen Code 的改进路径 (P3 优先级)
拯救老旧电脑和超长会话的终极优化方案。
阶段 1:开发只读工具链的 UI 聚合器
- 修改 TUI 的
MessageList渲染逻辑。 - 遍历当前的
Message[]数组,如果发现相邻的两个以上的Message都是来源于read_file,glob,grep工具的tool_result。 - 在传递给 React 组件的视图模型中,用一个自定义的
<CollapsedExplorationBlock count={n} />替代它们。
阶段 2:交互式的折叠展开 (Toggle Expansion)
赋予用户查看底细的权利:
如果用户使用方向键向上滚动选中了这个 [Exploration] 块并按下回车(Enter),则解除该块的聚合状态,把折叠的 5 个文件内容展平出来供人类阅读审查。
阶段 3:底层虚拟渲染重构(远期规划)
如果 Qwen Code 使用的是标准的 React Ink,可以通过引入类似 ink-virtual-list 的开源组件。
但如果要实现包含复杂高度计算的对话框级虚拟滚动,可能需要对 Ink 的底层渲染输出树做深度的拦截定制(结合此前 P2 级别的终端双缓冲池化技术 Terminal Rendering String Pooling 共同发力)。
三、改进收益评估
- 实现成本:中等。UI 的视觉层折叠非常好做(几十行代码),但底层的视口级虚拟滚动涉及到大量终端行列数学计算。
- 直接收益:
- 极 致 的 信 噪 比:人类开发者再也不会被 Agent 自己找资料时翻乱的垃圾输出刷屏,历史上下文清爽如诗。
- 拯救打字帧率:在超长对话中打字,将彻底告别 500ms 以上的输入框粘滞感,恢复 60fps 的流畅操作。