在现代网页应用中,用户体验至关重要。传统的用户界面通常向所有用户展示相同的界面,这可能会限制用户的参与度和满意度。

今天的传统 UI:所有用户都看到基本相同的统一界面,无论他们的个人偏好或需求如何。
未来的生成式 UI:每个用户都能获得根据其独特的交互和偏好量身定制的个性化界面,从而提升可用性和参与度。
生成式 UI 利用 AI 和动态渲染技术来创建这些个性化体验。通过理解用户行为和偏好,生成式 UI 可以实时适应,提供不仅更具吸引力,而且更高效地满足用户需求的界面。
🦜🔗 LangChain 是一个多功能框架,旨在促进大型语言模型与各种工具之间的交互。它简化了调用模型和访问功能的过程,使构建利用 AI 能力的复杂应用变得更加容易。LangChain 生态项目还包括:
🦜🕸️ LangGraph:使用 LLM 构建有状态、多参与者应用程序,这些应用程序建立在 LangChain 基础模块及其能力之上。
🦜🏓 Lang Serve:将 LangChain 可运行对象和链部署为 REST API 服务。
将大型语言模型集成到应用中是一个复杂的过程,Vercel AI SDK 抽象了 LLM 提供方之间的差异,提供了构建聊天机器人的样板代码,并允许您超越文本输出来生成丰富的交互组件。
AI SDK Core:用于生成文本、结构化对象和工具调用的统一 API。
AI SDK UI:一组与框架无关的 React Hooks,可快速构建聊天界面。
AI SDK RSC:通过 React Server Component(RSC)来流式生成用户界面。
LangChain 和 Vercel AI SDK 的集成如图所示,展示了后端和前端组件之间的相互作用。让我们分解涉及的关键元素和流式 UI 的过程流程。

页面和 UI 组件:用户界面由基于 Shadcn 的 UI 组件构建。
前端逻辑:常见功能和逻辑封装在客户端和共享的 JavaScript 模块中。
流式 UI:流式 UI 组件由 AI SDK RSC 启用,允许实时交互和数据更新。
流式值:可以将数据流传输到客户端的 RSC 组件,确保在不完全重新加载页面的情况下更新信息。
LangChain.js 是 LangChain 模块在 React 环境中的集成点,便于调用模型和工具,确保任务在远程执行并将结果流式回传给客户端。
负责执行具体的 AI Agent 行为逻辑,如本例构建了一个极为简单的 Agent:
调用模型:过程从通过 LangChain 调用模型开始,绑定特定工具如 Foo 和 Bar。
调用工具:根据模型的响应,调用适当的工具来执行任务或获取数据。
提供 REST API 端点处理各种交互,从调用模型到数据流和日志事件。通过 /astream_events 可以将完整的流事件数据回传给客户端。
为了理解 LangChain 和 Vercel AI SDK 如何协同创建流式 UI,让我们按图中的箭头逐步分析。
用户互动:用户与前端的对话组件进行互动,进行提问(及文件上传)。
请求逻辑:用户互动触发客户端 UI 组件向服务端 RSC 逻辑模块发送请求,该模块包含处理请求所需的逻辑。(通常 RSC 逻辑模块会先向 Next.js React 前端回传准备好的各类加载界面,前端接收后渲染加载界面)
请求 LangChain.js:RSC 逻辑模块将请求发送给 LangChain.js,作为和后端 LangChain Python 服务之间的桥梁。
请求 LangServe:LangChain.js 将请求发送给 LangServe(通过 FastAPI),调用请求中指定的模型或工具;并开始接收流失数据回传。
调用应用逻辑:LangServe 处理请求,调用指定的 LLM 应用逻辑。该过程由 LangGraph 管理,按需执行应用的推理逻辑,或者模型上所绑定的工具(例如 Foo 和 Bar)。
数据流回传:LangServe 将模型或工具执行的结果通过数据流的方式,经过 LangChain.js 的 Remote Runnable 对象传输回服务端的 RSC 逻辑模块。
流传输 UI: RSC 逻辑模块基于响应数据创建或更新可流式传输回前端的流式组件,并将服务端渲染得到的 UI 内容回传给前端。
UI 更新:Next.js React 客户端接收到新的可渲染内容后动态更新前端 UI(如渲染 Foo 工具的组件界面),以新的数据提供无缝和互动的用户体验。
LangChain 和 Vercel AI SDK 的结合为构建生成式 UI 应用提供了强大的工具包。通过利用这两种技术的优势,开发人员可以创建高度个性化和互动的用户界面,实时适应用户行为和偏好。这种集成不仅增强了用户参与度,还简化了开发过程,使得构建复杂的 AI 驱动应用变得更加容易。