@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.
- package/LICENSE +21 -0
- package/README.md +854 -0
- package/dist/ai-core-LBGYFGOK.mjs +17 -0
- package/dist/ai-core-LBGYFGOK.mjs.map +1 -0
- package/dist/ai-core-UGJWSCQN.js +17 -0
- package/dist/ai-core-UGJWSCQN.js.map +1 -0
- package/dist/ai-core-manager-B3Z34RHA.mjs +9 -0
- package/dist/ai-core-manager-B3Z34RHA.mjs.map +1 -0
- package/dist/ai-core-manager-W7SSDCG5.js +9 -0
- package/dist/ai-core-manager-W7SSDCG5.js.map +1 -0
- package/dist/ai-embeddings-5ED5LDXX.mjs +17 -0
- package/dist/ai-embeddings-5ED5LDXX.mjs.map +1 -0
- package/dist/ai-embeddings-WCXZMMTZ.js +17 -0
- package/dist/ai-embeddings-WCXZMMTZ.js.map +1 -0
- package/dist/ai-form-renderer-24IWNMX5.js +233 -0
- package/dist/ai-form-renderer-24IWNMX5.js.map +1 -0
- package/dist/ai-form-renderer-BORQABF2.mjs +233 -0
- package/dist/ai-form-renderer-BORQABF2.mjs.map +1 -0
- package/dist/ai-provider-3PSCVEEN.mjs +17 -0
- package/dist/ai-provider-3PSCVEEN.mjs.map +1 -0
- package/dist/ai-provider-WMPMVZFL.js +17 -0
- package/dist/ai-provider-WMPMVZFL.js.map +1 -0
- package/dist/ai-renderer-7WGGWH5D.mjs +134 -0
- package/dist/ai-renderer-7WGGWH5D.mjs.map +1 -0
- package/dist/ai-renderer-OILYWAJV.js +134 -0
- package/dist/ai-renderer-OILYWAJV.js.map +1 -0
- package/dist/ai-settings-DGCFPK3U.js +15 -0
- package/dist/ai-settings-DGCFPK3U.js.map +1 -0
- package/dist/ai-settings-DTXEAB64.mjs +15 -0
- package/dist/ai-settings-DTXEAB64.mjs.map +1 -0
- package/dist/ai-structured-EGZ26ZS4.mjs +13 -0
- package/dist/ai-structured-EGZ26ZS4.mjs.map +1 -0
- package/dist/ai-structured-N2FZLO4A.js +13 -0
- package/dist/ai-structured-N2FZLO4A.js.map +1 -0
- package/dist/ai-tools-B3R77HZ3.js +19 -0
- package/dist/ai-tools-B3R77HZ3.js.map +1 -0
- package/dist/ai-tools-JAPVYQGE.mjs +19 -0
- package/dist/ai-tools-JAPVYQGE.mjs.map +1 -0
- package/dist/ai.module-GAHVCBTP.js +7 -0
- package/dist/ai.module-GAHVCBTP.js.map +1 -0
- package/dist/ai.module-TTPMTPB3.mjs +7 -0
- package/dist/ai.module-TTPMTPB3.mjs.map +1 -0
- package/dist/chunk-25C2NRSD.mjs +611 -0
- package/dist/chunk-25C2NRSD.mjs.map +1 -0
- package/dist/chunk-4JQ7UOXH.js +427 -0
- package/dist/chunk-4JQ7UOXH.js.map +1 -0
- package/dist/chunk-6IUKES2L.js +290 -0
- package/dist/chunk-6IUKES2L.js.map +1 -0
- package/dist/chunk-COWPK7XN.mjs +834 -0
- package/dist/chunk-COWPK7XN.mjs.map +1 -0
- package/dist/chunk-CTEXPMVZ.js +512 -0
- package/dist/chunk-CTEXPMVZ.js.map +1 -0
- package/dist/chunk-DXQTHA75.js +573 -0
- package/dist/chunk-DXQTHA75.js.map +1 -0
- package/dist/chunk-DZFQ6I23.js +72 -0
- package/dist/chunk-DZFQ6I23.js.map +1 -0
- package/dist/chunk-J323UTPE.mjs +650 -0
- package/dist/chunk-J323UTPE.mjs.map +1 -0
- package/dist/chunk-LHNNALVF.js +834 -0
- package/dist/chunk-LHNNALVF.js.map +1 -0
- package/dist/chunk-O7SZSMXV.js +1621 -0
- package/dist/chunk-O7SZSMXV.js.map +1 -0
- package/dist/chunk-OTNOFOVW.js +650 -0
- package/dist/chunk-OTNOFOVW.js.map +1 -0
- package/dist/chunk-PRIGZEI4.mjs +72 -0
- package/dist/chunk-PRIGZEI4.mjs.map +1 -0
- package/dist/chunk-SBSZ3IPB.mjs +573 -0
- package/dist/chunk-SBSZ3IPB.mjs.map +1 -0
- package/dist/chunk-SXPA6SSD.mjs +1621 -0
- package/dist/chunk-SXPA6SSD.mjs.map +1 -0
- package/dist/chunk-T5A4KAVS.mjs +512 -0
- package/dist/chunk-T5A4KAVS.mjs.map +1 -0
- package/dist/chunk-TDRKKUNT.mjs +357 -0
- package/dist/chunk-TDRKKUNT.mjs.map +1 -0
- package/dist/chunk-TJFNODPE.js +357 -0
- package/dist/chunk-TJFNODPE.js.map +1 -0
- package/dist/chunk-V2SSI3SL.mjs +427 -0
- package/dist/chunk-V2SSI3SL.mjs.map +1 -0
- package/dist/chunk-X42L6MTY.mjs +290 -0
- package/dist/chunk-X42L6MTY.mjs.map +1 -0
- package/dist/chunk-YSVMY77H.js +611 -0
- package/dist/chunk-YSVMY77H.js.map +1 -0
- package/dist/core-ANYRS6EF.mjs +73 -0
- package/dist/core-ANYRS6EF.mjs.map +1 -0
- package/dist/core-K5K34DCS.js +73 -0
- package/dist/core-K5K34DCS.js.map +1 -0
- package/dist/core-index.d.mts +1668 -0
- package/dist/core-index.d.ts +1668 -0
- package/dist/core-index.js +101 -0
- package/dist/core-index.js.map +1 -0
- package/dist/core-index.mjs +101 -0
- package/dist/core-index.mjs.map +1 -0
- package/dist/index.d.mts +2911 -0
- package/dist/index.d.ts +2911 -0
- package/dist/index.js +1177 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1177 -0
- package/dist/index.mjs.map +1 -0
- package/dist/tools-352X7A6X.mjs +366 -0
- package/dist/tools-352X7A6X.mjs.map +1 -0
- package/dist/tools-YLEX6GNO.js +366 -0
- package/dist/tools-YLEX6GNO.js.map +1 -0
- package/dist/ui-index.d.mts +627 -0
- package/dist/ui-index.d.ts +627 -0
- package/dist/ui-index.js +2354 -0
- package/dist/ui-index.js.map +1 -0
- package/dist/ui-index.mjs +2353 -0
- package/dist/ui-index.mjs.map +1 -0
- package/package.json +105 -0
package/README.md
ADDED
|
@@ -0,0 +1,854 @@
|
|
|
1
|
+
# @scenemesh/entity-engine-aimodule
|
|
2
|
+
|
|
3
|
+
[](https://badge.fury.io/js/%40scenemesh%2Fentity-engine-aimodule)
|
|
4
|
+
[](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.
|