OUC NLP双链路闭环设计:基于ooderAgent的LLM+知识库+RAG架构深度解析
本文深入解析 OUC 框架的 NLP 双链路闭环设计,探讨如何在 ooderAgent 架构基础上,通过 LLM、知识库与 RAG 技术的深度融合,实现从自然语言到高质量 UI 代码的确定性转换。
第一章 引言:从自然语言到UI代码的挑战
1.1 行业痛点
在低代码/无代码平台领域,"自然语言生成UI"一直是技术追求的圣杯。然而,传统方案面临三大核心挑战:
┌─────────────────────────────────────────────────────────────────┐
│ 传统方案的核心痛点 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ❌ 理解不确定性:LLM 对业务语义的理解存在歧义 │
│ └─ "设计一个表单" → 可能是数据录入、审批流程、配置面板... │
│ │
│ ❌ 生成不可控:代码生成结果缺乏确定性保证 │
│ └─ 同一输入可能产生截然不同的输出结构 │
│ │
│ ❌ 闭环缺失:缺乏有效的反馈与修正机制 │
│ └─ 生成错误后难以定位和修复 │
│ │
└─────────────────────────────────────────────────────────────────┘
1.2 技术演进路径
阶段1: 模板驱动 阶段2: LLM驱动 阶段3: 双链路闭环
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 预定义模板 │ → │ LLM自由生成 │ → │ 确定性参考 │
│ 参数化配置 │ │ 语义理解 │ │ 闭环验证 │
│ 输出固定 │ │ 输出灵活 │ │ 输出可控 │
│ 扩展困难 │ │ 结果不稳定 │ │ 可追溯可修正 │
└──────────────┘ └──────────────┘ └──────────────┘
1.3 OUC 解决方案概述
OUC(Ooder UI Creator)框架创新性地提出了 双链路闭环设计,通过以下机制解决上述问题:
- 双链路协同:NLP理解链路与代码生成链路并行工作,相互校验
- 确定性参考:为 LLM 提供结构化元数据,消除理解歧义
- 闭环反馈:每一步都可验证、可调整、可回溯
第二章 ooderAgent架构总览
2.1 整体架构
┌─────────────────────────────────────────────────────────────────────────────┐
│ ooderAgent 整体架构 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ 用户交互层 (User Interaction) │ │
│ │ 自然语言输入 → 意图确认 → 配置调整 → 结果预览 → 代码输出 │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ LLM 处理层 (LLM Processing) │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ LLMFactory │ │ LlmService │ │ RAG检索器 │ │ │
│ │ │ 多模型适配 │ │ 意图识别 │ │ 知识增强 │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ 知识库层 (Knowledge Base) │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ 模板知识库 │ │ 元数据知识库 │ │ 案例知识库 │ │ │
│ │ │ L1-L4模板 │ │ NlpModule │ │ 成功案例 │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ 核心引擎层 (Core Engine) │ │
│ │ ┌─────────────────────────────────────────────────────────────┐ │ │
│ │ │ NlpModuleOrchestrator (编排器) │ │ │
│ │ │ 协调双链路工作流,管理上下文状态 │ │ │
│ │ └─────────────────────────────────────────────────────────────┘ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │NlpModule │ │NlpComponent │ │NlpBuild │ │ │
│ │ │Builder │ │Builder │ │Context │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ 输出层 (Output Layer) │ │
│ │ OUC配置 → Java源码 → 动态编译 → JavaScript输出 → 前端渲染 │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
2.2 核心组件职责
| 组件 | 职责 | 关键特性 |
|---|---|---|
| LLMFactory | LLM 模型工厂 | 多模型适配、统一接口、负载均衡 |
| NlpModuleOrchestrator | 编排器 | 流程编排、状态管理、错误处理 |
| NlpModuleBuilder | 模块构建器 | 模块配置、视图组装、样式应用 |
| NlpComponentBuilder | 组件构建器 | 组件实例化、事件绑定、数据映射 |
| NlpBuildContext | 构建上下文 | 流式构建、变量传递、阶段追踪 |
| RagConfig | RAG配置 | 向量检索、相似度阈值、重排序策略 |
2.3 设计理念
┌─────────────────────────────────────────────────────────────────┐
│ ooderAgent 设计理念 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 🎯 确定性优先 │
│ 为 LLM 提供结构化元数据参考,避免模糊理解 │
│ │
│ 🔗 类型安全 │
│ 通过强类型系统(bindClass)确保组件配置的正确性 │
│ │
│ 📐 分层解耦 │
│ 三层架构各司其职,降低耦合度,提升可维护性 │
│ │
│ 🔄 闭环反馈 │
│ 每一步都可验证和调整,支持回溯和修正 │
│ │
│ ⚡ 性能优化 │
│ 并发初始化、延时加载、动态销毁,按需加载知识 │
│ │
└─────────────────────────────────────────────────────────────────┘
第三章 双链路设计核心原理
3.1 双链路架构图
┌─────────────────────────────────────────────────────────────────────────────┐
│ 双链路闭环架构 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ 链路1: NLP理解链路 │ │
│ │ │ │
│ │ 自然语言 ──→ 意图识别 ──→ 场景分解 ──→ 模板选择 ──→ 组件配置 │ │
│ │ │ │ │ │ │ │ │
│ │ ▼ ▼ ▼ ▼ ▼ │ │
│ │ 用户输入 结构化意图 卡片列表 模板ID+配置 组件参数 │ │
│ │ │ │
│ │ 特点: LLM主导、语义理解、需要用户确认 │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ │ 上下文传递 │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ 链路2: 代码生成链路 │ │
│ │ │ │
│ │ 组件配置 ──→ OUC配置 ──→ Java源码 ──→ 动态编译 ──→ JavaScript输出 │ │
│ │ │ │ │ │ │ │ │
│ │ ▼ ▼ ▼ ▼ ▼ │ │
│ │ NlpComponent MethodConfig .java文件 Class加载 可运行JS │ │
│ │ │ │
│ │ 特点: 确定性转换、规则驱动、输出可验证 │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ 闭环反馈机制 │ │
│ │ │ │
│ │ 用户确认 ──→ 配置调整 ──→ 重新生成 ──→ 结果验证 ──→ 输出交付 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
3.2 链路1:NLP理解链路详解
NLP理解链路负责将自然语言转换为结构化的组件配置:
java
// NlpModuleOrchestrator 核心实现
@Slf4j
@Service
public class NlpModuleOrchestrator {
public NlpBuildContext process(String query) {
log.info("开始处理查询: {}", query);
NlpBuildContext context = new NlpBuildContext(query);
// Step 1: 意图识别
context = step1_IntentRecognition(context);
if (context.hasErrors()) return context;
// Step 2: 模块划分
context = step2_ModulePartition(context);
if (context.hasErrors()) return context;
// Step 3: 组件选择
context = step3_ComponentSelection(context);
if (context.hasErrors()) return context;
return context;
}
}
意图识别流程:
用户输入: "设计一个请假审批表单"
│
▼
┌─────────────────────────────────────────┐
│ 意图识别器 (IntentParser) │
├─────────────────────────────────────────┤
│ 1. 术语预处理 (TerminologyService) │
│ 请假 → LeaveRequest │
│ 审批 → ApprovalFlow │
│ │
│ 2. RAG知识增强 │
│ 检索相关模板和案例 │
│ │
│ 3. LLM意图分类 │
│ 意图类型: CREATE_FORM │
│ 置信度: 0.95 │
└─────────────────────────────────────────┘
│
▼
输出: IntentRecognitionResult {
intentType: CREATE_FORM,
entities: {formType: "请假", flowType: "审批"},
confidence: 0.95
}
3.3 链路2:代码生成链路详解
代码生成链路负责将组件配置转换为可运行的代码:
java
// NlpComponentBuilder 核心实现
@Service
public class NlpComponentBuilder {
public Map<String, Object> buildAndGenerateGenJson(
IntentRecognitionResult nlpResult,
String query) {
// Step 4: 构建组件配置
Map<String, Object> componentConfig = createComponentConfig(nlpResult);
// Step 5: 构建模块组件
Map<String, Object> moduleComponent = buildModuleComponent(componentConfig, nlpResult);
// Step 6: 构建UI模块
Map<String, Object> uiModule = buildUIModule(moduleComponent, nlpResult, query);
// Step 7: 生成最终输出
Map<String, Object> genJsonOutput = generateGenJsonOutput(uiModule, nlpResult);
return genJsonOutput;
}
}
代码生成流程:
组件配置: {componentType: "FORM", fields: [...]}
│
▼
┌─────────────────────────────────────────┐
│ 组件构建器 (ComponentBuilder) │
├─────────────────────────────────────────┤
│ 1. 选择组件类型 │
│ FORM → NlpClassFormUIComponent │
│ │
│ 2. 配置数据元 (DataMeta) │
│ CustomFormDataMeta │
│ │
│ 3. 绑定事件 (EventContext) │
│ onSave, onReset, onLoad │
└─────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ 模块构建器 (ModuleBuilder) │
├─────────────────────────────────────────┤
│ 1. 创建 ModuleViewMeta │
│ 2. 应用 ModuleStyleMeta │
│ 3. 注册 ModuleEventMeta │
│ 4. 生成 MethodConfig │
└─────────────────────────────────────────┘
│
▼
输出: ood.Class('LeaveForm', {...})
第四章 六步闭环流程详解
4.1 闭环状态机
┌─────────┐ 解析成功 ┌─────────┐ 分解完成 ┌─────────┐
│ START │ ───────────────▶ │ STEP_1 │ ───────────────▶ │ STEP_2 │
│ (初始) │ │ 意图解析 │ │ 场景分解 │
└─────────┘ └─────────┘ └─────────┘
│ 解析失败 │ 需确认 │
▼ ▼ │
┌─────────┐ ┌─────────┐ │
│ CLARIFY│ │ CONFIRM│ │
│ (澄清) │ │ (确认) │ │
└─────────┘ └─────────┘ │
┌─────────┐ 生成成功 ┌─────────┐ 选择完成 ┌─────────┐
│ DONE │ ◀─────────────── │ STEP_5 │ ◀─────────────── │ STEP_3 │
│ (完成) │ │ 代码生成 │ │ 模板选择 │
└─────────┘ └─────────┘ └─────────┘
▲ ▲ 编译失败 │ │
│ │ │ 需调整 │
│ 输出完成 │ ▼ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
└─────│ STEP_6 │ ◀────│ STEP_4 │ │ ADJUST │ │
│ 结果输出 │ │ OUC配置 │ │ (调整) │ │
└─────────┘ └─────────┘ └─────────┘ │
4.2 六步流程详解
Step 1: 意图解析
┌─────────────────────────────────────────────────────────────────┐
│ Step 1: 意图解析 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 输入: 自然语言描述 │
│ 输出: 结构化意图 (IntentRecognitionResult) │
│ │
│ 处理流程: │
│ 1. 术语预处理: 业务术语 → 技术术语 │
│ 2. RAG知识增强: 检索相关模板和案例 │
│ 3. LLM意图分类: 确定意图类型和置信度 │
│ 4. 实体提取: 提取关键实体和属性 │
│ │
│ 示例: │
│ 输入: "设计一个请假审批表单" │
│ 输出: { │
│ intentType: "CREATE_FORM", │
│ entities: { │
│ formType: "请假", │
│ flowType: "审批", │
│ fields: ["startDate", "endDate", "reason"] │
│ }, │
│ confidence: 0.95 │
│ } │
│ │
└─────────────────────────────────────────────────────────────────┘
Step 2: 场景分解
┌─────────────────────────────────────────────────────────────────┐
│ Step 2: 场景分解 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 输入: 结构化意图 │
│ 输出: 卡片列表 (Card List) │
│ │
│ 处理流程: │
│ 1. 场景类型判断: 单卡片/多卡片/复杂流程 │
│ 2. 卡片划分: 根据业务逻辑拆分功能卡片 │
│ 3. 依赖关系分析: 确定卡片间的数据流 │
│ 4. 布局模式选择: WIZARD/TAB/MASTER_DETAIL/DASHBOARD │
│ │
│ 卡片类型: │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ DATA_MGMT │ │ BUSINESS_ │ │ REPORT │ │
│ │ 数据管理 │ │ FLOW业务流程│ │ 报表分析 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
Step 3: 模板选择
┌─────────────────────────────────────────────────────────────────┐
│ Step 3: 模板选择 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 输入: 卡片配置 │
│ 输出: 模板ID + 配置参数 │
│ │
│ 四级模板体系: │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Level 4: 场景模板 (Scene Template) │ │
│ │ LLM决策度: 高 | 确定性: 低 | 需要分解 │ │
│ │ 示例: OA审批流程、ERP仪表盘、CRM客户管理 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ 分解为卡片 │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Level 3: 业务模板 (Business Template) │ │
│ │ LLM决策度: 中 | 确定性: 中 | 可直接使用 │ │
│ │ 示例: 审批表单、数据报表、用户档案 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ 细化为视图 │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Level 2: 复合模板 (Composite Template) │ │
│ │ LLM决策度: 低 | 确定性: 高 | 标准视图 │ │
│ │ 示例: 左树右表、主从表单、搜索+列表 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ 配置组件 │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Level 1: 原子模板 (Atomic Template) │ │
│ │ LLM决策度: 极低 | 确定性: 极高 | 基础组件 │ │
│ │ 示例: Button、Input、Select、Table、Form、Tree │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
Step 4: OUC配置生成
┌─────────────────────────────────────────────────────────────────┐
│ Step 4: OUC配置生成 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 输入: 模板配置 │
│ 输出: MethodConfig (方法配置) │
│ │
│ 核心转换: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 模板变量 ──→ DataMeta ──→ ModuleViewMeta ──→ 组件实例 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ 组件类型映射: │
│ ┌────────────────┬─────────────────────┬───────────────────┐ │
│ │ 视觉描述 │ DataMeta │ NlpComponent │ │
│ ├────────────────┼─────────────────────┼───────────────────┤ │
│ │ 表单类界面 │ CustomFormDataMeta │ NlpClassFormUI │ │
│ │ 表格/树表界面 │ CustomTreeGridData │ NlpGroupUI │ │
│ │ 层级数据 │ CustomTreeDataMeta │ NlpTreeUI │ │
│ │ 图片/卡片画廊 │ CustomGalleryData │ NlpGalleryUI │ │
│ │ 简单容器 │ CustomBlockDataMeta │ NlpBlockUI │ │
│ └────────────────┴─────────────────────┴───────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
Step 5: 代码生成
┌─────────────────────────────────────────────────────────────────┐
│ Step 5: 代码生成 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 输入: MethodConfig │
│ 输出: Java源码 → JavaScript输出 │
│ │
│ 生成流程: │
│ 1. Java源码生成: 基于 FreeMarker 模板 │
│ 2. 动态编译: JavaCompiler 动态编译 │
│ 3. 类加载: 自定义 ClassLoader 加载 │
│ 4. JSON输出: genJSON() 生成前端配置 │
│ │
│ 输出示例: │
│ ood.Class('LeaveForm', { │
│ extend: 'ood.Module', │
│ components: { │
│ formPanel: { │
│ type: 'ood.FormPanel', │
│ fields: [ │
│ {name: 'startDate', xtype: 'datefield'}, │
│ {name: 'endDate', xtype: 'datefield'}, │
│ {name: 'reason', xtype: 'textarea'} │
│ ] │
│ } │
│ }, │
│ events: { │
│ onSave: function() { /* 保存逻辑 */ } │
│ } │
│ }); │
│ │
└─────────────────────────────────────────────────────────────────┘
Step 6: 结果输出
┌─────────────────────────────────────────────────────────────────┐
│ Step 6: 结果输出 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 输入: 生成的代码 │
│ 输出: 可运行的UI组件 │
│ │
│ 输出验证: │
│ 1. 语法校验: ESLint/语法检查 │
│ 2. 类型检查: TypeScript 类型验证 │
│ 3. 运行时验证: 组件渲染测试 │
│ 4. 用户确认: 预览确认或调整 │
│ │
│ 闭环反馈: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 用户反馈 ──→ 问题分析 ──→ 配置调整 ──→ 重新生成 │ │
│ │ │ │ │ │
│ │ └────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
4.3 上下文管理
java
@Data
public class NlpBuildContext {
private String sessionId;
private String query;
private IntentRecognitionResult intentResult;
private int currentStep = 0;
private String currentPhase = "intent";
// 子上下文
private ComponentContext componentContext;
private EventContext eventContext;
private ActionContext actionContext;
private StyleContext styleContext;
// 执行追踪
private List<String> steps = new ArrayList<>();
private Map<String, Object> variables = new HashMap<>();
private List<String> errors = new ArrayList<>();
private JSONObject metadata = new JSONObject();
// 流式构建方法
public NlpBuildContext withIntent(IntentRecognitionResult result) {
this.intentResult = result;
this.addStep("intent_recognized");
this.currentPhase = "component";
return this;
}
public NlpBuildContext withComponent(ComponentContext component) {
this.componentContext = component;
this.addStep("component_defined");
this.currentPhase = "event";
return this;
}
// 阶段枚举
public enum Phase {
INTENT("intent"),
COMPONENT("component"),
EVENT("event"),
ACTION("action"),
STYLE("style"),
COMPLETE("complete");
}
}
第五章 LLM+知识库+RAG架构
5.1 三级知识库设计
┌─────────────────────────────────────────────────────────────────────────────┐
│ 三级知识库架构 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ L1: 模板元知识库 (Template Meta) │ │
│ ├─────────────────────────────────────────────────────────────────────┤ │
│ │ 内容: 模板索引、关键词、适用场景、输入输出类型 │ │
│ │ 格式: JSON + 向量嵌入 │ │
│ │ 用途: 快速检索、模板匹配 │ │
│ │ │ │
│ │ 示例: │ │
│ │ { │ │
│ │ "templateId": "form-basic", │ │
│ │ "name": "基础表单模板", │ │
│ │ "keywords": ["form", "表单", "编辑", "单条"], │ │
│ │ "applicableScenarios": ["数据录入", "详情编辑"], │ │
│ │ "embedding": [0.1, 0.2, ...] │ │
│ │ } │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ L2: 模板内容知识库 (Template Content) │ │
│ ├─────────────────────────────────────────────────────────────────────┤ │
│ │ 内容: 代码模式、组件结构、事件定义、方法签名 │ │
│ │ 格式: 结构化代码片段 │ │
│ │ 用途: 代码生成、变量填充 │ │
│ │ │ │
│ │ 示例: │ │
│ │ { │ │
│ │ "templateId": "form-basic", │ │
│ │ "codePattern": "ood.Class('${className}', {...})", │ │
│ │ "structure": { │ │
│ │ "baseClass": "ood.Module", │ │
│ │ "components": ["FormLayout", "FormField"], │ │
│ │ "events": ["onLoad", "onSave"] │ │
│ │ } │ │
│ │ } │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ L3: 成功案例知识库 (Success Cases) │ │
│ ├─────────────────────────────────────────────────────────────────────┤ │
│ │ 内容: 输入-输出案例对、用户反馈、质量评分 │ │
│ │ 格式: 案例记录 + 向量嵌入 │ │
│ │ 用途: 案例参考、质量优化、持续学习 │ │
│ │ │ │
│ │ 示例: │ │
│ │ { │ │
│ │ "caseId": "leave-request-form", │ │
│ │ "input": { │ │
│ │ "description": "请假单表单", │ │
│ │ "fields": ["startDate", "endDate", "reason"] │ │
│ │ }, │ │
│ │ "output": { │ │
│ │ "templateId": "form-basic", │ │
│ │ "generatedCode": "ood.Class('LeaveForm', ...)" │ │
│ │ }, │ │
│ │ "feedback": {"success": true, "userRating": 5} │ │
│ │ } │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
5.2 RAG检索增强
java
/**
* RAG配置
* 检索增强生成的配置参数
*/
public class RagConfig implements Serializable {
// 是否启用RAG
private boolean enabled = true;
// 嵌入模型
private String embeddingModel = "text-embedding-3-large";
// 分块大小
private int chunkSize = 500;
// 分块重叠大小
private int chunkOverlap = 50;
// 检索策略: VECTOR/KEYWORD/HYBRID
private SearchStrategy searchStrategy = SearchStrategy.HYBRID;
// Top-K检索数量
private int topK = 5;
// 相似度阈值
private double similarityThreshold = 0.7;
// 是否启用重排序
private boolean rerankEnabled = true;
// 重排序模型
private String rerankModel = "bge-reranker-base";
// 是否启用术语预处理
private boolean terminologyPreprocess = true;
}
5.3 RAG检索流程
用户查询: "设计一个请假审批表单"
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ Step 1: 术语预处理 │
├─────────────────────────────────────────────────────────────────┤
│ 请假 → LeaveRequest │
│ 审批 → ApprovalFlow │
│ 表单 → Form │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ Step 2: 向量嵌入 │
├─────────────────────────────────────────────────────────────────┤
│ 查询文本 → Embedding模型 → 向量表示 │
│ "LeaveRequest ApprovalFlow Form" → [0.12, 0.34, 0.56, ...] │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ Step 3: 相似度检索 │
├─────────────────────────────────────────────────────────────────┤
│ 向量数据库检索 (HYBRID策略): │
│ ├─ 向量检索: Cosine Similarity │
│ ├─ 关键词检索: BM25 │
│ └─ 混合排序: RRF (Reciprocal Rank Fusion) │
│ │
│ Top-K 结果: │
│ 1. form-approval (相似度: 0.95) │
│ 2. form-basic (相似度: 0.88) │
│ 3. workflow-form (相似度: 0.82) │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ Step 4: 重排序 │
├─────────────────────────────────────────────────────────────────┤
│ 使用 bge-reranker-base 对结果重排序: │
│ 1. form-approval (重排分数: 0.92) ← 最佳匹配 │
│ 2. workflow-form (重排分数: 0.85) │
│ 3. form-basic (重排分数: 0.78) │
└─────────────────────────────────────────────────────────────────┘
│
▼
输出: 最佳模板 form-approval + 相关知识块
5.4 知识块结构
java
/**
* 知识块
* 表示从知识库检索到的一段知识
*/
public class KnowledgeChunk implements Serializable {
// 知识块ID
private String chunkId;
// 内容
private String content;
// 来源文档ID
private String sourceId;
// 来源文档标题
private String sourceTitle;
// 相似度分数
private double similarityScore;
// 知识类型: DOCUMENT/CODE/ANNOTATION/CONFIG/EXAMPLE
private KnowledgeType type;
// 元数据
private Map<String, Object> metadata;
}
5.5 Function Call优化
传统方式 vs RAG优化方式:
传统方式 (6步Function Call):
┌─────────────────────────────────────────────────────────────────┐
│ analyze_requirement → select_components → design_events → │
│ generate_styles → compose_layout → generate_code │
│ │
│ 问题: │
│ - 调用次数多,成本高 │
│ - 每步都可能出错,累积误差 │
│ - 难以追踪和调试 │
└─────────────────────────────────────────────────────────────────┘
RAG优化方式 (3步Function Call):
┌─────────────────────────────────────────────────────────────────┐
│ retrieve_template → fill_variables → generate_code │
│ │
│ 优势: │
│ - 调用次数减少50% │
│ - 知识增强,准确性更高 │
│ - 流程简化,易于调试 │
└─────────────────────────────────────────────────────────────────┘
优化后的Function定义:
java
// Function 1: 检索最佳模板
LlmFunctionCall.retrieveTemplate()
.name("retrieve_template")
.description("根据用户需求检索最佳代码模板")
.parameters(Map.of(
"query", "用户需求描述",
"context", "上下文信息",
"top_k", 3
));
// Function 2: 填充模板变量
LlmFunctionCall.fillTemplateVariables()
.name("fill_template_variables")
.description("根据模板结构填充变量值")
.parameters(Map.of(
"template_id", "选中的模板ID",
"variables", "模板变量值映射"
));
// Function 3: 生成最终代码
LlmFunctionCall.generateFinalCode()
.name("generate_final_code")
.description("生成最终可编译的OOD代码")
.parameters(Map.of(
"template_id", "模板ID",
"filled_variables", "已填充的变量"
));
第六章 NlpModule元数据体系
6.1 三层架构设计
┌─────────────────────────────────────────────────────────────────┐
│ LLM/NLP Processing Layer (第1层) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ LLMFactory - 多模型适配 │ │
│ │ NlpComponentConverter - 组件转换 │ │
│ │ SkillsBridge - 技能桥接 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ↓ │
├─────────────────────────────────────────────────────────────────┤
│ DataMeta Layer (第2层 - 桥接层) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ CustomDataMeta (基类) - 数据元基类 │ │
│ │ 组件特定的 DataMeta - 表单/表格/树等 │ │
│ │ bindClass 强类型机制 - 三级优先级绑定 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ↓ │
├─────────────────────────────────────────────────────────────────┤
│ ModuleMeta Layer (第3层 - 核心层) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ CustomModuleMeta - 模块元数据 │ │
│ │ ModuleViewMeta - 视图元数据 │ │
│ │ ModuleStyleMeta - 样式元数据 │ │
│ │ ModuleEventMeta - 事件元数据 │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
6.2 组件类型映射表
| 视觉描述 | DataMeta | ModuleViewType | NlpComponent |
|---|---|---|---|
| 表单类界面 | CustomFormDataMeta | FORMCONFIG | NlpClassFormUIComponent |
| 表格/树表界面 | CustomTreeGridDataMeta | GRIDCONFIG | NlpGroupUIComponent |
| 层级数据 | CustomTreeDataMeta | TREECONFIG | NlpTreeUIComponent |
| 图片/卡片画廊 | CustomGalleryDataMeta | GALLERYCONFIG | NlpGalleryUIComponent |
| 简单容器 | CustomBlockDataMeta | BLOCKCONFIG | NlpBlockUIComponent |
| 灵活容器 | CustomDivDataMeta | DIVCONFIG | NlpDivUIComponent |
| 分组元素 | CustomGroupDataMeta | GROUPCONFIG | NlpGroupUIComponent |
| 自定义布局 | CustomLayoutDataMeta | LAYOUTCONFIG | NlpCustomLayoutUIComponent |
| 面板容器 | CustomPanelDataMeta | PANELCONFIG | NlpPanelUIComponent |
6.3 强类型机制 (bindClass)
┌─────────────────────────────────────────────────────────────────┐
│ bindClass 三级优先级机制 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 优先级1: 字段级绑定 (最高优先级) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ @FieldAnnotation(bindClass = UserDTO.class) │ │
│ │ private String userName; │ │
│ │ │ │
│ │ 效果: 该字段使用 UserDTO 进行类型校验和转换 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ 优先级2: 组件级绑定 (中等优先级) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ @FormViewAnnotation(bindClass = UserDTO.class) │ │
│ │ public class UserForm { ... } │ │
│ │ │ │
│ │ 效果: 整个表单组件使用 UserDTO 作为数据模型 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ 优先级3: 模块级绑定 (默认优先级) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ @ModuleAnnotation(bindClass = BaseEntity.class) │ │
│ │ public class UserModule { ... } │ │
│ │ │ │
│ │ 效果: 整个模块默认使用 BaseEntity 作为基类 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
6.4 EventContext事件上下文
java
@Data
public class EventContext extends BaseContext {
private String eventKey;
private String eventName;
private String desc;
private String eventReturn;
private String script;
private List<ActionContext> actions = new ArrayList<>();
private String enumClassName;
private String enumValue;
// 预定义事件工厂方法
public static EventContext treeGridEvent(TreeGridEventEnum event) { ... }
public static EventContext formEvent(CustomFormEvent event) { ... }
public static EventContext treeEvent(TreeViewEventEnum event) { ... }
// 默认事件配置
public static Map<String, List<String>> getDefaultEventsByComponent(String componentType) {
switch (componentType.toLowerCase()) {
case "treegrid":
case "gallery":
eventTypes.put("row", toStringList(TreeGridEventEnum.onDblclickRow));
eventTypes.put("cmd", toStringList(TreeGridEventEnum.onCmd));
break;
case "tree":
eventTypes.put("content", toStringList(TreeViewEventEnum.onGetContent, TreeViewEventEnum.onRender));
eventTypes.put("select", toStringList(TreeViewEventEnum.onItemSelected, TreeViewEventEnum.onClick));
break;
case "form":
eventTypes.put("save", toStringList(CustomFormEvent.SAVE));
eventTypes.put("reset", toStringList(CustomFormEvent.RESET));
break;
}
return eventTypes;
}
}
第七章 实践案例与性能优化
7.1 典型场景案例
案例:请假审批表单
用户输入: "设计一个请假审批表单,包含开始日期、结束日期、请假原因字段"
┌─────────────────────────────────────────────────────────────────┐
│ 处理流程 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Step 1: 意图解析 │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 意图类型: CREATE_FORM │ │
│ │ 实体: { │ │
│ │ formType: "请假", │ │
│ │ flowType: "审批", │ │
│ │ fields: ["startDate", "endDate", "reason"] │ │
│ │ } │ │
│ │ 置信度: 0.95 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Step 2: 场景分解 │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 卡片类型: BUSINESS_FLOW │ │
│ │ 布局模式: WIZARD (向导式) │ │
│ │ 卡片列表: [ │ │
│ │ {type: "FORM", name: "请假申请"}, │ │
│ │ {type: "APPROVAL", name: "审批流程"} │ │
│ │ ] │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Step 3: 模板选择 │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ RAG检索: form-approval (相似度: 0.95) │ │
│ │ 模板级别: L3 业务模板 │ │
│ │ 组件映射: CustomFormDataMeta → NlpClassFormUIComponent │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Step 4: OUC配置生成 │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ DataMeta: CustomFormDataMeta │ │
│ │ ViewType: FORMCONFIG │ │
│ │ Events: [onSave, onReset, onLoad] │ │
│ │ bindClass: LeaveRequestDTO │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Step 5: 代码生成 │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 输出: │ │
│ │ ood.Class('LeaveForm', { │ │
│ │ extend: 'ood.Module', │ │
│ │ components: { │ │
│ │ formPanel: { │ │
│ │ type: 'ood.FormPanel', │ │
│ │ fields: [ │ │
│ │ {name: 'startDate', xtype: 'datefield', │ │
│ │ label: '开始日期'}, │ │
│ │ {name: 'endDate', xtype: 'datefield', │ │
│ │ label: '结束日期'}, │ │
│ │ {name: 'reason', xtype: 'textarea', │ │
│ │ label: '请假原因'} │ │
│ │ ] │ │
│ │ } │ │
│ │ }, │ │
│ │ events: { │ │
│ │ onSave: function() { │ │
│ │ // 提交审批逻辑 │ │
│ │ } │ │
│ │ } │ │
│ │ }); │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Step 6: 结果输出 │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 验证: ✓ 语法正确 │ │
│ │ 验证: ✓ 类型安全 │ │
│ │ 预览: 渲染成功 │ │
│ │ 用户确认: ✓ 满意 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
7.2 性能优化指标
| 指标 | 优化前 | 优化后 | 提升 |
|---|---|---|---|
| 代码生成时间 | 10s | 3s | 70%↓ |
| LLM调用次数 | 6次 | 3次 | 50%↓ |
| Token消耗 | ~8000 | ~3000 | 62%↓ |
| 编译成功率 | 85% | 98% | 15%↑ |
| 模板匹配准确率 | 60% | 90% | 50%↑ |
| 初始加载时间 | ~500ms | ~100ms | 80%↓ |
7.3 优化策略
┌─────────────────────────────────────────────────────────────────┐
│ 性能优化策略 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 1. 知识库压缩 │
│ 标准压缩: ~70% (50KB → 15KB) │
│ 超级压缩: ~85% (50KB → 8KB) │
│ 按需加载: 只加载需要的模块 │
│ │
│ 2. 向量检索优化 │
│ 混合检索: VECTOR + KEYWORD │
│ 重排序: bge-reranker-base │
│ 缓存: Redis 热点模板缓存 │
│ │
│ 3. 代码生成优化 │
│ 并发初始化: 树形组件并发初始化子树 │
│ 延时加载: 大数据集延时加载 │
│ 动态销毁: 不需要的组件动态销毁 │
│ │
│ 4. 闭环优化 │
│ 多层容错: 输入校验 → 模板回退 → 生成重试 → 人工介入 │
│ 结果缓存: Hash-based 缓存生成结果 │
│ 增量编译: 只编译变更部分 │
│ │
└─────────────────────────────────────────────────────────────────┘
第八章 总结与展望
8.1 核心价值
┌─────────────────────────────────────────────────────────────────┐
│ OUC 双链路闭环设计核心价值 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 🎯 确定性保证 │
│ 通过结构化元数据和强类型系统,确保生成结果的可预测性 │
│ │
│ 🔄 闭环可控 │
│ 六步闭环流程,每一步都可验证、可调整、可回溯 │
│ │
│ 🧠 知识增强 │
│ 三级知识库 + RAG检索,为LLM提供丰富的上下文参考 │
│ │
│ ⚡ 高效生成 │
│ Function Call优化,调用次数减少50%,生成时间减少70% │
│ │
│ 🔒 类型安全 │
│ bindClass三级优先级机制,确保数据绑定的正确性 │
│ │
└─────────────────────────────────────────────────────────────────┘
8.2 技术亮点
| 技术点 | 创新点 |
|---|---|
| 双链路设计 | NLP理解链路与代码生成链路并行协同 |
| 六级模板体系 | L1-L4模板分级,平衡灵活性与确定性 |
| RAG增强 | 混合检索 + 重排序,模板匹配准确率90%+ |
| 强类型机制 | bindClass三级优先级,类型安全保障 |
| 闭环状态机 | 六步闭环,支持澄清/确认/调整/回退 |
8.3 未来方向
┌─────────────────────────────────────────────────────────────────┐
│ 未来发展方向 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 📈 短期目标 (1-3个月) │
│ - 知识库持续扩充,覆盖更多业务场景 │
│ - RAG检索精度优化,引入更多重排序策略 │
│ - 性能监控体系完善,实时追踪生成质量 │
│ │
│ 🚀 中期目标 (3-6个月) │
│ - 多模态输入支持(语音、图片、手绘草图) │
│ - 智能推荐系统,基于用户历史优化模板选择 │
│ - 协作编辑功能,支持团队协同开发 │
│ │
│ 🌟 长期愿景 (6-12个月) │
│ - 自适应学习系统,从用户反馈中持续学习 │
│ - 跨平台代码生成,支持 React/Vue/Angular 等多框架 │
│ - AI辅助测试,自动生成测试用例和验证脚本 │
│ │
└─────────────────────────────────────────────────────────────────┘
附录:架构图汇总
A.1 整体架构图
┌─────────────────────────────────────────────────────────────────────────────┐
│ ooderAgent 整体架构 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ 用户交互层: 自然语言输入 → 意图确认 → 配置调整 → 结果预览 → 代码输出 │
│ │
│ LLM处理层: LLMFactory → LlmService → RAG检索器 → 知识增强 │
│ │
│ 知识库层: 模板知识库(L1-L4) + 元数据知识库 + 案例知识库 │
│ │
│ 核心引擎层: NlpModuleOrchestrator → Builder → Context → Converter │
│ │
│ 输出层: OUC配置 → Java源码 → 动态编译 → JavaScript输出 → 前端渲染 │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
A.2 双链路闭环图
┌─────────────────────────────────────────────────────────────────────────────┐
│ 双链路闭环架构 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ 链路1 (NLP理解): 自然语言 → 意图识别 → 场景分解 → 模板选择 → 组件配置 │
│ │
│ 链路2 (代码生成): 组件配置 → OUC配置 → Java源码 → 编译 → JS输出 │
│ │
│ 闭环反馈: 用户确认 → 配置调整 → 重新生成 → 结果验证 → 输出交付 │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
作者 : ooder
日期 : 2026-03-17
版本 : v1.0
关键词: OUC、NLP、双链路、闭环设计、LLM、RAG、知识库、ooderAgent