全新npm包:智能修复流式Markdown语法错误

Remend是一个新的独立npm包,专为处理AI流式输出中常见的未完成Markdown语法(如未闭合的代码块、粗体标记等)而设计,确保即使在内容传输过程中也能呈现稳定的渲染效果。

New npm package for automatic recovery of broken streaming markdown

Remend 是一个新的独立包,它将智能的不完整 Markdown 处理能力带给了任何应用程序。

它最初是 Streamdown 的 Markdown 终止逻辑的一部分,现在 Remend 已作为一个独立的库 (npm i remend) 发布,您可以在任何应用程序中使用。

为什么它很重要

AI 模型以逐个令牌(token-by-token)的方式流式输出 Markdown,这常常会产生不完整的语法,从而导致渲染失败。例如:

  • 未闭合的代码块(fences)
  • 未完成的粗体/斜体标记
  • 未终止的链接或列表

如果不进行纠正,这些模式会导致渲染失败、泄露原始 Markdown 或破坏布局:

1
2
3
1**This is bold text
2[Click here](https://exampl
3`const foo = "bar

Remend 能够自动检测并补全未终止的 Markdown 块,确保在流式传输过程中输出干净、稳定的内容。

1
2
3
4
5
6
1import remend from "remend";
2
3const partialMarkdown = "This is **bold text";
4const completed = remend(partialMarkdown);
5
6// 结果: "This is **bold text**"

随着流式传输的继续以及实际的结束标记到达,内容会无缝更新,即使用户正处于流式传输的中间阶段,也能获得流畅的体验。

它可以作为预处理步骤与任何 Markdown 渲染器配合使用。例如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
1import remend from "remend";
2import { unified } from "unified";
3import remarkParse from "remark-parse";
4import remarkRehype from "remark-rehype";
5import rehypeStringify from "rehype-stringify";
6
7const streamedMarkdown = "This is **incomplete bold";
8
9// 首先运行 Remend 以补全不完整的语法
10const completedMarkdown = remend(streamedMarkdown);
11
12// 然后使用 unified 进行处理
13const file = await unified()
14  .use(remarkParse)
15  .use(remarkRehype)
16  .use(rehypeStringify)
17  .process(completedMarkdown);
18
19console.log(String(file));

Remend 为 Streamdown 中的 Markdown 渲染提供支持,并已在生产环境的 AI 应用程序中经过实战测试。它包含智能规则以避免误判,并能处理复杂的边缘情况,例如:

  • LaTeX 块中带有下划线的数学表达式
  • 带有星号/下划线的产品代码和变量名
  • 带有格式标记的列表项
  • 链接中嵌套的括号

要开始使用,您可以通过 Streamdown 来使用它,或者使用以下命令单独安装:

1
1npm i remend
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计