Skip to main content

tdesign-pro-component

This skill should be used when developing or modifying TDesign Pro Components (AIGC/Chat). It provides the ChatEngine architecture, component patterns, AG-UI protocol integration, and Generative UI development guide.

Quellinformationen

Repository
Tencent/tdesign-react
Letzte Quellaktivität
16. März 2026 um 07:15
Erkannte Sprache von SKILL.md
Chinesisch
Sterne
968
Forks
377

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
tdesign-pro-component
description
This skill should be used when developing or modifying TDesign Pro Components (AIGC/Chat). It provides the ChatEngine architecture, component patterns, AG-UI protocol integration, and Generative UI development guide.
# TDesign Pro Component 开发指南(AIGC/Chat) 本技能提供 TDesign AIGC/Chat 组件套件的开发指南,涵盖 ChatEngine 架构、组件开发模式、AG-UI 协议集成和 Generative UI 开发。 ## 触发条件 当用户需要执行以下任务时使用此技能: - 开发或修改 Chat 相关组件 - 集成 ChatEngine 或 AG-UI 协议 - 创建自定义 AI 对话界面 - 实现 Tool Call、Activity 等高级功能 - 使用 Generative UI(json-render / A2UI) - 调试 Chat 组件行为 ## 源码与文档位置 | 资源 | 路径 | |------|------| | **组件源码** | `packages/pro-components/chat/` | | **ChatEngine Agent 指南** | `packages/pro-components/chat/chat-engine/AGENTS.md` | | **架构设计文档** | `packages/pro-components/chat/chat-engine/docs/ARCHITECTURE.md` | | **组件使用文档** | `packages/pro-components/chat/chat-engine/chat-engine.md` | | **示例代码** | `packages/pro-components/chat/chat-engine/_example/` | | **发布包** | `packages/tdesign-react-aigc/` | | **npm 包名** | `@tdesign-react/chat` | ## 1. 组件架构总览 ### 1.1 组件清单 `packages/pro-components/chat/` 导出以下组件: | 组件 | 目录 | 说明 | |------|------|------| | **ChatBot** | `chatbot/` | 开箱即用的聊天机器人组件(ChatEngine + Preset UI) | | **ChatEngine** | `chat-engine/` | 底层对话引擎核心(Headless) | | **ChatMessage** | `chat-message/` | 消息气泡组件 | | **ChatSender** | `chat-sender/` | 消息发送组件 | | **ChatActionbar** | `chat-actionbar/` | 操作栏组件 | | **ChatMarkdown** | `chat-markdown/` | Markdown 渲染组件 | | **ChatThinking** | `chat-thinking/` | 思考过程展示组件 | | **ChatLoading** | `chat-loading/` | 加载状态组件 | | **ChatFilecard** | `chat-filecard/` | 文件卡片组件 | | **Attachments** | `attachments/` | 附件组件 | ### 1.2 两种使用模式 ``` ┌─────────────────────────────────────────────────────┐ │ 开发者选择 │ │ │ │ 方式 A: ChatBot(开箱即用) │ │ ──────────────────── │ │ <ChatBot chatServiceConfig={...} /> │ │ 适合:快速集成,标准对话场景 │ │ │ │ 方式 B: ChatEngine + 原子组件(深度定制) │ │ ──────────────────────────────── │ │ const { chatEngine, messages } = useChat({...}); │ │ <ChatList><ChatMessage /><ChatSender /></ChatList> │ │ 适合:复杂布局,自定义 UI,多步骤 Agent │ └─────────────────────────────────────────────────────┘ ``` ## 2. ChatEngine 核心概念 ### 2.1 核心 Hooks #### useChat — 主 Hook ```typescript import { useChat } from '@tdesign-react/chat'; const { chatEngine, messages, status } = useChat({ chatServiceConfig: { endpoint: '/api/chat', protocol: 'agui', // 推荐: 'agui' | 'default' | 'openclaw' stream: true, onRequest: (params) => ({ ...params, headers: { Authorization: '...' } }), onMessage: (chunk) => ({ /* 自定义解析, protocol='default' 时需要 */ }), onStart: () => {}, onComplete: () => {}, onError: (err) => {}, }, defaultMessages: [], // 初始消息 }); ``` #### useAgentToolcall — 工具调用注册 ```typescript import { useAgentToolcall } from '@tdesign-react/chat'; useAgentToolcall({ name: 'weather_query', // 必须与后端工具名一致 component: WeatherCard, // React 组件, 接收 { args, result, status } subscribeKey: (props) => props.args?.taskId, // 可选: 订阅特定状态 }); ``` #### useAgentActivity — 动态内容注册 ```typescript import { useAgentActivity } from '@tdesign-react/chat'; useAgentActivity({ activityType: 'stock-chart', // 必须与后端 activity type 一致 component: StockChart, // React 组件, 接收 { content } }); ``` #### useAgentState — Agent 状态订阅 ```typescript import { useAgentState } from '@tdesign-react/chat'; const { stateMap, currentStateKey } = useAgentState(); // stateMap['task_1']?.percent → 获取 Agent 任务进度 ``` ### 2.2 支持的协议 | 协议 | `protocol` 值 | 传输方式 | 适用场景 | |------|---------------|---------|----------| | **Default** | `'default'` / 不传 | SSE (HTTP) | 标准 LLM 对话,用户在 `onMessage` 中自行解析 | | **AG-UI** | `'agui'` | SSE (HTTP) | AG-UI 标准协议,自动解析 ToolCall/Activity/State/Thinking | | **OpenClaw** | `'openclaw'` | WebSocket | 双向通信、RPC、设备认证 | ### 2.3 AG-UI 事件体系 使用 `protocol: 'agui'` 时,引擎自动处理以下事件: | 事件类别 | 事件名 | 说明 | |----------|--------|------| | **文本消息** | `TEXT_MESSAGE_START/CONTENT/END` | 流式文本响应 | | **思考过程** | `THINKING_START/CONTENT/END` | AI 思考过程 | | **工具调用** | `TOOL_CALL_START/ARGS/END/RESULT` | Agent 工具使用 | | **动态内容** | `ACTIVITY_START/SNAPSHOT/DELTA/END` | 动态 UI(Charts/Forms) | | **状态同步** | `STATE_SNAPSHOT/STATE_DELTA` | 共享 Agent 状态 | ### 2.4 Generative UI 动态 UI 生成采用 **json-render** 理念,双层架构: - **Catalog(约束层)**:定义 AI 可用组件的 Zod Schema - **Registry(渲染层)**:定义组件的 React 渲染实现 ```typescript import { generateCatalogPrompt, createCustomRegistry, createJsonRenderActivityConfig } from '@tdesign-react/chat'; // 1. 生成系统提示词 const systemPrompt = generateCatalogPrompt(catalog); // 2. 创建组件注册表 const registry = createCustomRegistry({ Button: MyButton, Chart: MyChart }); // 3. 配置 Activity const activityConfig = createJsonRenderActivityConfig({ registry }); ``` 支持的协议: - **json-render**:原生邻接表 Schema(扁平结构),详见 https://json-render.dev/docs - **A2UI**:Google 邻接表 Schema,详见 https://a2ui.org/specification/v0.9-a2ui/ ## 3. 开发工作流 ### 3.1 本地开发 ```bash # 启动 AIGC 组件站点 pnpm dev:aigc # 组件开发目录 packages/pro-components/chat/<component>/ # 示例文件 packages/pro-components/chat/chat-engine/_example/ ``` ### 3.2 构建 ```bash # 构建 AIGC 包 pnpm build:aigc # 产物目录 packages/tdesign-react-aigc/es/ ``` ### 3.3 组件文件结构 ``` packages/pro-components/chat/<component>/ ├── <Component>.tsx # 组件实现 ├── index.ts # 导出 ├── type.ts # 类型定义 ├── defaultProps.ts # 默认 props ├── <component>.md # 组件文档(包含 {{ xxx }} 占位符) ├── style/ # 样式 │ ├── index.js # Less 入口 │ └── css.js # CSS 入口 ├── _example/ # TSX 示例 └── _example-js/ # JSX 示例(自动生成) ``` ### 3.4 文档与示例映射 Pro 组件的文档**不使用** `:: BASE_DOC ::` 双层拼接(区别于基础组件),而是在组件自身的 `<component>.md` 中直接编写全部内容。 **映射规则**:Markdown 中的 `{{ xxx }}` 占位符对应 `_example/xxx.tsx` 文件中默认导出的 React 组件。 ```markdown --- title: ChatEngine 对话引擎 description: 智能体对话底层逻辑引擎 isComponent: true spline: navigation --- ## 快速开始 {{ basic }} ──→ _example/basic.tsx ## AG-UI 协议 {{ agui-basic }} ──→ _example/agui-basic.tsx {{ agui-toolcall }} ──→ _example/agui-toolcall.tsx ``` > 🤖 **AI 索引路径**:要了解某个 Chat 组件的用法: > 1. 读取 `<component>.md` 获取功能说明和示例索引 > 2. 通过 `{{ xxx }}` 定位 `_example/xxx.tsx` 获取可运行示例代码 > 3. `_example/` 中可能包含超出文档引用的辅助文件(如 `components/`、`utils/` 子目录) ## 4. Coding Standards ### 4.1 推荐做法 - ✅ **Prefer Hooks**:使用 `useChat`、`useAgentToolcall` 等,而非直接操作 ChatEngine 实例 - ✅ **Protocol First**:优先使用 `protocol: 'agui'`,自动处理流式解析 - ✅ **Generative UI Safety**:始终使用 Catalog 约束 AI 输出,禁止任意 HTML/JS - ✅ **State via useAgentState**:跨组件状态共享使用 Agent State,而非 prop drilling - ✅ **Slots for Customization**:使用 `messageSlot`、`headerSlot` 等插槽做 UI 定制 ### 4.2 反模式(禁止) - ❌ 不要手动解析 SSE 流(`protocol: 'agui'` 时 SDK 自动处理) - ❌ 不要直接修改 `messages` 状态,使用 `chatEngine.sendUserMessage()`、`chatEngine.setMessages()` - ❌ 不要使用 `dangerouslySetInnerHTML` 渲染 AI 内容,使用内置 Markdown 或 Generative UI - ❌ 不要混用 `protocol: 'agui'` 和自定义 `onMessage`(除非明确需要覆盖特定事件处理) ## 5. 场景指引 ### 5.1 快速开始(基础对话) ```tsx import { useChat, ChatList, ChatMessage, ChatSender } from '@tdesign-react/chat'; const App = () => { const { chatEngine, messages } = useChat({ chatServiceConfig: { endpoint: '/api/chat', stream: true }, }); return ( <> <ChatList> {messages.map(msg => <ChatMessage key={msg.id} message={msg} />)} </ChatList> <ChatSender chatEngine={chatEngine} /> </> ); }; ``` ### 5.2 AG-UI 工具调用(Human-in-the-Loop) ```tsx useAgentToolcall({ name: 'search_flight', component: ({ args, respond }) => ( <FlightForm defaultCity={args.city} onSubmit={(data) => respond(data)} // 将用户输入返回给 Agent /> ), }); ``` ### 5.3 Headless 事件总线 ```tsx chatEngine.eventBus.on(ChatEngineEventType.REQUEST_COMPLETE, (payload) => { logAnalytics(payload); }); ``` ## 6. 参考资源 - **ChatEngine Agent 指南**: `packages/pro-components/chat/chat-engine/AGENTS.md` - **架构文档**: `packages/pro-components/chat/chat-engine/docs/ARCHITECTURE.md` - **更多示例**: `packages/pro-components/chat/chat-engine/_example/` - **AG-UI 协议**: https://docs.ag-ui.com/introduction - **json-render**: https://json-render.dev/docs
Auf GitHub ansehen