Skip to main content
生成式用户界面(Generative UI)允许智能体超越文本,生成丰富的用户界面。这使得创建更具交互性和上下文感知的应用程序成为可能,其中用户界面会根据对话流程和 AI 响应进行自适应调整。 Agent Chat 界面展示了一个关于预订/住宿的提示,以及一组生成的酒店列表卡片(包含图片、标题、价格、位置),以内联 UI 组件的形式渲染。 LangSmith 支持将您的 React 组件与图代码放在一起。这使您可以专注于为您的图构建特定的 UI 组件,同时轻松接入现有的聊天界面,例如 Agent Chat,并且仅在真正需要时才加载代码。

教程

1. 定义和配置 UI 组件

首先,创建您的第一个 UI 组件。对于每个组件,您需要提供一个唯一的标识符,该标识符将在您的图代码中用于引用该组件。
src/agent/ui.tsx
接下来,在您的 langgraph.json 配置中定义您的 UI 组件:
ui 部分指向将被图使用的 UI 组件。默认情况下,我们建议使用与图名称相同的键,但您可以根据需要拆分组件,更多详情请参见自定义 UI 组件的命名空间 LangSmith 将自动打包您的 UI 组件代码和样式,并将其作为外部资源提供,可由 LoadExternalComponent 组件加载。一些依赖项,如 reactreact-dom,将自动从捆绑包中排除。 CSS 和 Tailwind 4.x 也开箱即用,因此您可以在 UI 组件中自由使用 Tailwind 类以及 shadcn/ui

2. 在您的图中发送 UI 组件

src/agent.py

3. 在您的 React 应用程序中处理 UI 元素

在客户端,您可以使用 useStream()LoadExternalComponent 来显示 UI 元素。
src/app/page.tsx
在幕后,LoadExternalComponent 将从 LangSmith 获取 UI 组件的 JS 和 CSS,并在 Shadow DOM 中渲染它们,从而确保样式与应用程序其余部分的隔离。

操作指南

在客户端提供自定义组件

如果您的客户端应用程序中已经加载了组件,您可以提供一个此类组件的映射,以便直接渲染,而无需从 LangSmith 获取 UI 代码。

在组件加载时显示加载 UI

您可以提供一个后备 UI,在组件加载时渲染。

自定义 UI 组件的命名空间。

默认情况下,LoadExternalComponent 将使用 useStream() 钩子的 assistantId 来获取 UI 组件的代码。您可以通过向 LoadExternalComponent 组件提供 namespace 属性来自定义此行为。

从 UI 组件访问和与会话状态交互

您可以使用 useStreamContext 钩子在 UI 组件内部访问会话状态。

向客户端组件传递额外的上下文

您可以通过向 LoadExternalComponent 组件提供 meta 属性,向客户端组件传递额外的上下文。
然后,您可以使用 useStreamContext 钩子在 UI 组件中访问 meta 属性。

从服务器流式传输 UI 消息

您可以在节点执行完成之前,通过使用 useStream() 钩子的 onCustomEvent 回调来流式传输 UI 消息。这在 LLM 生成响应时更新 UI 组件时特别有用。
然后,您可以通过调用 ui.push() / push_ui_message() 并指定要更新的 UI 消息的相同 ID 来推送对 UI 组件的更新。

从状态中移除 UI 消息

类似于可以通过追加 RemoveMessage 从状态中移除消息,您可以通过调用 remove_ui_message / ui.delete 并指定 UI 消息的 ID 来从状态中移除 UI 消息。

了解更多