@scenemesh/entity-engine-aimodule 1.0.0

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.
Files changed (109) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +854 -0
  3. package/dist/ai-core-LBGYFGOK.mjs +17 -0
  4. package/dist/ai-core-LBGYFGOK.mjs.map +1 -0
  5. package/dist/ai-core-UGJWSCQN.js +17 -0
  6. package/dist/ai-core-UGJWSCQN.js.map +1 -0
  7. package/dist/ai-core-manager-B3Z34RHA.mjs +9 -0
  8. package/dist/ai-core-manager-B3Z34RHA.mjs.map +1 -0
  9. package/dist/ai-core-manager-W7SSDCG5.js +9 -0
  10. package/dist/ai-core-manager-W7SSDCG5.js.map +1 -0
  11. package/dist/ai-embeddings-5ED5LDXX.mjs +17 -0
  12. package/dist/ai-embeddings-5ED5LDXX.mjs.map +1 -0
  13. package/dist/ai-embeddings-WCXZMMTZ.js +17 -0
  14. package/dist/ai-embeddings-WCXZMMTZ.js.map +1 -0
  15. package/dist/ai-form-renderer-24IWNMX5.js +233 -0
  16. package/dist/ai-form-renderer-24IWNMX5.js.map +1 -0
  17. package/dist/ai-form-renderer-BORQABF2.mjs +233 -0
  18. package/dist/ai-form-renderer-BORQABF2.mjs.map +1 -0
  19. package/dist/ai-provider-3PSCVEEN.mjs +17 -0
  20. package/dist/ai-provider-3PSCVEEN.mjs.map +1 -0
  21. package/dist/ai-provider-WMPMVZFL.js +17 -0
  22. package/dist/ai-provider-WMPMVZFL.js.map +1 -0
  23. package/dist/ai-renderer-7WGGWH5D.mjs +134 -0
  24. package/dist/ai-renderer-7WGGWH5D.mjs.map +1 -0
  25. package/dist/ai-renderer-OILYWAJV.js +134 -0
  26. package/dist/ai-renderer-OILYWAJV.js.map +1 -0
  27. package/dist/ai-settings-DGCFPK3U.js +15 -0
  28. package/dist/ai-settings-DGCFPK3U.js.map +1 -0
  29. package/dist/ai-settings-DTXEAB64.mjs +15 -0
  30. package/dist/ai-settings-DTXEAB64.mjs.map +1 -0
  31. package/dist/ai-structured-EGZ26ZS4.mjs +13 -0
  32. package/dist/ai-structured-EGZ26ZS4.mjs.map +1 -0
  33. package/dist/ai-structured-N2FZLO4A.js +13 -0
  34. package/dist/ai-structured-N2FZLO4A.js.map +1 -0
  35. package/dist/ai-tools-B3R77HZ3.js +19 -0
  36. package/dist/ai-tools-B3R77HZ3.js.map +1 -0
  37. package/dist/ai-tools-JAPVYQGE.mjs +19 -0
  38. package/dist/ai-tools-JAPVYQGE.mjs.map +1 -0
  39. package/dist/ai.module-GAHVCBTP.js +7 -0
  40. package/dist/ai.module-GAHVCBTP.js.map +1 -0
  41. package/dist/ai.module-TTPMTPB3.mjs +7 -0
  42. package/dist/ai.module-TTPMTPB3.mjs.map +1 -0
  43. package/dist/chunk-25C2NRSD.mjs +611 -0
  44. package/dist/chunk-25C2NRSD.mjs.map +1 -0
  45. package/dist/chunk-4JQ7UOXH.js +427 -0
  46. package/dist/chunk-4JQ7UOXH.js.map +1 -0
  47. package/dist/chunk-6IUKES2L.js +290 -0
  48. package/dist/chunk-6IUKES2L.js.map +1 -0
  49. package/dist/chunk-COWPK7XN.mjs +834 -0
  50. package/dist/chunk-COWPK7XN.mjs.map +1 -0
  51. package/dist/chunk-CTEXPMVZ.js +512 -0
  52. package/dist/chunk-CTEXPMVZ.js.map +1 -0
  53. package/dist/chunk-DXQTHA75.js +573 -0
  54. package/dist/chunk-DXQTHA75.js.map +1 -0
  55. package/dist/chunk-DZFQ6I23.js +72 -0
  56. package/dist/chunk-DZFQ6I23.js.map +1 -0
  57. package/dist/chunk-J323UTPE.mjs +650 -0
  58. package/dist/chunk-J323UTPE.mjs.map +1 -0
  59. package/dist/chunk-LHNNALVF.js +834 -0
  60. package/dist/chunk-LHNNALVF.js.map +1 -0
  61. package/dist/chunk-O7SZSMXV.js +1621 -0
  62. package/dist/chunk-O7SZSMXV.js.map +1 -0
  63. package/dist/chunk-OTNOFOVW.js +650 -0
  64. package/dist/chunk-OTNOFOVW.js.map +1 -0
  65. package/dist/chunk-PRIGZEI4.mjs +72 -0
  66. package/dist/chunk-PRIGZEI4.mjs.map +1 -0
  67. package/dist/chunk-SBSZ3IPB.mjs +573 -0
  68. package/dist/chunk-SBSZ3IPB.mjs.map +1 -0
  69. package/dist/chunk-SXPA6SSD.mjs +1621 -0
  70. package/dist/chunk-SXPA6SSD.mjs.map +1 -0
  71. package/dist/chunk-T5A4KAVS.mjs +512 -0
  72. package/dist/chunk-T5A4KAVS.mjs.map +1 -0
  73. package/dist/chunk-TDRKKUNT.mjs +357 -0
  74. package/dist/chunk-TDRKKUNT.mjs.map +1 -0
  75. package/dist/chunk-TJFNODPE.js +357 -0
  76. package/dist/chunk-TJFNODPE.js.map +1 -0
  77. package/dist/chunk-V2SSI3SL.mjs +427 -0
  78. package/dist/chunk-V2SSI3SL.mjs.map +1 -0
  79. package/dist/chunk-X42L6MTY.mjs +290 -0
  80. package/dist/chunk-X42L6MTY.mjs.map +1 -0
  81. package/dist/chunk-YSVMY77H.js +611 -0
  82. package/dist/chunk-YSVMY77H.js.map +1 -0
  83. package/dist/core-ANYRS6EF.mjs +73 -0
  84. package/dist/core-ANYRS6EF.mjs.map +1 -0
  85. package/dist/core-K5K34DCS.js +73 -0
  86. package/dist/core-K5K34DCS.js.map +1 -0
  87. package/dist/core-index.d.mts +1668 -0
  88. package/dist/core-index.d.ts +1668 -0
  89. package/dist/core-index.js +101 -0
  90. package/dist/core-index.js.map +1 -0
  91. package/dist/core-index.mjs +101 -0
  92. package/dist/core-index.mjs.map +1 -0
  93. package/dist/index.d.mts +2911 -0
  94. package/dist/index.d.ts +2911 -0
  95. package/dist/index.js +1177 -0
  96. package/dist/index.js.map +1 -0
  97. package/dist/index.mjs +1177 -0
  98. package/dist/index.mjs.map +1 -0
  99. package/dist/tools-352X7A6X.mjs +366 -0
  100. package/dist/tools-352X7A6X.mjs.map +1 -0
  101. package/dist/tools-YLEX6GNO.js +366 -0
  102. package/dist/tools-YLEX6GNO.js.map +1 -0
  103. package/dist/ui-index.d.mts +627 -0
  104. package/dist/ui-index.d.ts +627 -0
  105. package/dist/ui-index.js +2354 -0
  106. package/dist/ui-index.js.map +1 -0
  107. package/dist/ui-index.mjs +2353 -0
  108. package/dist/ui-index.mjs.map +1 -0
  109. package/package.json +105 -0
package/README.md ADDED
@@ -0,0 +1,854 @@
1
+ # @scenemesh/entity-engine-aimodule
2
+
3
+ [![npm version](https://badge.fury.io/js/%40scenemesh%2Fentity-engine-aimodule.svg)](https://badge.fury.io/js/%40scenemesh%2Fentity-engine-aimodule)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
+
6
+ **Entity Engine AI集成模块** - 为SceneMesh Entity Engine提供完整AI功能集成
7
+
8
+ ## 目录一览
9
+
10
+ 1. [重要说明](#重要说明)
11
+ 2. [核心功能](#核心功能)
12
+ 3. [与 Entity Engine 集成全景示例](#与-entity-engine-集成全景示例)
13
+ 4. [安装与 Peer 依赖](#安装与-peer-依赖)
14
+ 5. [快速上手](#快速上手)
15
+ 6. [Entity Engine 集成详解](#entity-engine-集成详解)
16
+ 7. [AI 工具系统架构](#ai-工具系统架构)
17
+ 8. [使用示例](#使用示例)
18
+ 9. [高级配置](#高级配置)
19
+ 10. [技术架构](#技术架构)
20
+ 11. [API 参考](#api-参考)
21
+ 12. [故障排除](#故障排除)
22
+ 13. [Roadmap](#roadmap)
23
+ 14. [许可证](#许可证)
24
+
25
+ ---
26
+
27
+ ## 📌 重要说明
28
+
29
+ **该包专门为 SceneMesh Entity Engine 框架设计**,提供与Entity Engine深度集成的AI功能。
30
+
31
+ **设计原则:模块化集成、视图控制器驱动、前后端工具混合、类型安全优先。** 适合为基于Entity Engine构建的中后台、数据工作台、领域建模平台添加AI辅助功能。
32
+
33
+ > **如果你不是Entity Engine用户,请使用其他通用AI SDK。**
34
+
35
+ ---
36
+
37
+ ## 🎯 核心功能
38
+
39
+ | 功能 | 说明 |
40
+ | ---- | ---- |
41
+ | AI模块自动注册 | 作为Entity Engine模块自动集成到系统中,无需手动配置 |
42
+ | 表单智能填写 | 通过AI直接操作Entity Engine表单组件,支持字段读取/写入/验证 |
43
+ | 视图控制器工具 | AI可直接调用视图控制器的操作方法,实现表单自动化 |
44
+ | 实体查询工具 | AI可查询和操作Entity Engine实体数据,支持复杂查询条件 |
45
+ | 多提供商支持 | OpenAI、Anthropic、通义千问等AI服务统一接口 |
46
+ | 流式对话 | 基于AI SDK的实时对话能力,支持工具调用 |
47
+ | 结构化生成 | 类型安全的对象生成,基于Zod schema验证 |
48
+ | 前后端工具混合 | 独特的前后端工具调用架构,支持客户端直接操作 |
49
+
50
+ > 目标:用最少的配置为Entity Engine应用添加完整的AI辅助能力。
51
+
52
+ ---
53
+
54
+ ## 2. 与 Entity Engine 集成全景示例
55
+
56
+ ### 服务端模块注册(Next.js App Router)
57
+
58
+ ```typescript
59
+ // app/api/ee/[[...slug]]/route.ts
60
+ import { EnginePrimitiveInitializer, fetchEntityEntranceHandler } from '@scenemesh/entity-engine/server';
61
+ import { EntityAIModule } from '@scenemesh/entity-engine-aimodule';
62
+ import { models, views } from 'src/entity/model-config';
63
+
64
+ // AI模块与Entity Engine一起初始化
65
+ const init = new EnginePrimitiveInitializer({
66
+ models,
67
+ views,
68
+ modules: [new EntityAIModule()] // 注册AI模块
69
+ });
70
+
71
+ const handler = (req: Request) => fetchEntityEntranceHandler({
72
+ request: req,
73
+ endpoint: '/api/ee',
74
+ initializer: init
75
+ });
76
+
77
+ export { handler as GET, handler as POST };
78
+ ```
79
+
80
+ ### 客户端Provider集成
81
+
82
+ ```tsx
83
+ // src/entity/provider/entity-engine-provider-wrapper.tsx
84
+ 'use client';
85
+ import { useRouter } from 'next/navigation';
86
+ import { createEntityEngineProvider } from '@scenemesh/entity-engine';
87
+ import { EntityAIModule } from '@scenemesh/entity-engine-aimodule';
88
+
89
+ export function EntityEngineProviderWrapper({ children }: { children: React.ReactNode }) {
90
+ const router = useRouter();
91
+ const EntityEngineProvider = createEntityEngineProvider({
92
+ suiteAdapter: { suiteName: 'additions', suiteVersion: '1.0.0' },
93
+ router: { navigate: (path, state) => router.push(path) },
94
+ permissionGuard: { checkPermission: async () => true },
95
+ settings: {
96
+ baseUrl: process.env.NEXT_PUBLIC_API_BASE_URL || 'http://localhost:8082',
97
+ endpoint: process.env.NEXT_PUBLIC_API_ENDPOINT || '/api/ee',
98
+ authenticationEnabled: true,
99
+ },
100
+ modules: [new EntityAIModule()], // 客户端也注册AI模块
101
+ });
102
+ return <EntityEngineProvider>{children}</EntityEngineProvider>;
103
+ }
104
+ ```
105
+
106
+ ### 表单自动获得AI功能
107
+
108
+ ```tsx
109
+ // AI模块注册后,任何Entity Engine表单都自动获得AI功能
110
+ import { EntityViewContainer } from '@scenemesh/entity-engine';
111
+
112
+ export function UserForm() {
113
+ return (
114
+ <EntityViewContainer
115
+ modelName="user"
116
+ viewType="form"
117
+ viewName="userFormView"
118
+ // AI功能自动可用 - 表单右上角会出现"智能填表"按钮
119
+ />
120
+ );
121
+ }
122
+ ```
123
+
124
+ ### AI与Entity Engine数据交互
125
+
126
+ ```typescript
127
+ // AI可以通过工具直接查询Entity Engine数据
128
+ const ds = engine.datasourceFactory.getDataSource();
129
+
130
+ // AI工具调用示例:查询用户数据
131
+ await ds.findMany({
132
+ modelName: 'user',
133
+ query: {
134
+ pageIndex: 1,
135
+ pageSize: 10,
136
+ filter: {
137
+ and: [
138
+ { field: 'role', operator: 'eq', value: 'admin' },
139
+ { field: 'active', operator: 'eq', value: true }
140
+ ]
141
+ }
142
+ }
143
+ });
144
+ ```
145
+
146
+ > 完整示例参考:`apps/workbench` 中的Entity Engine + AI模块集成。
147
+
148
+ ---
149
+
150
+ ## 3. 安装与 Peer 依赖
151
+
152
+ ### 安装
153
+
154
+ ```bash
155
+ # npm
156
+ npm install @scenemesh/entity-engine-aimodule
157
+
158
+ # yarn
159
+ yarn add @scenemesh/entity-engine-aimodule
160
+
161
+ # pnpm
162
+ pnpm add @scenemesh/entity-engine-aimodule
163
+ ```
164
+
165
+ ### 必需 Peer 依赖
166
+
167
+ - **@scenemesh/entity-engine** (必需 - 核心框架)
168
+ - **react** >=18 <20
169
+ - **react-dom** >=18 <20
170
+ - **@mantine/core** 8.2.5 (Entity Engine UI套件)
171
+ - **@mantine/modals** 8.2.5
172
+ - **typescript** >=5.0.0
173
+
174
+ ### 可选 Peer(按需)
175
+
176
+ - AI提供商SDK会自动管理,无需手动安装
177
+
178
+ ### 环境变量配置
179
+
180
+ ```bash
181
+ # .env 或 .env.local
182
+ # 至少配置一个AI提供商
183
+ OPENAI_API_KEY=sk-your-openai-key
184
+ # 或者
185
+ ANTHROPIC_API_KEY=sk-ant-your-anthropic-key
186
+ # 或者
187
+ QWEN_API_KEY=sk-your-qwen-key
188
+ ```
189
+
190
+ ---
191
+
192
+ ## 4. 快速上手
193
+
194
+ > 假设你已有基于Entity Engine的应用。
195
+
196
+ ### 最小集成步骤
197
+
198
+ **1. 注册AI模块(3行代码):**
199
+
200
+ ```typescript
201
+ // 在你的Entity Engine初始化代码中
202
+ import { EntityAIModule } from '@scenemesh/entity-engine-aimodule';
203
+
204
+ // 添加到modules数组
205
+ const modules = [new EntityAIModule()];
206
+ ```
207
+
208
+ **2. 配置AI提供商:**
209
+
210
+ ```bash
211
+ # 添加环境变量
212
+ OPENAI_API_KEY=your-api-key
213
+ ```
214
+
215
+ **3. 使用AI功能:**
216
+
217
+ - 表单视图自动出现"智能填表"按钮
218
+ - 点击按钮即可与AI对话,AI可直接操作表单
219
+
220
+ ### Entity Engine集成验证
221
+
222
+ ```typescript
223
+ // 检查AI模块是否正确注册
224
+ const engine = await getEntityEngine();
225
+ const aiModule = engine.moduleRegistry.getModule('entity-engine-ai-module');
226
+ console.log('AI Module registered:', !!aiModule);
227
+
228
+ // 检查AI服务端点
229
+ const response = await fetch('/api/ee/servlet/ai/chat', {
230
+ method: 'POST',
231
+ headers: { 'Content-Type': 'application/json' },
232
+ body: JSON.stringify({
233
+ messages: [{ role: 'user', content: 'Hello' }]
234
+ })
235
+ });
236
+ console.log('AI Servlet available:', response.ok);
237
+ ```
238
+
239
+ ---
240
+
241
+ ## 5. Entity Engine 集成详解
242
+
243
+ ### 自动注册的组件
244
+
245
+ AI模块会向Entity Engine注册以下组件:
246
+
247
+ | 组件 | 注册信息 | 作用 |
248
+ | ---- | -------- | ---- |
249
+ | AI表单渲染器 | `name: 'view-form-tool-1', slotName: 'view-form-tool'` | 在表单中添加"智能填表"按钮 |
250
+ | AI模态渲染器 | `name: 'ai-modal-renderer', slotName: 'ai-modal'` | 提供AI对话界面 |
251
+ | AI统一Servlet | `path: '/ai', methods: ['POST', 'GET']` | 处理所有AI请求 |
252
+
253
+ ### AI Servlet端点映射
254
+
255
+ ```typescript
256
+ // 模块提供的统一AI服务端点
257
+ const endpoints = {
258
+ '/api/ee/servlet/ai/chat': 'AI对话服务(useChat hook兼容)',
259
+ '/api/ee/servlet/ai/completion': '文本补全服务',
260
+ '/api/ee/servlet/ai/object': '结构化对象生成',
261
+ '/api/ee/servlet/ai/embeddings': '嵌入向量生成',
262
+ '/api/ee/servlet/ai/frontend-tool-result': '前端工具结果回传'
263
+ };
264
+ ```
265
+
266
+ ### 视图控制器工具集
267
+
268
+ AI自动获得与Entity Engine视图控制器交互的能力:
269
+
270
+ ```typescript
271
+ // AI可以调用的表单操作工具
272
+ const frontendTools = {
273
+ recordGetValues: '获取表单所有字段值',
274
+ recordSetValues: '设置表单字段值',
275
+ recordGetFieldInfo: '获取字段信息和准确字段名',
276
+ recordResetForm: '重置表单到初始状态',
277
+ recordValidateForm: '验证表单数据'
278
+ };
279
+
280
+ // AI可以调用的后端工具
281
+ const backendTools = {
282
+ entityQuery: 'Entity Engine实体数据查询',
283
+ getWeather: '天气信息查询',
284
+ getLocation: '位置信息获取'
285
+ };
286
+ ```
287
+
288
+ ### 模块生命周期
289
+
290
+ ```typescript
291
+ export class EntityAIModule implements IEntityModule {
292
+ // 1. 配置阶段 - 注册模型、视图、Servlet
293
+ async setupConfig(args: {
294
+ models: IEntityModel[];
295
+ views: IEntityView[];
296
+ servlets: IEntityServlet[];
297
+ }): Promise<void>
298
+
299
+ // 2. 组件阶段 - 注册渲染器和组件
300
+ async setupComponents(args: {
301
+ renderers: IEntityNamedRenderer[];
302
+ widgets: EntityWidget[];
303
+ }): Promise<void>
304
+
305
+ // 3. 数据阶段 - 初始化AI核心服务
306
+ async setupData(args: { entities: ImportEntityData[] }): Promise<void>
307
+ }
308
+ ```
309
+
310
+ ---
311
+
312
+ ## 6. AI 工具系统架构
313
+
314
+ ### 前后端混合工具架构
315
+
316
+ 该模块采用独特的前后端工具混合调用架构:
317
+
318
+ ```text
319
+ AI Assistant
320
+ |
321
+ ┌────┴────┐
322
+ │ AI SDK │ (后端)
323
+ └────┬────┘
324
+ │ 工具调用
325
+ ┌────┴────┐
326
+ │ 工具路由 │
327
+ └─┬─────┬─┘
328
+ │ │
329
+ 前端工具 后端工具
330
+ │ │
331
+ ┌─▼─┐ ┌─▼──┐
332
+ │浏览器││服务器│
333
+ │执行 ││执行 │
334
+ └───┘ └────┘
335
+ ```
336
+
337
+ ### 前端工具执行流程
338
+
339
+ ```typescript
340
+ // 1. AI调用前端工具
341
+ AI: "调用 recordSetValues 工具"
342
+
343
+ // 2. 后端生成 waitId,通过HTTP通知前端
344
+ Backend -> Frontend: POST /api/frontend-tool-execute
345
+ { waitId: 'frontend-recordSetValues', toolName: 'recordSetValues', input: {...} }
346
+
347
+ // 3. 前端执行视图控制器操作
348
+ Frontend: vc.invoke('record.setValues', input)
349
+
350
+ // 4. 前端通过HTTP回传结果
351
+ Frontend -> Backend: POST /api/ee/servlet/ai/frontend-tool-result
352
+ { waitId: 'frontend-recordSetValues', result: '操作成功' }
353
+
354
+ // 5. 后端返回结果给AI
355
+ Backend -> AI: "操作成功"
356
+ ```
357
+
358
+ ### 全局桥接机制
359
+
360
+ ```typescript
361
+ // 前端全局桥接对象
362
+ window.__ENTITY_ENGINE_AI_BRIDGE__ = {
363
+ executeViewControllerTool: async (toolName: string, input: any) => {
364
+ const vc = engine.componentRegistry.getViewController(undefined, undefined, viewId);
365
+ return await vc.invoke(operationMap[toolName], input);
366
+ }
367
+ };
368
+
369
+ // HTTP通信桥接函数
370
+ window.resolveFrontendTool = (waitId: string, result: string) => {
371
+ fetch('/api/ee/servlet/ai/frontend-tool-result', {
372
+ method: 'POST',
373
+ body: JSON.stringify({ waitId, result })
374
+ });
375
+ };
376
+ ```
377
+
378
+ ---
379
+
380
+ ## 7. 使用示例
381
+
382
+ ### 基本AI对话功能
383
+
384
+ ```typescript
385
+ // AI模块注册后,表单自动拥有AI功能
386
+ // 用户点击"智能填表"按钮即可与AI交互
387
+
388
+ // AI可以理解并执行这些指令:
389
+ "帮我填写用户信息,姓名是张三,年龄28岁"
390
+ "获取当前表单的所有字段值"
391
+ "重置表单到初始状态"
392
+ "验证当前表单数据是否正确"
393
+ ```
394
+
395
+ ### 自定义AI工具扩展
396
+
397
+ ```typescript
398
+ // 在AI模块中添加自定义工具
399
+ import { tool } from 'ai';
400
+ import { z } from 'zod';
401
+
402
+ // 定义业务工具
403
+ const businessTool = tool({
404
+ description: '执行特定业务逻辑',
405
+ inputSchema: z.object({
406
+ action: z.string().describe('业务动作'),
407
+ params: z.record(z.any()).describe('业务参数')
408
+ }),
409
+ execute: async ({ action, params }) => {
410
+ // 业务逻辑实现
411
+ const engine = await getEntityEngine();
412
+ const ds = engine.datasourceFactory.getDataSource();
413
+
414
+ if (action === 'createUser') {
415
+ return await ds.create({
416
+ modelName: 'user',
417
+ data: { values: params }
418
+ });
419
+ }
420
+
421
+ return '执行结果';
422
+ }
423
+ });
424
+
425
+ // 工具会自动在AI对话中可用
426
+ ```
427
+
428
+ ### Entity Engine数据查询
429
+
430
+ ```typescript
431
+ // AI可以通过entityQuery工具查询数据
432
+ const queryExamples = {
433
+ // 简单查询
434
+ "查询所有活跃用户": {
435
+ model: 'user',
436
+ query: {
437
+ filter: { field: 'active', operator: 'eq', value: true }
438
+ }
439
+ },
440
+
441
+ // 复杂条件查询
442
+ "查询管理员或年龄大于30的用户": {
443
+ model: 'user',
444
+ query: {
445
+ filter: {
446
+ or: [
447
+ { field: 'role', operator: 'eq', value: 'admin' },
448
+ { field: 'age', operator: 'gt', value: 30 }
449
+ ]
450
+ }
451
+ }
452
+ },
453
+
454
+ // 引用关系查询
455
+ "查询某个产品关联的场景": {
456
+ model: 'scene',
457
+ query: {
458
+ references: {
459
+ fromModelName: 'product',
460
+ fromFieldName: 'rootScene',
461
+ fromObjectId: 'product-123',
462
+ toModelName: 'scene'
463
+ }
464
+ }
465
+ }
466
+ };
467
+ ```
468
+
469
+ ### 表单智能填写示例
470
+
471
+ ```typescript
472
+ // AI可以执行的表单操作示例
473
+ const formOperations = [
474
+ // 获取字段信息
475
+ "AI: 调用 recordGetFieldInfo()",
476
+ "返回: [{ name: 'userName', title: '用户名', type: 'string' }, ...]",
477
+
478
+ // 智能填写
479
+ "用户: 帮我创建一个管理员用户,名字叫李四",
480
+ "AI: 调用 recordSetValues({ values: { userName: '李四', role: 'admin' } })",
481
+ "返回: 字段设置成功",
482
+
483
+ // 表单验证
484
+ "AI: 调用 recordValidateForm()",
485
+ "返回: { valid: true, errors: [] }",
486
+
487
+ // 重置表单
488
+ "用户: 重新开始",
489
+ "AI: 调用 recordResetForm()",
490
+ "返回: 表单已重置"
491
+ ];
492
+ ```
493
+
494
+ ---
495
+
496
+ ## 8. 高级配置
497
+
498
+ ### 自定义AI提供商
499
+
500
+ ```typescript
501
+ // AI Core Manager会自动从环境变量读取配置
502
+ // 支持的提供商:
503
+ const supportedProviders = {
504
+ openai: 'OPENAI_API_KEY',
505
+ anthropic: 'ANTHROPIC_API_KEY',
506
+ qwen: 'QWEN_API_KEY', // 通义千问
507
+ custom: 'CUSTOM_AI_API_KEY'
508
+ };
509
+
510
+ // 自定义提供商配置示例
511
+ const customConfig = {
512
+ id: 'custom-ai',
513
+ name: 'My Custom AI',
514
+ baseURL: 'https://my-ai-service.com/v1',
515
+ apiKey: process.env.CUSTOM_AI_KEY,
516
+ models: ['my-model-v1', 'my-model-v2']
517
+ };
518
+ ```
519
+
520
+ ### AI核心服务配置
521
+
522
+ ```typescript
523
+ // AICoreManager初始化配置
524
+ const coreConfig = {
525
+ providers: {
526
+ autoHealthCheck: true, // 自动健康检查
527
+ fallbackEnabled: true // 启用提供商回退
528
+ },
529
+ tools: {
530
+ enableMCP: true, // 启用MCP工具
531
+ enableDynamic: true // 启用动态工具
532
+ },
533
+ embeddings: {
534
+ defaultModel: 'text-embedding-v1' // 默认嵌入模型
535
+ }
536
+ };
537
+ ```
538
+
539
+ ### 工具系统定制
540
+
541
+ ```typescript
542
+ // 扩展前端工具映射
543
+ const customOperationMap = {
544
+ 'recordGetValues': 'record.getValues',
545
+ 'recordSetValues': 'record.setValues',
546
+ 'customOperation': 'custom.execute', // 自定义操作
547
+ };
548
+
549
+ // 自定义工具执行逻辑
550
+ const executeCustomTool = async (toolName: string, input: any) => {
551
+ const vc = engine.componentRegistry.getViewController(undefined, undefined, viewId);
552
+
553
+ if (toolName === 'customOperation') {
554
+ // 自定义操作逻辑
555
+ return await vc.invoke('custom.execute', input);
556
+ }
557
+
558
+ return await vc.invoke(customOperationMap[toolName], input);
559
+ };
560
+ ```
561
+
562
+ ---
563
+
564
+ ## 9. 技术架构
565
+
566
+ ### 包结构
567
+
568
+ ```
569
+ @scenemesh/entity-engine-aimodule/
570
+ ├── src/
571
+ │ ├── entity-module/ # Entity Engine集成层
572
+ │ │ ├── ai.module.ts # 主模块文件 - IEntityModule实现
573
+ │ │ ├── renderers/ # AI渲染器注册
574
+ │ │ │ ├── ai-form-renderer.tsx # 表单AI按钮渲染器
575
+ │ │ │ └── ai-renderer.tsx # AI模态对话渲染器
576
+ │ │ ├── servlets/ # AI服务端点
577
+ │ │ │ └── ai-servlet.ts # 统一AI Servlet处理器
578
+ │ │ ├── models/ # Entity模型定义
579
+ │ │ └── views/ # Entity视图定义
580
+ │ ├── core/ # AI核心服务
581
+ │ │ ├── ai-core-manager.ts # 核心管理器 - 统一AI功能管理
582
+ │ │ ├── ai-provider.ts # 提供商管理 - 多AI服务商支持
583
+ │ │ ├── ai-tools.ts # 工具集成 - MCP和动态工具
584
+ │ │ ├── ai-embeddings.ts # 嵌入向量服务
585
+ │ │ └── ai-structured.ts # 结构化数据生成
586
+ │ ├── tools/ # 工具定义
587
+ │ │ ├── frontend-tools/ # 前端工具 - 视图控制器操作
588
+ │ │ ├── dynamic-tools/ # 动态工具 - Entity查询等
589
+ │ │ └── static-tools/ # 静态工具 - 天气、位置等
590
+ │ ├── components/ # React组件
591
+ │ │ └── ChatDialog/ # AI对话组件
592
+ │ └── types/ # TypeScript定义
593
+ ```
594
+
595
+ ### 核心类关系
596
+
597
+ ```typescript
598
+ // 主要类和接口
599
+ interface IEntityModule {
600
+ setupConfig(args): Promise<void> // 注册模型、视图、Servlet
601
+ setupComponents(args): Promise<void> // 注册渲染器、组件
602
+ setupData(args): Promise<void> // 初始化数据
603
+ }
604
+
605
+ class EntityAIModule implements IEntityModule {
606
+ private coreManager: AICoreManager // AI核心管理器
607
+ // Entity Engine模块接口实现
608
+ }
609
+
610
+ class AICoreManager {
611
+ aiSDK: AISDKIntegration // AI SDK集成
612
+ providerManagement: AIProviderManagement // 提供商管理
613
+ toolsIntegration: AIToolsIntegration // 工具集成
614
+ embeddingsIntegration: AIEmbeddingsIntegration // 嵌入向量
615
+ }
616
+ ```
617
+
618
+ ### 打包配置
619
+
620
+ ```typescript
621
+ // tsup.config.ts - 三个独立bundle
622
+ export default defineConfig([
623
+ // 主bundle - Entity Engine集成 (Universal)
624
+ { entry: ['src/index.ts'], platform: 'neutral' },
625
+
626
+ // UI bundle - React组件 (Browser)
627
+ { entry: ['src/ui-index.ts'], platform: 'browser', banner: { js: '"use client";' } },
628
+
629
+ // 核心bundle - AI服务 (Node.js/Browser)
630
+ { entry: ['src/core-index.ts'], platform: 'neutral' }
631
+ ]);
632
+ ```
633
+
634
+ ---
635
+
636
+ ## 10. API 参考
637
+
638
+ ### Entity Engine集成API
639
+
640
+ ```typescript
641
+ // AI模块类
642
+ class EntityAIModule implements IEntityModule {
643
+ constructor()
644
+ static getInstance(): EntityAIModule | null
645
+ async setupConfig(args): Promise<void>
646
+ async setupComponents(args): Promise<void>
647
+ async setupData(args): Promise<void>
648
+ }
649
+
650
+ // 模块工厂函数
651
+ async function createEntityAIModule(): Promise<EntityAIModule>
652
+ ```
653
+
654
+ ### AI核心API
655
+
656
+ ```typescript
657
+ // 工厂函数
658
+ async function createaimodule(config?: AIModuleConfig): Promise<AIModule>
659
+ async function createQuickAI(providers?: ProviderConfig[]): Promise<AIModule>
660
+
661
+ // 配置接口
662
+ interface AIModuleConfig {
663
+ providers?: CustomProviderConfig[];
664
+ settings?: Partial<ModelSettings>;
665
+ enableEmbeddings?: boolean;
666
+ enableTools?: boolean;
667
+ }
668
+ ```
669
+
670
+ ### 视图控制器工具API
671
+
672
+ ```typescript
673
+ // 前端工具接口
674
+ interface ViewControllerTools {
675
+ recordGetValues(): Promise<Record<string, any>>
676
+ recordSetValues(values: Record<string, any>): Promise<string>
677
+ recordGetFieldInfo(fieldName?: string): Promise<FieldInfo[]>
678
+ recordResetForm(): Promise<string>
679
+ recordValidateForm(): Promise<ValidationResult>
680
+ }
681
+
682
+ // Entity查询工具
683
+ interface EntityQueryTool {
684
+ execute(options: {
685
+ model: string;
686
+ query: IEntityQuery;
687
+ }): Promise<{ data: IEntityObject[]; count: number }>
688
+ }
689
+ ```
690
+
691
+ ### Servlet API
692
+
693
+ ```typescript
694
+ // AI对话接口
695
+ interface ChatRequest {
696
+ messages: UIMessage[];
697
+ model?: string;
698
+ temperature?: number;
699
+ tools?: boolean;
700
+ }
701
+
702
+ // 结构化生成接口
703
+ interface ObjectRequest {
704
+ prompt: string;
705
+ schema: ZodSchema;
706
+ model?: string;
707
+ }
708
+
709
+ // 前端工具结果接口
710
+ interface FrontendToolResult {
711
+ waitId: string;
712
+ result?: string;
713
+ error?: string;
714
+ timestamp: number;
715
+ }
716
+ ```
717
+
718
+ ---
719
+
720
+ ## 11. 故障排除
721
+
722
+ ### 常见问题诊断
723
+
724
+ **Q: AI按钮没有出现在表单中?**
725
+
726
+ ```typescript
727
+ // 1. 检查AI模块注册
728
+ const engine = await getEntityEngine();
729
+ const modules = engine.moduleRegistry.getAllModules();
730
+ console.log('Registered modules:', modules.map(m => m.info.name));
731
+
732
+ // 2. 检查渲染器注册
733
+ const renderers = engine.componentRegistry.getAllRenderers();
734
+ const aiRenderer = renderers.find(r => r.name === 'view-form-tool-1');
735
+ console.log('AI Form Renderer:', aiRenderer);
736
+
737
+ // 3. 检查环境变量
738
+ console.log('AI Keys configured:', {
739
+ openai: !!process.env.OPENAI_API_KEY,
740
+ anthropic: !!process.env.ANTHROPIC_API_KEY,
741
+ qwen: !!process.env.QWEN_API_KEY
742
+ });
743
+ ```
744
+
745
+ **Q: AI无法操作表单字段?**
746
+
747
+ ```typescript
748
+ // 1. 检查视图控制器
749
+ const vc = engine.componentRegistry.getViewController(undefined, undefined, viewId);
750
+ console.log('View Controller:', vc);
751
+ console.log('View Controller operations:', vc?.describe?.());
752
+
753
+ // 2. 检查字段映射
754
+ const fieldInfo = await vc.invoke('record.getFieldInfo', {});
755
+ console.log('Available fields:', fieldInfo);
756
+
757
+ // 3. 检查前端桥接
758
+ console.log('Frontend bridge:', window.__ENTITY_ENGINE_AI_BRIDGE__);
759
+ ```
760
+
761
+ **Q: 工具调用失败或超时?**
762
+
763
+ ```typescript
764
+ // 1. 检查工具注册
765
+ const coreManager = EntityAIModule.getInstance()?.coreManager;
766
+ console.log('Tools available:', coreManager?.toolsIntegration?.getAllTools?.());
767
+
768
+ // 2. 检查前后端通信
769
+ // 前端监听
770
+ window.addEventListener('beforeunload', () => {
771
+ console.log('Frontend tool wait pool:', frontendToolWaitPool.size);
772
+ });
773
+
774
+ // 3. 检查HTTP端点
775
+ const response = await fetch('/api/ee/servlet/ai/frontend-tool-result', {
776
+ method: 'POST',
777
+ body: JSON.stringify({ waitId: 'test', result: 'test' })
778
+ });
779
+ console.log('Frontend tool endpoint:', response.status);
780
+ ```
781
+
782
+ ### 调试模式
783
+
784
+ ```typescript
785
+ // 1. 启用AI调试日志
786
+ process.env.AI_DEBUG = 'true';
787
+
788
+ // 2. 启用详细工具执行日志
789
+ localStorage.setItem('ai-tools-debug', 'true');
790
+
791
+ // 3. 监控工具调用
792
+ console.log('Tool call:', { toolName, input, timestamp: Date.now() });
793
+ console.log('Tool result:', { result, duration: Date.now() - start });
794
+
795
+ // 4. 检查网络请求
796
+ // 在DevTools Network面板监控:
797
+ // - /api/ee/servlet/ai/chat (AI对话)
798
+ // - /api/ee/servlet/ai/frontend-tool-result (前端工具结果)
799
+ ```
800
+
801
+ ### 性能优化
802
+
803
+ ```typescript
804
+ // 1. 工具调用缓存
805
+ const toolResultCache = new Map();
806
+
807
+ // 2. 减少不必要的重渲染
808
+ const ChatDialogMemo = React.memo(ChatDialog);
809
+
810
+ // 3. 前端工具执行超时设置
811
+ const FRONTEND_TOOL_TIMEOUT = 30000; // 30秒
812
+
813
+ // 4. AI请求去重
814
+ const requestDeduplication = new Set();
815
+ ```
816
+
817
+ ---
818
+
819
+ ## 12. Roadmap
820
+
821
+ | 状态 | 目标 | 说明 |
822
+ | ---- | ---- | ---- |
823
+ | ✅ | Entity Engine模块集成 | 完整的IEntityModule实现 |
824
+ | ✅ | 前后端工具混合调用 | 独特的工具执行架构 |
825
+ | ✅ | 视图控制器直接操作 | AI可直接操作表单组件 |
826
+ | ✅ | 多AI提供商支持 | OpenAI、Anthropic、通义千问 |
827
+ | ⏳ | 工具执行可视化面板 | 调试和监控工具调用过程 |
828
+ | ⏳ | AI辅助视图生成 | 基于模型自动生成视图配置 |
829
+ | ⏳ | 智能查询构建 | 自然语言转换为Entity查询DSL |
830
+ | ⏳ | 批量操作工具 | 支持批量数据处理和导入 |
831
+ | ⏳ | 工作流集成 | 与Entity Engine动作系统集成 |
832
+ | ⏳ | 多模态支持 | 图像、文件上传与AI分析 |
833
+
834
+ 欢迎在 Issue / PR 中提出你的需求和建议。
835
+
836
+ ---
837
+
838
+ ## 13. 许可证
839
+
840
+ MIT License - 详见 [LICENSE](LICENSE) 文件
841
+
842
+ ---
843
+
844
+ ## 🤝 技术支持
845
+
846
+ - 🐛 **问题反馈**: [GitHub Issues](https://github.com/scenemesh/entity-engine-aimodule/issues)
847
+ - 📧 **邮件支持**: contact@scenemesh.com
848
+ - 📖 **Entity Engine文档**: [@scenemesh/entity-engine](https://github.com/scenemesh/entity-engine)
849
+
850
+ ---
851
+
852
+ > **重要提醒**: 该包仅适用于基于SceneMesh Entity Engine框架构建的应用系统。如需通用AI集成方案,请选择其他AI SDK。
853
+
854
+ > Keep building AI-powered data applications with Entity Engine.