新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/9/26 15:10:18来源:尧图网络
如何在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),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

HarmonyOS 6 轻相机应用开发4:用 MindSpore Lite 跑通物品分类 2026/9/26 17:12:23

HarmonyOS 6 轻相机应用开发4:用 MindSpore Lite 跑通物品分类

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Netty构建高并发TCP服务端:从线程模型到粘包心跳实战 2026/9/26 17:12:23

Netty构建高并发TCP服务端:从线程模型到粘包心跳实战

做TCP长连接服务端这些年,我先后用原生Socket、Mina、Netty写过生产级项目。坦白说,只要连接数一上千,原生Socket的代码就会让人怀疑人生——不是跑不起来,是线程一多就到处是坑,维护成本高得离谱。后来全面切到Netty&…

阅读更多 →
OpenHarmony+RN场景下Switch开关状态绑定的避坑实践 2026/9/26 17:12:23

OpenHarmony+RN场景下Switch开关状态绑定的避坑实践

做OpenHarmony应用开发的同时又逃不掉React Native(RN)这套跨端方案时,Switch开关的状态绑定就是那种看起来很简单、真正落地却最容易翻车的小事。我在实际项目中遇到过的情况是:同一个页面里十几个开关,有的跟设备实时…

阅读更多 →
生产级Linux LVM磁盘自动扩容实战与踩坑指南 2026/9/26 17:12:23

生产级Linux LVM磁盘自动扩容实战与踩坑指南

1. 生产服务器为什么要做"自动"扩容,而不是手动敲命令先讲个我在真实环境里碰到的事情。某个周五晚上十一点,监控系统突然拉响告警,某台数据库服务器的/data分区使用率冲到了97%。我当时第一反应是赶紧登上去df -h看一下&#xff0…

阅读更多 →
Django+Vue.js+爬虫+推荐算法:小说推荐系统毕设全栈实现指南 2026/9/26 17:12:23

Django+Vue.js+爬虫+推荐算法:小说推荐系统毕设全栈实现指南

1. 为什么选这个组合:DjangoVue.js爬虫推荐,一条龙毕设的架构拆解每年到毕设选题季,都有大量同学在"技术栈怎么选"上纠结一两个月。前端要好看、后端要能扛事、还得有亮点,最好还能塞进一点大数据元素——结果往往是贪多…

阅读更多 →
AI编程系列之3:从聊天框到 Agent——Claude Code 的 Harness 与 LLM Loop 拆解 2026/9/26 17:12:16

AI编程系列之3:从聊天框到 Agent——Claude Code 的 Harness 与 LLM Loop 拆解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉