react-ai-renderer 0.1.5 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,26 +1,50 @@
1
- # React AI Renderer
1
+ # React AI Renderer - AI 应用的专属渲染器
2
2
 
3
3
  [English](./README_en.md) | 中文
4
4
 
5
- 一个专为 AI 应用程序设计的 React 渲染器,支持流式 Markdown MDX 内容渲染,提供代码高亮、数学公式、Mermaid 图表等增强功能。
5
+ > 一个专为 AI 应用程序设计的 UI 渲染器,可以极大增强 AI 与前端的交互方式。支持流式 JSX/XML 渲染、自定义组件、生命周期钩子,让 AI 输出直接变为交互式 UI。
6
6
 
7
- ## 📋 环境要求
8
7
 
9
- - Node.js 20.x 或更高版本
10
- - React 18.x 或更高版本
8
+ <p align="center">
9
+ <img src="./examples/demo-assets/react-ai-renderer.gif" alt="React AI Renderer Demo" width="800" />
10
+ </p>
11
+ <p align="center"><em>React AI Renderer - 实现 AI 输出到交互式 UI 的无缝转换</em></p>
11
12
 
12
- ## 🌟 特性
13
+ ## 🚀 项目愿景
13
14
 
14
- - **流式渲染**:支持逐步渲染 AI 流式输出的 Markdown/MDX 内容
15
+ AI 应用井喷式爆发的今天,以 Chat Bot 为核心的交互已成为主流。然而,传统的文本化输出方式远远无法满足现代 AI 应用对视觉渲染效果的需求。React AI Renderer 提供了完美的解决方案:
16
+
17
+ ### 传统方式的痛点
18
+
19
+ 1. **等待问题**:LLM 是流式输出的,但 JSON 必须等流结束才能完整交付给前端渲染
20
+ 2. **构建成本高**:构建 JSON 和约定渲染本身成本较高,也容易出错
21
+ 3. **缺乏生命周期管理**:无法在渲染之后触发动作,传统 Markdown 渲染器无法满足复杂交互需求
22
+
23
+ ### React AI Renderer 的解决方案
24
+
25
+ React AI Renderer 彻底解决了上述问题,让 AI 可以直接输出标准的 JSX/XML 语法糖,由前端实时渲染为交互式 UI,同时支持完整的生命周期管理。
26
+
27
+ ## 🌟 核心特性
28
+
29
+ ### ✅ 无缝兼容 React Markdown
30
+ 只需将引入名称从 `react-markdown` 改为 `react-ai-renderer`,即可无感知继承现有能力,零成本迁移。
31
+
32
+ ### ✅ 自定义组件渲染
33
+ 支持基于项目已有的前端 UI 进行渲染,无限拉高产品体验上限,复用现有视觉主题。
34
+
35
+ ### ✅ 真正的流式渲染
36
+ 动态 token 对应动态解析,无需像 JSON 格式那样等待模型输出完毕才能看到视觉效果。
37
+
38
+ ### ✅ 组件生命周期钩子
39
+ 单一组件渲染完毕后可触发下一个事件,轻松实现文件列表+文件内容左右分栏等复杂交互效果。
40
+
41
+ ### ✅ 丰富的内置组件
15
42
  - **AI 推理展示**:内置 Think 组件展示 AI 思考过程
16
43
  - **代码高亮**:支持多种编程语言的代码高亮显示
17
44
  - **数学公式**:使用 KaTeX 渲染数学公式
18
- - **Mermaid 图表**:支持 Mermaid 流程图、时序图等(可选功能)
19
- - **GitHub样式**:使用GitHub风格的Markdown渲染样式
20
- - **自定义组件**:支持用户注册自定义组件和生命周期钩子
21
- - **兼容性**:兼容现代 React 版本,提供 TypeScript 类型定义
45
+ - **Mermaid 图表**:支持流程图、时序图等(可选功能)
22
46
 
23
- ## 📦 安装
47
+ ## 📦 安装使用
24
48
 
25
49
  ```bash
26
50
  npm install react-ai-renderer
@@ -42,51 +66,7 @@ npm install mermaid
42
66
 
43
67
  如果不安装 mermaid,图表将不会渲染,但不会影响其他功能。
44
68
 
45
- ## 🎨 GitHub风格样式
46
-
47
- React AI Renderer 现在支持 GitHub 风格的 Markdown 渲染样式,使渲染的 Markdown 内容具有与 GitHub 上相同的外观和感觉。
48
-
49
- ### 特性
50
-
51
- - GitHub风格的排版和间距
52
- - 代码块的语法高亮
53
- - 表格样式优化
54
- - 链接样式
55
- - 标题样式(包括下划线效果)
56
- - 引用块样式
57
- - 列表样式优化
58
-
59
- ### 使用方法
60
-
61
- 组件会自动应用GitHub样式,无需额外配置:
62
-
63
- ```jsx
64
- import ReactAIRenderer from 'react-ai-renderer';
65
-
66
- function MyComponent() {
67
- const markdownContent = `
68
- # 标题
69
-
70
- 这是一个 **粗体** 文本和 *斜体* 文本。
71
-
72
- \`\`\`javascript
73
- console.log('Hello, World!');
74
- \`\`\`
75
-
76
- | 列1 | 列2 |
77
- |-----|-----|
78
- | 数据1 | 数据2 |
79
- `;
80
-
81
- return <ReactAIRenderer content={markdownContent} />;
82
- }
83
- ```
84
-
85
- 查看 [GITHUB_STYLE_USAGE.md](./GITHUB_STYLE_USAGE.md) 获取更多使用详情。
86
-
87
- ## 🚀 快速开始
88
-
89
- 查看 [examples/example.tsx](./examples/example.tsx) 文件了解完整的使用示例。
69
+ ## 🎯 快速开始
90
70
 
91
71
  ### 基础使用
92
72
 
@@ -94,8 +74,9 @@ console.log('Hello, World!');
94
74
  import ReactAIRenderer from 'react-ai-renderer';
95
75
 
96
76
  const content = `
97
- # 标题
98
- 这是一个段落。
77
+ # 欢迎使用 React AI Renderer
78
+
79
+ 这是一个 **粗体** 文本和 *斜体* 文本。
99
80
 
100
81
  \`\`\`javascript
101
82
  console.log('Hello World');
@@ -107,92 +88,154 @@ function App() {
107
88
  }
108
89
  ```
109
90
 
110
- ### AI 推理展示
91
+ ### AI 流式输出渲染
111
92
 
112
93
  ```tsx
113
94
  import ReactAIRenderer from 'react-ai-renderer';
114
95
 
115
- const content = `
96
+ // 模拟 AI 流式输出内容
97
+ const aiContent = `
116
98
  正在分析用户需求...
117
99
 
118
- 根据分析结果,我建议您使用以下方案:
119
-
120
- 1. 方案A
121
- 2. 方案B
100
+ <Table>
101
+ <TableHeader>
102
+ <TableCell header>产品名称</TableCell>
103
+ <TableCell header>价格</TableCell>
104
+ <TableCell header>库存</TableCell>
105
+ </TableHeader>
106
+ <TableRow>
107
+ <TableCell>iPhone 15</TableCell>
108
+ <TableCell>¥5999</TableCell>
109
+ <TableCell>50</TableCell>
110
+ </TableRow>
111
+ </Table>
122
112
  `;
123
113
 
124
114
  function App() {
125
- return <ReactAIRenderer>{content}</ReactAIRenderer>;
115
+ return <ReactAIRenderer>{aiContent}</ReactAIRenderer>;
126
116
  }
127
117
  ```
128
118
 
129
- ### 自定义组件
119
+ ### 自定义组件与生命周期
130
120
 
131
121
  ```tsx
132
122
  import ReactAIRenderer from 'react-ai-renderer';
133
123
 
134
- const customComponents = {
135
- Button: (props) => <button {...props} style={{ backgroundColor: 'blue', color: 'white' }} />
136
- };
124
+ // 自定义按钮组件
125
+ const Button = ({ onClick, children, style }) => (
126
+ <button
127
+ onClick={onClick}
128
+ style={{
129
+ backgroundColor: 'blue',
130
+ color: 'white',
131
+ padding: '8px 16px',
132
+ border: 'none',
133
+ borderRadius: '4px',
134
+ cursor: 'pointer',
135
+ ...style
136
+ }}
137
+ >
138
+ {children}
139
+ </button>
140
+ );
141
+
142
+ // 组件生命周期钩子
143
+ const componentHandlers = [
144
+ {
145
+ name: 'Button',
146
+ component: Button,
147
+ selfClosing: false,
148
+ onRender: (item, scope) => {
149
+ console.log('Button 组件已渲染完成');
150
+ // 可以在这里触发下一个动作
151
+ // 例如:更新状态、发送请求等
152
+ }
153
+ }
154
+ ];
137
155
 
138
156
  const content = `
139
157
  <Button onClick={() => alert('点击了按钮')}>点击我</Button>
140
158
  `;
141
159
 
142
160
  function App() {
143
- return <ReactAIRenderer components={customComponents}>{content}</ReactAIRenderer>;
161
+ return (
162
+ <ReactAIRenderer
163
+ components={{ Button }}
164
+ componentHandlers={componentHandlers}
165
+ >
166
+ {content}
167
+ </ReactAIRenderer>
168
+ );
144
169
  }
145
170
  ```
146
171
 
147
- ### 图表渲染
148
-
149
- ```tsx
150
- import ReactAIRenderer from 'react-ai-renderer';
151
-
152
- const content = `
153
- \`\`\`mermaid
154
- graph TD
155
- A[开始] --> B[处理]
156
- B --> C[结束]
157
- \`\`\`
158
- `;
159
-
160
- function App() {
161
- return <ReactAIRenderer>{content}</ReactAIRenderer>;
162
- }
163
- ```
164
-
165
- ## 🛠️ API
172
+ ## 🛠️ API 参考
166
173
 
167
174
  ### ReactAIRenderer 组件
168
175
 
169
- 主渲染组件,兼容 ReactMarkdown API。
176
+ 主渲染组件,完全兼容 ReactMarkdown API。
170
177
 
171
178
  Props:
172
179
  - `content`: Markdown/MDX 内容字符串
173
180
  - `scope`: 传递给 MDX 的作用域对象
174
181
  - `components`: 自定义组件映射
175
- - `componentHandlers`: 组件处理器数组
182
+ - `componentHandlers`: 组件处理器数组(支持生命周期钩子)
176
183
  - `children`: 作为内容的子元素(替代 content)
177
184
 
178
- ### Think 组件
185
+ ### 组件生命周期钩子
179
186
 
180
- 用于展示 AI 思考过程的组件。
187
+ 通过 `componentHandlers` 属性可以为组件添加生命周期钩子:
181
188
 
182
- Props:
183
- - `title`: 思考步骤标题
184
- - `children`: 思考内容
189
+ ```tsx
190
+ const componentHandlers = [
191
+ {
192
+ name: 'MyComponent',
193
+ component: MyComponent,
194
+ selfClosing: false,
195
+ onRender: (item, scope) => {
196
+ // 组件渲染完成后的回调
197
+ console.log('组件已渲染:', item);
198
+ }
199
+ }
200
+ ];
201
+ ```
185
202
 
186
- ### ToolCall 组件
203
+ ## 性能优势
187
204
 
188
- 用于展示工具调用过程的组件。
205
+ ### 实时渲染
206
+ - 流式解析,无需等待完整内容
207
+ - 动态组件渲染,提升用户体验
208
+ - 内存优化,避免重复渲染
189
209
 
190
- Props:
191
- - `name`: 工具名称
192
- - `parameters`: 工具参数
193
- - `result`: 工具调用结果
210
+ ### 兼容性保障
211
+ - 完全兼容 React 18+
212
+ - 支持 TypeScript 类型安全
213
+ - 无依赖冲突,轻松集成
214
+
215
+ ## 💡 应用场景
216
+
217
+ ### 1. AI 助手应用
218
+ 让 AI 助手直接输出交互式 UI,提升用户体验
194
219
 
195
- ## 📖 示例
220
+ ### 2. 代码生成工具
221
+ AI 生成的代码可以直接渲染为可交互的组件
222
+
223
+ ### 3. 数据分析报告
224
+ AI 分析结果可直接渲染为图表和表格
225
+
226
+ ### 4. 教育培训系统
227
+ AI 生成的教学内容可直接渲染为交互式课件
228
+
229
+ ### 5. 智能文档系统
230
+ AI 生成的文档可直接渲染为富交互页面
231
+
232
+ ### 6. 低代码平台
233
+ AI 辅助生成界面,直接渲染为可用组件
234
+
235
+ ### 7. 自动化运维
236
+ AI 分析结果可直接渲染为操作界面
237
+
238
+ ## 📖 示例运行
196
239
 
197
240
  运行示例:
198
241
 
@@ -200,7 +243,7 @@ Props:
200
243
  npm run example
201
244
  ```
202
245
 
203
- 然后在浏览器中访问 http://localhost:3000/examples/example.html
246
+ 然后在浏览器中访问 http://localhost:3000
204
247
 
205
248
  ## 🧪 测试
206
249
 
@@ -208,6 +251,79 @@ npm run example
208
251
  npm test
209
252
  ```
210
253
 
254
+ ## 🚀 高级特性
255
+
256
+ ### 流式渲染优化
257
+ React AI Renderer 采用先进的流式解析技术,能够在 AI 模型输出的同时实时渲染内容,无需等待完整输出。
258
+
259
+ ### 组件注册机制
260
+ 支持动态组件注册,可以灵活扩展自定义组件:
261
+
262
+ ```tsx
263
+ const customComponents = {
264
+ MyButton: ({ onClick, children }) => (
265
+ <button onClick={onClick} className="custom-button">
266
+ {children}
267
+ </button>
268
+ )
269
+ };
270
+
271
+ <ReactAIRenderer components={customComponents}>
272
+ {content}
273
+ </ReactAIRenderer>
274
+ ```
275
+
276
+ ### 作用域传递
277
+ 支持向组件传递作用域变量,实现更复杂的数据交互:
278
+
279
+ ```tsx
280
+ const scope = {
281
+ userData: { name: "张三", age: 25 },
282
+ onAction: (data) => console.log("Action triggered:", data)
283
+ };
284
+
285
+ <ReactAIRenderer scope={scope}>
286
+ {content}
287
+ </ReactAIRenderer>
288
+ ```
289
+
290
+ ## 📊 架构设计
291
+
292
+ ### 系统架构图
293
+
294
+ ```mermaid
295
+ graph TD
296
+ A[AI Model] -->|Streaming Output| B[React AI Renderer]
297
+ B -->|Parse JSX/XML| C[MDX Streaming Parser]
298
+ C -->|Component Data| D[Component Renderer]
299
+ D -->|Render Components| E[Custom UI Components]
300
+ D -->|Lifecycle Hooks| F[Event Triggers]
301
+ E --> G[Interactive UI]
302
+ F --> H[Next Actions]
303
+ ```
304
+
305
+ ### 工作流程
306
+
307
+ 1. AI 模型流式输出 JSX/XML 格式的内容
308
+ 2. React AI Renderer 实时接收并解析内容
309
+ 3. MDX Streaming Parser 动态解析组件数据
310
+ 4. Component Renderer 渲染自定义 UI 组件
311
+ 5. 触发生命周期钩子,执行后续动作
312
+
313
+ ## ❓ 常见问题
314
+
315
+ ### Q: React AI Renderer 与 react-markdown 有什么区别?
316
+ A: React AI Renderer 完全兼容 react-markdown,但增加了对 JSX/XML 组件的支持、流式渲染和生命周期钩子等高级功能。
317
+
318
+ ### Q: 如何处理未注册的组件?
319
+ A: 未注册的组件会自动转换为对应的文本表示形式,不会导致页面崩溃。
320
+
321
+ ### Q: 是否支持不同组件库如antd,shadcn等
322
+ A: 是的,React AI Renderer 无组件依赖,你可以使用任意组件库以及自定义组件
323
+
324
+ ### Q: 性能如何优化?
325
+ A: 建议合理使用组件生命周期钩子,避免在渲染过程中执行耗时操作。
326
+
211
327
  ## 📄 许可证
212
328
 
213
329
  MIT