尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

如何在Web终端实时渲染LLM流式Markdown:wterm markdown包教程

发布时间:2026/9/26 15:10:19

资讯中心
01
ARTICLE

如何在Web终端实时渲染LLM流式Markdown:wterm markdown包教程

如何在Web终端实时渲染LLM流式Markdown:wterm markdown包教程
如何在Web终端实时渲染LLM流式Markdownwterm markdown包教程【免费下载链接】wtermA terminal emulator for the web项目地址: https://gitcode.com/gh_mirrors/wterm1/wtermwterm 是一个面向 Web 的终端模拟器其中的wterm/markdown包能实时将 LLM 流式输出的 Markdown 逐块转换成终端 ANSI 文本。本教程带你快速掌握 Web 终端实时渲染 LLM 流式 Markdown 的完整方法从一行命令安装到把 AI 回复流接入浏览器终端新手也能照着做出来。为什么 Web 终端要实时渲染 LLM 流式 Markdown在大模型应用中回复是一次次以小块文本chunk的形式返回的。传统做法是等全部文本接收完毕用 Markdown 库渲染成 HTML。这在网页聊天框里没问题但如果你用的是Web 终端比如 AI 编程助手嵌在终端里等全文接收完再渲染会有明显的空白等待期而且 Markdown 库产出的是 HTML终端根本不认。wterm/markdown解决的就是这个问题它是一个流式 Markdown 转 ANSI 渲染器文本一到就立刻转成带样式的终端输出用户在终端里看到回答打字机式逐行浮现体验与本地 TUI 一致。 一句话理解push()喂进流式文本终端立刻拿到可显示的 ANSI 内容flush()在流结束时兜底收尾。一键安装如何快速上手 wterm markdown 包安装只需一条命令npm install wterm/markdown核心用法极简只需三步import { MarkdownRenderer } from wterm/markdown; const md new MarkdownRenderer({ width: 80 }); // 流式过程中每收到一段文本就调用一次 const ansi md.push(# 标题\n\n这是 **加粗** 内容。\n); terminal.write(ansi); // 流结束后收尾 terminal.write(md.flush());完整 API 说明见官方文档 markdown.mdx 与包内 README。核心 API 讲解push 与 flush 如何工作MarkdownRenderer类的实现非常紧凑源码仅约 200 行值得了解其工作机制方法作用push(delta: string): string喂入一段 Markdown 文本返回已完整行的 ANSI 输出flush(): string流结束时刷出缓冲区剩余内容并关闭未结束的代码块构造参数width终端列宽默认 80用于生成分隔线长度关键点内部按行缓冲。push()会把不完整的一行留在内部缓冲区只有遇到换行符、确认一行完整时才渲染输出。这个设计正是为流式场景准备的——LLM 的 chunk 边界是随机的可能正好把一行切成两半而渲染器会自动拼接不会出现半行闪烁或格式错乱。实现细节可以阅读源码 index.ts其中push方法第 32-44 行展示了缓冲逻辑flush方法第 46-56 行负责收尾。支持哪些 Markdown 语法渲染效果一览wterm/markdown覆盖了 LLM 回复中最常用的语法渲染效果如下语法终端渲染效果#~######标题H1/H2 粗体亮白色H3 粗体并自动留白行**粗体**/__粗体__加粗*斜体*/_斜体_斜体行内代码青色高亮文字绿色下划线 灰色淡显的 URL围栏代码块缩进展示上下带暗淡分隔线- item无序列表缩进圆点列表1. item有序列表带序号列表 引用带暗淡竖线的引用块---分隔线暗淡横线每种渲染都有对应的单元测试保障例如 H1 渲染为粗体亮白色的断言见 markdown.test.ts。实战3 步把 LLM 流接入 Web 终端wterm 官方提供了一个完整可运行的示例项目markdown-streaming使用wterm/react AI SDK 演示了全流程项目说明见 examples/markdown-streaming/README.md。第 1 步服务端流式返回API 路由使用 AI SDK 的streamText发起流式请求通过toTextStreamResponse()把文本流原样推给前端const result streamText({ model: openai/gpt-4o-mini, messages }); return result.toTextStreamResponse();参考实现route.ts第 2 步前端逐块读取并渲染这是整个方案的核心循环——用ReadableStream的 reader 逐块读取每块立即push进渲染器并写入终端const reader response.body.getReader(); const decoder new TextDecoder(); while (true) { const { done, value } await reader.read(); if (done) break; const rendered md.push(decoder.decode(value, { stream: true })); if (rendered) write(rendered); } write(md.flush());完整页面实现含用户输入、会话历史、错误处理见 page.tsx。第 3 步体验与细节回答边生成边渲染标题、粗体、代码块等样式随内容实时出现生成过程中按CtrlC可中断流示例中用AbortController实现见 page.tsx每次新回答建议创建新的MarkdownRenderer实例避免上一轮的缓冲状态残留。新手避坑4 个最佳实践流结束务必调用flush()—— 否则最后一行文本和未闭合的代码块不会被渲染这是最常见的遗漏。忽略返回的空字符串——push()在收到不完整的行时返回空串if (rendered)判空后再写入终端即可。按需设置width—— 该参数只影响分隔线长度一般跟随终端实际列宽设置。不要对整段文本重复 push—— 渲染器是状态式的每个 chunk 只能喂一次重复喂会导致内容翻倍。小结wterm markdown 包适合谁wterm/markdown用极小的体积核心实现不足 300 行解决了「Web 终端里 LLM 流式输出」这一真实痛点做AI 终端助手 / 编程 Agent 产品终端 UI 流式 Markdown 是理想形态做浏览器内演示 / 文档站点几行代码即可让 AI 回复在真终端里打字机式呈现。结合 wterm 的 React / Vue / Svelte 框架绑定源码位于 packages/wterm/react/ 等目录你可以快速把实时渲染 LLM 流式 Markdown 的能力嵌入任何前端项目。【免费下载链接】wtermA terminal emulator for the web项目地址: https://gitcode.com/gh_mirrors/wterm1/wterm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。