generative-ui

GitHub
658 61 较难 1 次阅读 今天Agent
AI 解读 由 AI 自动生成,仅供参考

generative-ui 是一个专注于为智能体(Agentic)应用构建动态用户界面的开源项目。它打破了传统界面由开发者预先写死的限制,让 AI 智能体能够在运行时根据实时上下文,动态生成、选择或控制界面元素。这意味着应用不再只是输出文本,而是能直接呈现可交互的图表、表单或自定义组件,使界面随用户需求灵活演变。

该项目主要解决了智能体应用中“最后一公里”的交互难题:如何让 AI 的输出从单薄的文字对话,升级为丰富、直观且可操作的功能界面。通过提供一套完整的协议与示例,它帮助开发者在不同控制粒度下实现界面生成,既保证了系统的稳定性,又赋予了 AI 足够的灵活性。

generative-ui 特别适合前端工程师、全栈开发者以及正在探索 AI 应用落地的研究人员使用。其核心技术亮点在于支持三种不同的生成模式:高可控的“受控生成”(基于 AG-UI 协议)、平衡灵活的“声明式生成”(基于 A2UI/Open-JSON-UI),以及高度自由的“开放式生成”(基于 MCP Apps)。这些模式均构建在统一的 AG-UI 交互协议之上,确保了智能体与应用前端之间高效、标准化的双向通信,是打造下一代自适应 AI 应用的有力工具。

使用场景

某电商平台的运营团队需要构建一个智能数据分析助手,帮助非技术背景的管理者实时查询销售数据并生成可视化报表。

没有 generative-ui 时

  • 交互僵化:用户只能看到固定的聊天文本回复,无法直接在对话框中查看动态图表或可交互的数据表格。
  • 开发成本高:每新增一种图表类型(如热力图、漏斗图),前端工程师都必须硬编码新的 UI 组件并重新部署应用。
  • 上下文割裂:AI 分析出的关键数据与展示界面分离,用户需手动复制数据到外部工具才能进行二次分析或演示。
  • 响应滞后:面对突发的临时分析需求(如“对比上周同期并标红异常值”),系统因缺乏预设模板而无法即时渲染定制化视图。

使用 generative-ui 后

  • 界面自适应:generative-ui 让 AI 根据查询意图实时生成并渲染交互式图表(如可筛选的折线图、下钻地图),无需预定义固定界面。
  • 零代码扩展:利用 Declarative Generative UI 模式,AI 直接返回结构化 UI 描述,新增复杂可视化组件无需修改前端代码或重新发布。
  • 沉浸式分析:用户在对话流中直接操作生成的 UI 组件(如点击图例过滤、悬停查看详情),实现“问即所得”的闭环体验。
  • 动态定制:针对“标红异常值”等临时指令,Open-ended Generative UI 能即时调整组件样式与逻辑,瞬间呈现符合特定上下文的专属视图。

generative-ui 将静态的聊天机器人升级为能随需应变的智能工作台,彻底打破了传统开发与动态业务需求之间的壁垒。

运行环境要求

操作系统
  • 未说明
GPU

未说明

内存

未说明

依赖
notes该工具是一个用于构建代理应用(Agentic Apps)生成式 UI 的框架/协议指南,而非单一的本地运行模型。它主要依赖前端环境(如 React/Next.js)和后端运行时(Node.js 或 Python)。示例中展示了如何使用 LiteLLM 连接大模型,以及通过 MCP 协议连接外部服务。具体的系统资源需求取决于所连接的大模型服务商或本地部署的模型,工具本身无特定 GPU 或内存硬性要求。
python未说明 (示例代码中使用了 Python)
@copilotkit/react
@copilotkit/a2ui-renderer
@copilotkit/runtime
@ag-ui/mcp-apps-middleware
litellm
zod
React
generative-ui hero image

快速开始

🔮 面向智能体应用的生成式UI

官网:生成式UI 文档:生成式UI 协议:AG-UI Discord GitHub星标

构建能够适应用户的应用。

生成式UI资源

https://github.com/user-attachments/assets/ed28c734-e54e-4412-873f-4801da544a7f


本仓库将介绍智能体UI协议(AG-UI、A2UI、MCP应用)如何实现生成式UI模式(受控、声明式、开放式),以及如何使用CopilotKit来实现这些模式。

👉 OpenGenerativeUI —— 用于在智能体应用中构建生成式UI的开源框架 GitHub星标

👉 生成式UI指南 (PDF) —— 对生成式UI的概念性概述,重点关注权衡、UI界面以及智能体UI协议之间的协作方式。


什么是生成式UI?

生成式UI是一种模式,在这种模式下,用户界面的部分内容不是由开发者完全预先定义的,而是在运行时由AI智能体生成、选择或控制。

智能体不仅可以生成文本,还可以发送UI状态、结构化的UI规范或交互式UI组件,由前端实时渲染。这使得UI从固定的、由开发者定义的界面转变为能够随着智能体的工作和上下文变化而动态调整的界面。

在CopilotKit生态系统中,生成式UI被划分为三种实用模式,分别通过不同的智能体UI协议和规范来实现,这些协议和规范定义了智能体如何向应用程序传递UI更新:

  • 受控生成式UI(高控制、低自由度)→ AG-UI
  • 声明式生成式UI(共享控制)→ A2UIOpen-JSON-UI
  • 开放式生成式UI(低控制、高自由度)→ MCP应用 / 自定义UI

AG-UI(智能体-用户交互协议)作为这些模式之下的双向运行时交互层,提供了智能体与应用程序之间的连接,从而实现生成式UI,并且能够在A2UI、MCP应用、Open-JSON-UI以及自定义UI规范之间统一工作。

AG-UI运行时架构

本仓库的其余部分将从最受限到最开放的模式逐一介绍,并展示如何使用CopilotKit来实现它们。


生成式UI的三种类型

1. 受控生成式UI (AG-UI)

受控生成式UI示例

受控生成式UI意味着你预先构建好UI组件,而智能体则决定显示哪个组件,并为其传递所需的数据。

这是控制程度最高的方式:布局、样式和交互模式都由你掌控,而智能体则控制何时以及显示哪个UI组件。

在CopilotKit中,这种模式是通过useFrontendTool钩子实现的,它允许应用程序注册get_weather工具,并定义在该工具执行生命周期的每个阶段如何渲染预定义的React UI。

// 天气工具——一个可调用的工具,以样式化的卡片形式显示天气数据
useFrontendTool({
  name: "get_weather",
  description: "获取某个地点的当前天气信息",
  parameters: z.object({ location: z.string().describe("要查询天气的城市或地点") }),
  handler: async ({ location }) => {
    await new Promise((r) => setTimeout(r, 500));
    return getMockWeather(location);
  },
  render: ({ status, args, result }) => {
    if (status === "inProgress" || status === "executing") {
      return <WeatherLoadingState location={args?.location} />;
    }
    if (status === "complete" && result) {
      const data = JSON.parse(result) as WeatherData;
      return (
        <WeatherCard
          location={data.location}
          temperature={data.temperature}
          conditions={data.conditions}
          humidity={data.humidity}
          windSpeed={data.windSpeed}
        />
      );
    }
    return <></>;
  },
});

2. 声明式生成式 UI(A2UI + Open‑JSON‑UI)

声明式生成式 UI 概览

声明式生成式 UI 处于受控与开放式方法之间。在此模式下,代理会返回结构化的 UI 描述(卡片、列表、表单、小部件),前端则负责渲染这些内容。

用于生成式 UI 的两种常见声明式规范是 A2UI 和 Open-JSON-UI。

  1. A2UI → 来自 Google 的声明式生成式 UI 规范,基于 JSONL 并支持流式传输,旨在实现跨平台的渲染兼容性。

  2. Open‑JSON‑UI → OpenAI 内部声明式生成式 UI 架构的开放标准化方案。

我们首先来了解如何实现 A2UI 的基本流程。

与其手动编写 A2UI JSON,不如使用 A2UI Composer 自动生成规范。将生成的输出复制并粘贴到代理的提示中,作为参考模板。

A2UI Composer

prompt_builder.py 中,添加一个 A2UI JSONL 示例,使代理能够学习 A2UI 所期望的三种消息封装:surfaceUpdate(组件)、dataModelUpdate(状态),以及 beginRendering(渲染信号)。

UI_EXAMPLES = """
---BEGIN FORM_EXAMPLE---
{"surfaceUpdate":{"surfaceId":"form-surface","components":[ ... ]}}
{"dataModelUpdate":{"surfaceId":"form-surface","path":"/","contents":[ ... ]}}
{"beginRendering":{"surfaceId":"form-surface","root":"form-column","styles":{ ... }}}
---END FORM_EXAMPLE---
"""

UI_EXAMPLES 注入代理指令中,使其在请求 UI 时能够输出有效的 A2UI 消息行。

instruction = AGENT_INSTRUCTION + get_ui_prompt(self.base_url, UI_EXAMPLES)

return LlmAgent(
    model=LiteLlm(model=LITELLM_MODEL),
    name="ui_generator_agent",
    description="通过 A2UI 声明式 JSON 生成动态 UI。",
    instruction=instruction,
    tools=[],
)

最后一步:在前端,将 createA2UIMessageRenderer(...) 传递给 renderActivityMessages,以便 CopilotKit 能够将流式传输的 A2UI 输出渲染为 UI,并将 UI 操作反馈回代理。

import { CopilotKitProvider, CopilotSidebar } from "@copilotkitnext/react";
import { createA2UIMessageRenderer } from "@copilotkit/a2ui-renderer";
import { a2uiTheme } from "../theme";

const A2UIRenderer = createA2UIMessageRenderer({ theme: a2uiTheme });

export function A2UIPage({ children }: { children: React.ReactNode }) {
  return (
    <CopilotKitProvider
      runtimeUrl="/api/copilotkit-a2ui"
      renderActivityMessages={[A2UIRenderer]}   // ← 将 A2UI 渲染器挂载进来
    >
      {children}
      <CopilotSidebar defaultOpen labels={{ modalHeaderTitle: "A2UI 助手" }} />
    </CopilotKitProvider>
  );
}

以下是一个使用 A2UI 和 Agent Spec 的日历演示:

https://github.com/user-attachments/assets/48158b9d-188d-42d1-835b-32d7425cc43a

对于 Open‑JSON‑UI,模式相同。代理可以响应一个 Open‑JSON‑UI 负载,以 JSON 格式描述一个 UI“卡片”,而前端则负责渲染它。

// 示例(示意性):代理返回声明式 Open-JSON-UI 风格的规范
{
  type: "open-json-ui",
  spec: {
    components: [
      {
        type: "card",
        properties: {
          title: "数据可视化",
          content: { ... }
        }
      }
    ]
  }
}
Open-JSON-UI 示例

3. 开放式生成式 UI(MCP 应用)

https://github.com/user-attachments/assets/48eeab8d-7845-4d06-83ef-d518a807da03

开放式生成式 UI 是指代理返回完整的 UI 界面(通常是 HTML/iframes/自由格式内容),而前端主要充当展示该界面的容器。

这种方式的权衡较高:渲染任意内容可能带来安全和性能方面的顾虑,样式一致性难以保证,且在 Web 之外的可移植性较差。

这种模式常用于 MCP 应用。在 CopilotKit 中,可以通过将 MCPAppsMiddleware 添加到代理中来启用对 MCP 应用的支持,从而使运行时能够连接到一个或多个 MCP 应用服务器。

import { BuiltInAgent } from "@copilotkit/runtime/v2";
import { MCPAppsMiddleware } from "@ag-ui/mcp-apps-middleware";

const agent = new BuiltInAgent({
  model: "openai/gpt-5.2",
  prompt: "您是一位乐于助人的助手。",
}).use(
  new MCPAppsMiddleware({
    mcpServers: [
      {
        type: "http",
        url: "https://mcp.excalidraw.com/mcp", // 或者您的本地服务器:http://localhost:3001/mcp
        serverId: "my-server",
      },
    ],
  }),
);

现实世界案例:Excalidraw MCP 应用

我们使用 CopilotKit 和一个经过修改的 Excalidraw MCP 服务器,构建了一款由 MCP 提供支持的 AI 绘图应用。只需在聊天中描述任何内容,几秒钟内即可获得一个完全可编辑的 Excalidraw 图表。

src/app/api/copilotkit/route.ts 中完整的 CopilotKit 运行时设置如下:

import {
  CopilotRuntime,
  ExperimentalEmptyAdapter,
  copilotRuntimeNextJSAppRouterEndpoint,
} from "@copilotkit/runtime";
import { BuiltInAgent } from "@copilotkit/runtime/v2";
import { NextRequest } from "next/server";
import { MCPAppsMiddleware } from "@ag-ui/mcp-apps-middleware";

const agent = new BuiltInAgent({
  model: "openai/gpt-5",
  prompt: `You are an AI diagramming assistant powered by Excalidraw...`, // 完整提示词见仓库
}).use(
  new MCPAppsMiddleware({
    mcpServers: [
      {
        type: "http",
        url: process.env.MCP_SERVER_URL ?? "http://localhost:3001/mcp",
        serverId: "excalidraw",
      },
    ],
  }),
);

const serviceAdapter = new ExperimentalEmptyAdapter();

const runtime = new CopilotRuntime({
  agents: {
    default: agent,
  },
});

export const POST = async (req: NextRequest) => {
  const { handleRequest } = copilotRuntimeNextJSAppRouterEndpoint({
    runtime,
    serviceAdapter,
    endpoint: "/api/copilotkit",
  });

  return handleRequest(req);
};

该代理会向 MCP 服务器发送包含 Excalidraw 元素的 JSON 数组,并调用 create_view 方法;CopilotKit 则通过 MCP Apps 协议直接在聊天界面中渲染出相应的 iframe。我们还对原始的 Excalidraw MCP 服务器进行了扩展,增加了检查点存储、REST 工作区端点、流式传输以及小部件按钮等功能。每个图表都会自动保存到磁盘,并以完整可编辑画布的形式打开。只需点击一下,即可将任意图表从聊天中直接发布到 Excalidraw 上。

https://github.com/user-attachments/assets/18dd56de-6f14-4a1d-b743-52fccf145bbe


4. 开放式生成式 UI(useComponent)

OpenGenerativeUI 是一个开源示例项目,展示了如何使用 CopilotKit 和 LangGraph 构建丰富且交互式的用户界面。它采用了与 MCP Apps 相同的开放性理念,但架构有所不同。

不同于连接外部 MCP 服务器的方式,LangGraph 代理可以直接生成原始的 HTML/SVG/Canvas 内容,而前端的 useComponent 则会将其作为命名工具调用接收,并在一个带有主题的沙盒 iframe 中渲染出来。该代理可以生成算法可视化、3D 动画(Three.js、WebGL)、图表、交互式模拟、数学绘图、D3 力布局等任何可以用自包含 HTML 表达的内容。

import { useComponent } from "@copilotkit/react-core/v2";
import {
  WidgetRenderer,
  WidgetRendererProps,
} from "@/components/generative-ui/widget-renderer;

// 注册一个命名组件:代理会调用 "widgetRenderer",传入
// { title, description, html } 参数,前端则会在沙盒 iframe 中渲染
useComponent({
  name: "widgetRenderer",
  description:
    "在沙盒 iframe 中渲染交互式 HTML/SVG 可视化内容。" +
    "适用于算法可视化、图表、小部件和模拟场景。",
  parameters: WidgetRendererProps,
  render: WidgetRenderer,
});

useComponent 与 MCP Apps 的区别:在 MCP Apps 中,代理会调用远程服务器上的工具,然后由服务器返回一个 iframe 的 URL,主要的工作负载都在服务器端完成。而在 useComponent 中,代理直接生成内容(HTML 字符串),并通过工具调用本身传递给前端。无需服务器往返,也没有 URL,只有结构化的输出,由前端组件按需渲染。

https://github.com/user-attachments/assets/ed28c734-e54e-4412-873f-4801da544a7f


生成式 UI 演示平台

生成式 UI 演示平台是一个实践环境,用于探索这三种模式的实际运作方式,并实时观察代理输出如何映射到 UI 上。

https://github.com/user-attachments/assets/f2f52fae-c9c6-4da5-8d29-dc99b202a7ad

相关博客文章

视频

其他资源


🤝 欢迎贡献

欢迎贡献:可通过 PR 添加示例(受控式、声明式、开放式)、改进说明或增加素材。

如需帮助或讨论,请加入 Discord。如需贡献代码,请访问 GitHub。关注 @CopilotKit 获取最新动态。

项目 预览 描述 链接
开放式生成式 UI 开放式生成式 UI 预览 开放式的生成式 UI:代理生成 HTML/SVG 视觉内容,并在沙盒 iframe 中渲染,无需 MCP 服务器。 仓库
生成式 UI 演示平台 生成式 UI 演示平台预览 展示三种生成式 UI 模式,并提供可运行的端到端示例。 仓库
演示
Excalidraw MCP 应用 Excalidraw MCP 应用预览 描述任何内容,即可通过 MCP 应用在聊天中获得一个完全可编辑的 Excalidraw 流程图。 仓库

你构建了什么吗?请 打开 PR 或在 Discord 上分享吧。

关于 AI/LLM 代理:docs.copilotkit.ai/llms.txt


注: 本项目已整合至 CopilotKit 单体仓库。 最新版本位于 examples/showcases/generative-ui。 请在 主 CopilotKit 仓库 中提交问题和拉取请求。

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|3天前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|3天前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

146.8k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.1k|★★☆☆☆|今天
开发框架图像Agent

LLMs-from-scratch

LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备

90.1k|★★★☆☆|2天前
语言模型图像Agent

Deep-Live-Cam

Deep-Live-Cam 是一款专注于实时换脸与视频生成的开源工具,用户仅需一张静态照片,即可通过“一键操作”实现摄像头画面的即时变脸或制作深度伪造视频。它有效解决了传统换脸技术流程繁琐、对硬件配置要求极高以及难以实时预览的痛点,让高质量的数字内容创作变得触手可及。 这款工具不仅适合开发者和技术研究人员探索算法边界,更因其极简的操作逻辑(仅需三步:选脸、选摄像头、启动),广泛适用于普通用户、内容创作者、设计师及直播主播。无论是为了动画角色定制、服装展示模特替换,还是制作趣味短视频和直播互动,Deep-Live-Cam 都能提供流畅的支持。 其核心技术亮点在于强大的实时处理能力,支持口型遮罩(Mouth Mask)以保留使用者原始的嘴部动作,确保表情自然精准;同时具备“人脸映射”功能,可同时对画面中的多个主体应用不同面孔。此外,项目内置了严格的内容安全过滤机制,自动拦截涉及裸露、暴力等不当素材,并倡导用户在获得授权及明确标注的前提下合规使用,体现了技术发展与伦理责任的平衡。

88.9k|★★★☆☆|3天前
开发框架图像Agent