UNPKG

@langgraph-js/sdk

Version:

The UI SDK for LangGraph - seamlessly integrate your AI agents with frontend interfaces

72 lines (53 loc) 2.51 kB
# ArtifactViewer 实现说明 `ArtifactViewer` 组件主要负责与 `langgraph-js` SDK 的状态同步,并集成 `ai-artifacts` Web Component 来展示 AI 生成的内容。 ## 核心功能 1. **状态同步**: 监听 `useChat` hook 中的 `artifacts` 变化。 2. **沙箱渲染**: 使用 `<ai-artifacts>` Web Component 加载远程渲染引擎。 3. **交互反馈**: 通过 `eventCenter` 捕获沙箱内的 `sendBackToAI` 事件,支持 Human-in-the-loop 流程。 ## 核心实现步骤 ### 1. 同步 Artifacts 状态 利用 `useEffect` 监听 SDK`artifacts``loading` 状态。当数据更新且加载完成后,使用 `setArtifactStore` 将数据推送到 `ai-artifacts` 的全局存储中。 ```typescript useEffect(() => { if (loading) return; setArtifactStore({ artifacts: { default: artifacts as ArtifactType[] }, }); }, [artifacts, loading]); ``` ### 2. 集成渲染引擎 (Web Component)JSX 中使用 `ai-artifacts` 标签。需要提供 `src` (渲染引擎地址)、`store-id` (默认为 `default`) 以及当前选中的 `group-id``version-id````tsx <ai-artifacts src={artifactsUrl} store-id="default" group-id={currentArtifactId?.[0] || ""} version-id={currentArtifactId?.[1] || ""} className="w-full min-h-[400px]"></ai-artifacts> ``` ### 3. 事件处理 (Human-in-the-loop) 监听来自渲染沙箱的 `sendBackToAI` 事件。这通常发生在用户点击“修复”或“修改”按钮时,将相关的错误信息或修改建议传回给 AI```typescript useEffect(() => { const handleSendBackToAI = (data: any) => { onSendBackToAI(data); }; eventCenter.on("sendBackToAI", handleSendBackToAI); return () => { eventCenter.off("sendBackToAI", handleSendBackToAI); }; }, [onSendBackToAI]); ``` ### 4. TypeScript 声明 为了让 React 识别自定义的 Web Component 标签,需要添加类型声明: ```typescript declare module "react" { namespace JSX { interface IntrinsicElements { "ai-artifacts": React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement> & { src?: string; "store-id"?: string; "group-id"?: string; "version-id"?: string; }; } } } ``` ## 配置项 - `artifactsUrl`: 渲染沙箱的 URL 地址,建议通过 `localStorage` 或环境变量进行配置,以便灵活切换(例如:`https://langgraph-artifacts.netlify.app/`)。