Markdown、代码块、长会话怎么保证体验?

先理解原理和示例,再练习完整口述与追问。

流式 Markdown 会出现未闭合代码块等中间状态,要容错,避免每个字符都重解析整段历史。按需要批量更新和缓存已完成内容;长记录采用分页或虚拟列表。

自动滚动应尊重用户向上阅读;提供“回到最新”。渲染不可信 HTML、链接和代码时做安全处理,不能直接信任模型输出。

Markdown 是不可信输入,需要区分解析与执行。关闭原始 HTML 或使用可靠清洗,限制 URL 协议,代码块只展示文本,工具结果也遵守同样边界。流式中半个代码围栏会改变后续解析范围,可采用节流渲染、稳定块拆分或安全的临时展示策略。长会话要控制 DOM、重解析范围和自动滚动。

用户正在读历史消息时不要每个 delta 都强制滚到底;可检测是否接近底部并显示“有新内容”。代码复制保留原文,失败时提示手动复制。虚拟化历史时注意高度变化与滚动锚点;引用点击应能定位可信来源,而不是只展示一个像引用的字符串。

不能把模型生成的 HTML、脚本或命令直接执行。新窗口链接、图片代理和代码沙箱都有单独权限与安全要求。

Markdown 的中间流状态可能有未闭合代码块,所以渲染要容错,并按帧或小批量合并更新,避免每个 token 都重解析全部历史。已完成消息可以缓存渲染结果,长会话用历史分页或合适虚拟化。默认只在用户接近底部时自动滚动,用户上翻就停止强拉并提示新内容。模型输出当作不可信输入,限制危险 HTML、链接和代码执行,代码块展示不等于允许直接运行。