[控场AI]
· 7 分钟阅读· 3,522 字

OpenUI 1.0:让LangGraph智能体直接生成交互式界面

OpenUI 1.0:让LangGraph智能体直接生成交互式界面

OpenUI 1.0让LangGraph Agent直接生成可交互界面,用自研DSL节省67% Token。

文章讨论生成式UI如何改变Agent输出方式,重点介绍OpenUI 1.0。OpenUI采用MIT开源许可、模型无关,并专为嵌入开发者自有应用设计。它提供@openui/langchain包,把LangGraph流式事件转为AG-UI事件,使现有Agent无需重写逻辑即可向前端输出图表、表格和过滤器等交互组件。与依赖JSON的方案不同,OpenUI使用自研OpenUI Lang,基准测试显示节省约67% Token,并支持流式渐进渲染。开发者可引入自有组件库和设计系统,由模型根据请求决定组件编排。文章认为,生成式UI可能成为Agent应用的标准配置。

从文本回复到交互界面:生成式UI正在改变Agent的输出方式

大型语言模型的输出形态长期以来被限制在纯文本或 Markdown 之中。但当一个 LangGraph 智能体完成了完整的研究流程、调用了多个工具、分析了大量数据之后,最终却只能返回一大段文字来描述结果——这种体验显然不够理想。

生成式UI(Generative UI)试图解决这个问题:让Agent根据用户请求动态组合出真实可交互的界面组件,而非一段静态文本。ChatGPT 近期推出的"智能界面"(Intelligent UI)正是这一方向的典型代表。而另一边,开源社区也在推进同类方案。

据Reddit社区讨论,OpenUI 刚刚发布了 1.0 版本。该项目与 ChatGPT 的智能界面解决的是同一底层问题,但路径截然不同:MIT 开源许可、模型无关、且专为嵌入开发者自有应用而设计。

生成式UI(Generative UI) 是相对传统“静态UI”或“模板化UI”提出的概念,核心区别在于界面结构本身由模型在运行时生成,而非由开发者预先枚举所有可能的界面状态。传统聊天机器人只能返回文本或 Markdown,用户必须自行在脑中把文字“翻译”成表格、图表或操作步骤;生成式UI则让模型直接输出一份可渲染的界面描述,再由前端运行时解析成真实组件。它通常包含三层:模型侧负责生成结构化界面描述,中间层负责校验与流式传输,前端侧负责把描述映射到具体组件库。与“函数调用”相比,生成式UI关注的不只是调用哪个工具,而是调用完成后如何把结果组织成用户可读、可点、可筛选的界面。

OpenUI如何与LangChain/LangGraph协作

对于使用 LangChain 和 LangGraph 构建 Agent 的开发者来说,OpenUI 提供的集成方案是一个值得关注的亮点。据项目文档和社区讨论,你可以将已有的 LangGraph Agent 连接到 OpenUI,使其向前端流式输出交互式界面,而不是局限于文本响应。

具体实现上,OpenUI 提供了 @openui/langchain 包,它负责将 LangGraph 的流式事件转换为 AG-UI 事件,再由 OpenUI 前端消费和渲染。官方还提供了一个基于 LangChain Deep Agents 运行在 LangGraph Platform 上的示例,说明这并非一个孤立的聊天机器人演示,而是面向真实 Agent 工作流的集成。

这种集成的意义在于:你不需要重写现有的 Agent 逻辑,只需要在输出层接入 OpenUI,就能让Agent的结果以图表、表格、过滤器等可交互组件的形式呈现。

AG-UI 事件 可以理解为一种面向Agent与前端之间通信的“界面流协议”。LangGraph 在执行过程中会产生多种流式事件,例如节点开始、工具调用、token 输出、状态更新等,这些事件本身描述的是“Agent正在做什么”。而 AG-UI 事件进一步描述“界面应该呈现什么”,例如新增一个卡片、更新表格某一行、追加一段文本或触发某个可交互区域。@openui/langchain 的作用就是做事件语义转换:把 LangGraph 的运行时事件映射为 OpenUI 前端能够消费的 AG-UI 事件。这样前端不需要理解 LangGraph 的内部图结构,只需要按 AG-UI 协议渲染即可。对于已有 Agent 来说,这意味着业务逻辑、工具和状态管理可以保持不变,只在输出边界增加一层适配。

自有组件库 + 模型自主编排

OpenUI 的一个核心设计理念是:不限制你使用固定的组件集合。

开发者可以引入自己的组件库、设计系统以及应用逻辑,模型则根据用户请求决定如何组合这些组件。举例来说,如果你在构建一个金融研究 Agent,可以预先定义股票走势图、公司对比表、财报数据表等组件,然后让 Agent 根据工具调用的结果自行判断哪些组件适合展示。

这种"组件由你定义、编排由模型决定"的模式,与传统的固定UI模板有本质区别。它把界面生成的灵活性交给了模型,同时保留了开发者对组件质量的完全控制。

自研DSL:比JSON方案节省67%Token

在UI生成的技术路线上,OpenUI 做了一个与其他项目不同的选择。

大多数结构化生成式UI方案依赖 JSON。据社区讨论,Vercel 的 json-render 和 Google 的 a2ui 都采用 JSON 的变体来实现界面描述。而 OpenUI 则使用自研的领域特定语言——OpenUI Lang,专门为 LLM 生成界面而设计。

根据项目公布的基准测试,OpenUI Lang 比同类 JSON 方案少用约 67% 的 Token,并且组件可以在响应流式传输过程中逐步渲染。对于 Agent 应用而言,这一点尤其关键:在等待 Agent 执行多个工具调用之后,用户最不希望的就是再等前端渲染一遍结果。

领域特定语言(DSL) 在这里指为“让大模型生成用户界面”这一特定任务设计的迷你语言,而不是通用编程语言。JSON 的优点是通用、解析器成熟,但缺点是对 LLM 来说冗余度高:每个键名、引号、括号和逗号都要消耗 token,而且深层嵌套容易导致格式错误。OpenUI Lang 通过更紧凑的语法、更少的重复标记和面向界面组件的原语,降低模型生成界面描述时的 token 开销。基准测试中约 67% 的 token 节省,主要来自减少键名重复、省略不必要的结构符号以及用更短的形式表达组件树。更重要的是,DSL 可以设计成可增量解析的格式,使前端在模型还在输出时就能识别并渲染已完成的组件,而不是等整个 JSON 对象闭合后再一次性解析。

可靠性与模型无关性

让 LLM 决定界面长什么样,天然会带来可靠性问题。OpenUI 在这方面做了针对性工作,包括对格式错误的生成结果进行验证和自动纠正。

由于采用模型无关的架构,开发者不必绑定 OpenAI 或 Anthropic,可以继续使用现有的模型提供商,甚至接入本地部署的模型。当然,不同模型生成结构化UI的可靠程度会有差异,这一点需要开发者自行评估。

模型无关性 在生成式UI场景中不仅是“换一个API Key”那么简单。不同模型在结构化输出上的能力差异很大:有的模型擅长严格遵循语法,有的模型在长上下文或多工具调用后容易漏掉闭合标签或混淆组件属性。OpenUI 采用模型无关架构,意味着它的运行时需要把“模型可能生成不规范界面描述”当作常态来处理。因此它加入了对格式错误的验证和自动纠正,例如检测缺失的组件闭合、非法属性、未知组件名,并尝试修复或回退到安全渲染。开发者继续使用现有模型提供商或本地模型时,需要评估的是该模型在 OpenUI Lang 上的遵循率、重试成本和延迟,而不是简单假设所有模型都能同等可靠地生成交互界面。

生成式UI会成为Agent应用的标准配置吗?

一个值得深思的现象是:整个行业在提升 Agent 的推理能力、工具使用、状态管理和工作流编排上投入了大量精力,但用户与 Agent 输出交互的方式几乎没有变化。你可以用 LangGraph 构建一个相当复杂的 Agent,给它接入几十个工具,最终仍然把所有结果塞进一个传统聊天窗口里。

ChatGPT 向智能界面演进,OpenUI 发布 1.0,这些信号都指向同一个问题:生成式UI是否会成为构建 Agent 应用的标准组成部分?

对于正在使用 LangChain 或 LangGraph 的开发者来说,这可能是一个需要认真考虑的选择:是让 Agent 返回结构化数据、自己处理UI,还是让 Agent 直接生成可交互界面。两种路径各有适用场景,但后者正在变得越来越可行。

相关链接:

分享:

相关推荐