更新记录

1.0.0(2026-11-05) 下载此版本

  • 首个版本。面向 uni-app x 的流式 Markdown 解析 UTS 插件,支持 Android 与 HarmonyOS。
  • 提供 progressive session 接口:createSession、feedChunk、finishSession、destroySession,按 Markdown 块边界增量输出块级事件。
  • 统一块级事件协议:op(追加 / 更新未闭合 / 提交 / 清空)、kind(html / data / ast)、index(三通道对齐)、unchanged(tail 内容未变)。
  • Android 通过 JNI 桥接库、HarmonyOS 通过 N-API HAR 集成,两端使用同一份事件语义。

平台兼容性

uni-app x(5.33)

Chrome Safari Android iOS 鸿蒙 微信小程序
× × √ - √ -

其他

多语言 暗黑模式 宽屏模式 蒸汽模式
√ √ √ √

uni-ai-md

uni-ai-md 是面向 uni-app x 的流式 Markdown 解析 UTS 插件,支持 Android 与 HarmonyOS。它在原生层维护一个 progressive session,按 Markdown 块边界增量输出 HTML、结构化 DATA 和 AST 三种通道的块级事件,适合 AI 聊天等边接收边渲染的场景。 iOS、Web、微信小程序请使用 uni-cmark。

import {
  createSession,
  feedChunk,
  finishSession,
  destroySession
} from '@/uni_modules/uni-ai-md'

const session = createSession('html', 'zh-CN', false, '#ffffff')
let event = feedChunk(session, '# Hello\n')
while (event != null) {
  // 按顺序把 event.ops 应用到块列表
  event = feedChunk(session, '下一段 Markdown chunk')
}
event = finishSession(session)
destroySession(session)

feedChunk、finishSession 每次返回一组块级操作;没有事件时返回 null。

平台与依赖

  • uni-app x:Android(arm64-v8a)、HarmonyOS(arm64-v8a / x86_64)。
  • Android 通过 JNI 桥接加载 libuni-ai-md_bridge.so(依赖 libuni-ai-md.so);鸿蒙通过 N-API 加载 uni-ai-md.har。原生产物已随插件打包在 utssdk/app-android/libs 与 utssdk/app-harmony/libs。
  • Android 只提供 arm64-v8a,需要 arm64-v8a 设备并使用自定义基座运行。
  • iOS、Web、微信小程序不在本插件支持范围,请改用 uni-cmark。

接口

createSession

createSession(mode?: string, languageTags?: string, darkMode?: boolean,
  background?: string): object

创建一个流式解析会话,返回会话句柄,供后续 feedChunk / finishSession / destroySession 使用。

  • mode:"ast" 时只交付 AST(无 HTML、无 DATA);省略或 "html" 时交付 HTML 与 DATA。
  • languageTags:内容语言偏好(BCP-47,可为逗号分隔的优先级列表),用于在集合字体里 挑选 face;Android 侧会把设备语言追加在其后作为兜底。
  • darkMode:决定 mermaid、math 插件的默认前景色,省略按浅色。
  • background:宿主显式给出的画布底色(#rrggbb),省略或格式不对时按浅色底兜底。

feedChunk

feedChunk(handle: object, chunk: string): UniAiMdEvent | null

提交一段 Markdown chunk,返回本次产生的块级操作集合;没有事件时返回 null。chunk 可以是任意切分,插件按块边界聚合输出。

finishSession

finishSession(handle: object): UniAiMdEvent | null

结束会话输入,返回收尾的块级操作集合(把未闭合块提交为完成态);没有事件时返回 null。

destroySession

destroySession(handle: object): void

销毁会话及其 runtime,释放原生资源。

事件模型

UniAiMdEvent 是一次调用的块级操作集合,ops 需按数组顺序应用:

type UniAiMdOp = {
  op: number
  kind: string
  content: string
  index: number
  unchanged: boolean
}

type UniAiMdEvent = {
  ops: UniAiMdOp[]
}
  • op:1 追加块、2 更新未闭合块、3 提交未闭合块、4 清空块列表(对应导出常量 OP_APPEND / OP_TAIL / OP_COMMIT / OP_RESET)。
  • kind:html / data / ast(对应 KIND_HTML / KIND_DATA / KIND_AST)。
  • index:该操作对应的顶层块序号,三种通道按同一序号对齐到同一槽位。
  • unchanged:为 true 表示这次 tail 提交的内容没有变化,content 是原内容而不是 新载荷。

DATA 与 AST 每次都是完整快照;未闭合 HTML 块在原生桥内完成前缀 patch,宿主按 index 覆盖对应块即可。op: 4 表示清空块列表,应用时忽略内容。

相关插件

  • uni-ai-x:基于本插件实现 AI 聊天的流式 Markdown 渲染。
  • uni-cmark:iOS、Web、微信小程序的 Markdown 转 HTML / JSON AST。
  • uni-highlight:代码块高亮。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

无

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无

许可协议

uni-ai-md(以下简称软件)源码使用许可协议

2022年10月

本许可协议,是数字天堂(北京)网络技术有限公司(以下简称DCloud)对其所拥有著作权的“软件”,提供的使用许可协议。

您对“软件”的复制、使用、修改及分发受本许可协议的条款的约束,如您不接受本协议,则不能使用、复制、修改本软件。

授权许可范围

a) 授予您永久性的、全球性的、免费的、非独占的、不可撤销的本软件的源码使用许可,您可以使用这些源码制作自己的应用。

b) 您只能在DCloud产品体系内使用本软件及其源码。您不能将源码修改后运行在DCloud产品体系之外的环境,比如客户端脱离uni-app。

c) DCloud未向您授权商标使用许可。您在根据本软件源码制作自己的应用时,需以自己的名义发布软件,而不是以DCloud名义发布。

d) 本协议不构成代理关系。

DCloud的责任限制 “软件”在提供时不带任何明示或默示的担保。在任何情况下,DCloud不对任何人因使用“软件”而引发的任何直接或间接损失承担责任,不论因何种原因导致或者基于何种法律理论,即使其曾被建议有此种损失的可能性。

您的责任限制

a) 您需要在授权许可范围内使用软件。

b) 您在分发自己的应用时,不得侵犯DCloud商标和名誉权利。

c) 您不得进行破解、反编译、套壳等侵害DCloud知识产权的行为。您不得利用DCloud系统漏洞谋利或侵害DCloud利益,如您发现DCloud系统漏洞应第一时间通知DCloud。您不得进行攻击DCloud的服务器、网络等妨碍DCloud运营的行为。未经书面许可,您不得利用DCloud的产品进行与DCloud争夺开发者的行为。

d) 如您违反本许可协议,需承担因此给DCloud造成的损失。

本协议签订地点为中华人民共和国北京市海淀区。

根据发展,DCloud可能会对本协议进行修改。修改时,DCloud会在产品或者网页中显著的位置发布相关信息以便及时通知到用户。如果您选择继续使用本框架,即表示您同意接受这些修改。

条款结束

暂无用户评论。