
最近在研究鱼皮大佬的项目零代码应用生成平台,对于项目模式自动决策很感兴趣,能自动根据用户的需求自动确定前端该用那种模式

以下是借助cursor的回答:
codeGenType
自动确定机制详解
1. 整体流程
codeGenType
的自动确定是通过 AI 智能路由服务 实现的,整个流程如下:
用户输入提示词 → AI 路由服务分析 → 自动选择生成类型 → 保存到数据库 → 前端显示
2. 核心组件
2.1 AI 路由服务接口
src/main/java/com/yupi/yuaicodemother/ai/AiCodeGenTypeRoutingService.java
java
@SystemMessage(fromResource = "prompt/codegen-routing-system-prompt.txt")
CodeGenTypeEnum routeCodeGenType(String userPrompt);
2.2 路由服务工厂
java:src/main/java/com/yupi/yuaicodemother/ai/AiCodeGenTypeRoutingServiceFactory.java
public AiCodeGenTypeRoutingService createAiCodeGenTypeRoutingService() {
ChatModel chatModel = SpringContextUtil.getBean("routingChatModelPrototype", ChatModel.class);
return AiServices.builder(AiCodeGenTypeRoutingService.class)
.chatModel(chatModel)
.build();
}
3. 自动确定时机
codeGenType
在 应用创建时 自动确定,具体在 AppServiceImpl.createApp()
方法中:
src/main/java/com/yupi/yuaicodemother/service/impl/AppServiceImpl.java
java
@Override
public Long createApp(AppAddRequest appAddRequest, User loginUser) {
// ... 参数校验和对象构造 ...
// 使用 AI 智能选择代码生成类型(多例模式)
AiCodeGenTypeRoutingService aiCodeGenTypeRoutingService =
aiCodeGenTypeRoutingServiceFactory.createAiCodeGenTypeRoutingService();
CodeGenTypeEnum selectedCodeGenType =
aiCodeGenTypeRoutingService.routeCodeGenType(initPrompt);
app.setCodeGenType(selectedCodeGenType.getValue());
// ... 保存到数据库 ...
}
4. AI 决策逻辑
AI 路由服务基于系统提示词进行决策:
src/main/resources/prompt/codegen-routing-system-prompt.txt
txt
你是一个专业的代码生成方案路由器,需要根据用户需求返回最合适的代码生成类型。
可选的代码生成类型:
1. HTML - 适合简单的静态页面,单个 HTML 文件,包含内联 CSS 和 JS
2. MULTI_FILE - 适合简单的多文件静态页面,分离 HTML、CSS、JS 代码
3. VUE_PROJECT - 适合复杂的现代化前端项目
判断规则:
- 如果用户需求简单,只需要一个展示页面,选择 HTML
- 如果用户需要多个页面但不涉及复杂交互,选择 MULTI_FILE
- 如果用户需求复杂,涉及多页面、复杂交互、数据管理等,选择 VUE_PROJECT
5. 生成类型枚举
系统支持三种代码生成类型:
java:src/main/java/com/yupi/yuaicodemother/model/enums/CodeGenTypeEnum.java
public enum CodeGenTypeEnum {
HTML("原生 HTML 模式", "html"),
MULTI_FILE("原生多文件模式", "multi_file"),
VUE_PROJECT("Vue 工程模式", "vue_project");
}
6. 前端显示
前端通过 formatCodeGenType
函数格式化显示:
yu-ai-code-mother-frontend/src/utils/codeGenTypes.ts
typescript
export const formatCodeGenType = (type: string | undefined): string => {
if (!type) return '未知类型'
const config = CODE_GEN_TYPE_CONFIG[type as CodeGenTypeEnum]
return config ? config.label : type
}
7. 工作流程示例
7.1 简单需求 → HTML 类型
arduino
用户输入:"做一个简单的个人介绍页面"
AI 分析:简单展示页面,无复杂交互
决策结果:HTML
7.2 中等需求 → MULTI_FILE 类型
arduino
用户输入:"做一个公司官网,需要首页、关于我们、联系我们三个页面"
AI 分析:多页面但相对简单
决策结果:MULTI_FILE
7.3 复杂需求 → VUE_PROJECT 类型
arduino
用户输入:"做一个电商管理系统,包含用户管理、商品管理、订单管理,需要路由和状态管理"
AI 分析:复杂业务逻辑,需要现代化框架
决策结果:VUE_PROJECT
8. 容错机制
如果 AI 路由失败,系统会使用默认类型:
src/main/java/com/yupi/yuaicodemother/langgraph4j/node/RouterNode.java
java
try {
generationType = routingService.routeCodeGenType(context.getOriginalPrompt());
log.info("AI智能路由完成,选择类型: {} ({})", generationType.getValue(), generationType.getText());
} catch (Exception e) {
log.error("AI智能路由失败,使用默认HTML类型: {}", e.getMessage());
generationType = CodeGenTypeEnum.HTML; // 默认使用 HTML 类型
}
9. 技术特点
- AI 驱动:基于大语言模型的智能决策
- 实时分析:根据用户输入动态确定
- 多例模式:每次创建新的路由服务实例
- 类型安全:完整的 TypeScript 类型支持
- 容错处理:AI 失败时的降级策略
总结
codeGenType
的自动确定是一个 AI 驱动的智能决策系统,它通过分析用户的自然语言描述,自动选择最合适的代码生成策略。这种设计让用户无需关心技术细节,只需要描述需求,系统就能自动选择最优的代码生成方案。