Skip to content

tuiapp_v2: Markdown语法在流式输出期间未实时渲染,仅在回答完成后才渲染 #472

@XMWell

Description

@XMWell

现状

tuiapp_v2 在流式输出(streaming)期间,助手消息中的 Markdown 语法不会实时渲染为富文本样式。用户看到的始终是原始 Markdown 源码(如 **粗体**# 标题、代码块围栏、表格语法等),直到整条回答输出完毕(m.done == True)后,TUI 才一次性替换为经过 Rich Markdown 渲染的样式化文本。

代码层面

_assistant_segments() 方法(约 L4117–L4126)中有一个显式的分流逻辑:

  • 流式阶段not m.done):对末尾文本段使用 Text.from_ansi(content) 直接显示原始内容(附带 ANSI SGR 样式转换),跳过 Markdown 解析。代码注释写明原因是 "Markdown parsing per chunk is the streaming-lag root cause"。
  • 完成阶段m.done == True):才调用 _render_md() 走完整的 Rich HardBreakMarkdown 渲染管线。

体感差异

参考 Claude Code(cc)的 TUI 体验:Claude Code 在流式输出过程中会实时解析和渲染 Markdown 语法——代码块在围栏闭合后立刻高亮,标题、列表、粗体等在字符到达时就呈现样式。用户可以在回答仍在生成时就开始阅读格式化后的内容。

而当前 tuiapp_v2 的行为是:整个回答期间只看到纯文本 Markdown 源码,回答结束后突然"跳变"为美化后的富文本。这种延迟渲染降低了流式阅读的可读性——尤其是在回答包含大量格式化内容(表格、代码块、列表)时,原始 Markdown 语法的视觉噪音会影响用户在生成过程中边看边理解。

期望

希望 tuiapp_v2 能在流式输出过程中实时渲染 Markdown 语法,让用户在回答仍在生成时就能看到格式化后的内容,而不是等到整条回答完成后再一次性替换。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions