@assistant-ui/generative-ui

中文文档
0.0.8发布于 2026/10/28MITTypeScriptES Module构建来源已验证近 30 天下载 9.7万

框架中立的助手UI

中文使用文档
文档目录10 节
  1. 安装
  2. 使用量
  3. 流出道具
  4. "use generative" 撰写
  5. Slack 团队和A2UI
  6. @assistant-ui/generative-ui/slack
  7. @assistant-ui/generative-ui/teams
  8. @assistant-ui/generative-ui/a2ui
  9. 光谱模式
  10. 许可证

@ assistant-ui/ generative- ui (英语)

框架中性基因UI为助手-ui. 根项持有无反光的UI树类型并规范化器, @assistant-ui/generative-ui/react 使树与反应 slack, (中文(简体) ), teams,以及 a2ui 子路径转换为其它表面, @assistant-ui/generative-ui/spec 在基因框架的光谱模式下制作一个库(在下方有反应原生组件) react-native 出口条件, @assistant-ui/generative-ui/spec/tree 将 Slack 和 Teams 子路径的 spec 转换为树,以及 @assistant-ui/generative-ui/vue 用于 Vue 组件.

安装

npm install @assistant-ui/generative-ui @assistant-ui/react zod

每个框架和库都是可选的对等点,只有一些子路径需要: @assistant-ui/generative-ui/react 需求 react, (中文(简体) ), @assistant-ui/react,以及 zod· ; @assistant-ui/generative-ui/spec 需求 react, (中文(简体) ), zod,以及 generative-frame附加时 react-native 土著反应; @assistant-ui/generative-ui/spec/tree 仅需要 generative-frame; 和 : @assistant-ui/generative-ui/vue 需求 vue, (中文(简体) ), zod,以及 generative-frame。根条目和 slack, (中文(简体) ), teams,以及 a2ui 子路径不需要它们.

使用量

在图书馆里宣布模型的组件 然后曝光 他们通过 present 工具。 模型发出一个 { _type, ...props } 树 (单位:千美元)_type 命名组件, 因此是真实的 type 道具从不碰撞;工具 让它与图书馆对立.

import { JSONGenerativeUI } from "@assistant-ui/generative-ui/react";
import { Thread, Tools } from "@assistant-ui/react";
import { z } from "zod";

const generativeUI = new JSONGenerativeUI({
  library: {
    Card: {
      description: "A card container with a title.",
      properties: z.object({ title: z.string() }),
      render: ({ title, children }) => (
        <section className="card">
          <h3>{title}</h3>
          {children}
        </section>
      ),
    },
    Text: {
      description: "A run of text.",
      properties: z.object({ tone: z.enum(["muted", "normal"]).optional() }),
      render: ({ tone, children }) => <p data-tone={tone}>{children}</p>,
    },
  },
});

const toolkit = {
  present: generativeUI.present(),
};

function App() {
  return (
    <Thread>
      <Tools toolkit={toolkit} />
      {/* MessageList, Composer, ... */}
    </Thread>
  );
}

节点的 children 道具是递归得到的,因此组件可以被嵌入:

{
  "_type": "Card",
  "title": "Hello",
  "children": [{ "_type": "Text", "tone": "muted", "children": "Nested text" }]
}

流出道具

默认一个部件只有在道具完全到达后才能制作,所以 render 总是看到完整的道具。 选择从部分道具渲染 streamProperties。当你这样做, render 接收注入的 $status 道具 歧视道具: "streaming" 他们是 Partial一次 "done" 都结束了.

const generativeUI = new JSONGenerativeUI({
  library: {
    Weather: {
      description: "A live weather card.",
      properties: z.object({ city: z.string(), temp: z.number() }),
      streamProperties: true,
      render: (props) => {
        if (props.$status === "done") {
          return <Card>{`${props.city}: ${props.temp}°`}</Card>; // complete props
        }
        return <Card>{props.city ?? "Loading…"}</Card>; // partial props
      },
    },
  },
});

render 是函数 props,而不是反应组件——但它运行在其 拥有纤维,所以你可以叫钩子 里面像往常一样.

"use generative" 撰写

上面的例子用手将图书馆连接到客户端上. 与 "use generative" 编译器( e)@assistant-ui/next 或者说 @assistant-ui/vite? 你吗 也可以将一个组件的 properties 计划 render 财务报告和审定财务报表 将图书馆暴露为工具,建筑将每半分到正确的目标: 策略到服务器(所以模型看到工具) render 继续 客户.

"use generative";

import { z } from "zod";
import { Weather } from "@/components/weather";
import { defineToolkit } from "@assistant-ui/react";
import {
  JSONGenerativeUI,
  defineGenerativeComponents,
} from "@assistant-ui/generative-ui/react";

const generative = new JSONGenerativeUI({
  library: defineGenerativeComponents({
    Weather: {
      description: "Show a weather card.",
      properties: z.object({ city: z.string() }),
      render: (props) => <Weather {...props} />,
    },
  }),
});

export default defineToolkit({
  // `present` displays a component; `prompt_user` is a human-in-the-loop prompt.
  present: generative.present(),
  prompt_user: generative.promptUser(),
});

模特儿打电话来 present 一个节点像 { "_type": "Weather", "city": "SF" }。 。 。 . 过 present({ display: "standalone" }) 自行制作该部分 表面而不是内线。 见 "use generative" 文档 用来建房的.

Slack 团队和A2UI

同一树为平原JSON,因此没有被绑入浏览器. 三条无反应子路径转换为 Slack Block Kit, Microsoft Teams 适配卡,并输入 A2UI (英语) 表面 。 他们运行在服务器动作, 队列工人,和webhook处理器。 转换超过了内置词汇; a $type 在外边被丢弃 警告。 从基因框架的光谱模式转换出来的光谱 specToUISpec 从 @assistant-ui/generative-ui/spec/tree 先说 每个目标都有一个组件,以及未支持的内容如何降解,记录如下: Slack 上的基因UI, (中文(简体) ), 微软团队的基因UI,以及 A2UI 过AG-UI。 。 。 .

@assistant-ui/generative-ui/slack

将树转换为 Slack Block Kit JSON ()toSlackBlocks),解码 block_actions 网络鼠标返回 $action 有效载荷(decodeBlockAction),并将 Block Kit 映射回词汇节点(fromSlackBlocks) (中文(简体) ).

import { toSlackBlocks } from "@assistant-ui/generative-ui/slack";

const { blocks, warnings } = toSlackBlocks({
  $type: "Card",
  title: "Order #48213",
  children: [{ $type: "Text", value: "Shipped, arriving Thursday." }],
});

@assistant-ui/generative-ui/teams

将树转换为 Microsoft Teams 适配卡(toAdaptiveCard)或有根-木质支持的活体框架附件(toTeamsAttachments),并解码 activity.value (单位:千美元)decodeSubmitData) (中文(简体) ).

import { toAdaptiveCard } from "@assistant-ui/generative-ui/teams";

const { card, warnings } = toAdaptiveCard({
  $type: "Card",
  title: "Order #48213",
  children: [{ $type: "Text", value: "Shipped, arriving Thursday." }],
});

@assistant-ui/generative-ui/a2ui

入境方向:应用A2UI地表操作(applyA2uiOperations),并将表面转换为词汇树(convertSurfaceToUISpec),通过同一途径产生 present 路径.

import {
  applyA2uiOperations,
  convertSurfaceToUISpec,
} from "@assistant-ui/generative-ui/a2ui";

const { state } = applyA2uiOperations(new Map(), operations);
for (const surface of state.values()) {
  const { spec, warnings } = convertSurfaceToUISpec(surface);
}

光谱模式

单位 基因框架的光谱模式,模型将UI构建为平面谱,流出为JSON Patch行,并带有状态,绑定,验证. toSpecCatalog 从 @assistant-ui/generative-ui/spec 默认将库、内置词汇转换为目录和组件 spec 模式。 安装 generative-frame 并肩作战.

import { createWidgetToolkit } from "generative-frame/assistant-ui";
import { createSpecToolkit } from "generative-frame/spec/assistant-ui";
import { toSpecCatalog } from "@assistant-ui/generative-ui/spec";

const { catalog, components } = toSpecCatalog();
const widgets = createWidgetToolkit({
  spec: createSpecToolkit(catalog, { components }),
});

光谱模式 列出每个组件发送的事件,绑定值如何回写,以及您自己的组件如何声明其事件和槽.

toSpecCatalog 从 @assistant-ui/generative-ui/vue 为 Vue 组件构建相同的目录 SpecRenderer 从 generative-frame/spec/vue它们使得 data-aui 标记为 React 词汇表,所以同样的样式表适用:

import { h } from "vue";
import type { Spec } from "generative-frame/spec";
import { SpecRenderer } from "generative-frame/spec/vue";
import { toSpecCatalog } from "@assistant-ui/generative-ui/vue";

const { catalog, components } = toSpecCatalog();
const render = (spec: Spec) => h(SpecRenderer, { spec, catalog, components });

许可证

麻省理工学院

版本与发布记录

@assistant-ui/generative-ui 共发布 10 个版本,首次发布于 2026/10/09;过去 12 个月发布了 10 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.0.8latest2026/10/2810 天前
0.0.72026/10/2315 天前
0.0.62026/10/2018 天前
0.0.52026/10/1622 天前
0.0.42026/10/1325 天前
0.0.32026/10/1226 天前

关于 @assistant-ui/generative-ui 的常见问题

@assistant-ui/generative-ui 是什么?

框架中立的助手UI

如何安装 @assistant-ui/generative-ui?

在项目目录运行 npm install @assistant-ui/generative-ui,或使用 pnpm add / yarn add / bun add。

@assistant-ui/generative-ui 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@assistant-ui/generative-ui 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@assistant-ui/generative-ui 可以商用吗?

@assistant-ui/generative-ui 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@assistant-ui/generative-ui 的下载量有多少?

根据 npm 官方下载统计,@assistant-ui/generative-ui 在 2026/10/07 – 2026/11/05 这 30 天内被下载 97,294 次,日均约 3,243 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@assistant-ui/generative-ui 还在维护吗?

最新版本 0.0.8 发布于 2026/10/28(10 天前);至今共发布 10 个版本,其中过去 12 个月发布了 10 个;首次发布于 2026/10/09。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。