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() hook 中的 assistantId 来获取 UI 组件的代码。您可以通过向 LoadExternalComponent 组件提供 namespace 属性来自定义此行为。

从 UI 组件访问和交互线程状态

您可以使用 useStreamContext hook 在 UI 组件内部访问线程状态。

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

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

从服务器流式传输 UI 消息

您可以在节点执行完成之前,通过使用 useStream() hook 的 onCustomEvent 回调来流式传输 UI 消息。当 LLM 生成响应时更新 UI 组件,这尤其有用。
然后,您可以通过调用 ui.push() / push_ui_message() 并使用与您希望更新的 UI 消息相同的 ID 来推送更新到 UI 组件。

从状态中移除 UI 消息

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

了解更多