概述

本文详细阐述基于 AI Agent 的前端代码生成完整方案,涵盖 A、B、C 三类层层递进的核心工作流,以及配套的 RAG V2.0 检索优化系统。方案通过 DSL(领域特定语言)、模板系统及 RAG 检索技术,实现从业务需求(设计稿、PRD、GUI 配置等)到可直接复用代码的自动化生成,核心目标是提升前端开发效率、降低研发成本,同时保障代码规范性、可维护性与可扩展性。

三类核心工作流各有侧重、层层递进,适配不同复杂度的开发场景:

  • C 类(基础方案):实现“DSL 配置→模板映射→代码生成→工程校验”的基础闭环,是整个方案的核心底座,目前已融合至 B 类工作流,重点阐述其实现原理以支撑后续扩展方案的理解。
  • B 类(扩展方案):在 C 类基础上,新增 JSSlot 组件生成、Blocks 代码组合能力,适配更复杂的页面生码需求,解决基础方案无法覆盖的自定义组件、代码片段集成场景。
  • A 类(高级方案):无需预定义 DSL 模板,支持从 Figma 设计稿(Figma2DSL 转换)或纯文本 PRD 直接生成完整代码,实现“需求→结构→代码”的端到端生成,依赖项目规划师与 RAG_Agent 解决生码幻觉问题。

配套的 RAG V2.0 检索优化系统,作为全方案的支撑核心,将 RAG 从“黑盒能力”升级为“工程化系统”,解决生码过程中的上下文不足、检索不稳定等痛点,为三类工作流提供精准、稳定的检索支撑,进一步提升生码准确率。

一、C 类代码生成(基础方案)

C 类方案是整个 AI Agent 生码体系的基础,核心实现“DSL 配置→模板映射→代码生成→工程校验”的完整闭环,目前已无缝融合至 B 类工作流,此处重点拆解其核心实现原理,为理解后续扩展方案提供支撑。

1.1 工作流输入

输入为图形界面(GUI)生成的标准化 DSL 配置,该配置完整描述业务意图、组件依赖及代码结构,是代码生成的核心依据,无需额外手动补充信息,典型示例如下:

{
  "version": "1.1.0",
  "templateId": "1001",
  "componentRegistry": [
    {
      "package": "@slds/finance-template-market",
      "version": "1.0.0",
      "exportName": "TablePage",
      "main": "src/index.tsx",
      "isDestruct": true,
      "componentName": "TablePage"
    },
    {
      "devMode": "lowCode",
      "componentName": "Page"
    }
  ],
  "pageTree": [
    {
      "componentName": "Page",
      "id": "node_page_root",
      "props": {},
      "hidden": false,
      "isLocked": false,
      "condition": true,
      "children": [
        {
          "componentName": "TablePage",
          "id": "node_table_page",
          "props": {
            "searchFields": [
              { "type": "input", "label": "关键词", "required": false }
            ],
            "operation": [
              { "type": "primary", "name": "新增", "actionType": "button", "buttonType": "primary" }
            ],
            "tableColumns": [
              { "title": "关键词", "type": "input", "ellipsis": false, "sorter": false, "fixed": false },
              {
                "title": "操作",
                "type": "action",
                "ctrlProps": { "action": [{ "label": "查看" }, { "label": "编辑" }, { "label": "删除" }] },
                "fixed": "right"
              }
            ],
            "massTool": {
              "support": true,
              "text": "账单订单",
              "button": [{ "type": "default", "text": "导出", "name": "Export", "actionType": "button" }]
            },
            "enableSearch": true,
            "enableOperation": true,
            "enableRowSelection": false
          },
          "hidden": false,
          "isLocked": false,
          "condition": true
        }
      ]
    }
  ],
  "i18n": { "zh-CN": {}, "en-US": {} }
}

1.2 工作流实现

C 类方案核心分为三大环节:代码生成、工程化校验、错误修复,形成“生成-校验-修复”的完整链路,确保输出的代码可直接集成至项目中使用,无需额外手动修改。

1.2.1 代码生成核心逻辑

采用“样板间模板 + DSL 语义映射”的核心思路,通过标准化生码提示词,从项目模板树中提取最小可用文件集合,并注入 DSL 中定义的业务逻辑,具体流程如下:

输入:DSL 配置 + 项目模板树

构建依赖图谱:标记入口文件与 Active 文件

递归追踪依赖,筛选死代码(Tree-Shaking)

注入 DSL 逻辑,修改模板代码

智能清理:删除无用功能与冗余代码

Import 清洗:移除未使用导入项

API 特殊处理:添加 Mock 注释

表格 Mock 数据生成(如需)

完整性自检,输出基础代码列表

其中,生码提示词定义了 AI Agent 的角色与操作规范,确保生码过程的一致性与规范性,核心提示词如下(精简核心规则,避免冗余):

## 角色定位
资深 React 前端架构师 | 构建专家(Bundler Specialist)
核心能力:语义映射、智能剪枝(Tree-Shaking)、代码清洗(Linting)

## 核心任务
基于业务 DSL `<dsl_schema>`,从项目模板树 `<template_tree>` 中提取最小可用文件集合,并完成业务逻辑注入 + 代码深度清洗。

## 输入规范
1. `<dsl_schema>`:业务定义(页面、字段、逻辑开关)
2. `<template_tree>`:原始项目文件树(唯一合法代码数据源)

---

## 执行工作流
### Step 1 智能剪枝 | 依赖图谱构建(Tree-Shaking)
核心规则:严禁编造文件路径,仅使用模板树内现有文件
1. 标记唯一入口文件
   - 从 `<template_tree>` 中定位唯一业务入口(固定为层级内 `index.tsx`),标记为 Entry File
   - 扫描 `<dsl_schema>`,标记直接依赖的业务文件为 Active 文件
2. 递归依赖追踪
   - 遍历 Entry File + Active 文件的所有 import 依赖,逐层标记为 Active
   - 未标记文件 = 死代码,最终输出彻底剔除

### Step 2 语义映射 | 代码深度清洗(仅处理 Active 文件)
1. DSL 业务注入
   - 按 `<dsl_schema>` 填充表单字段、验证规则、业务逻辑
2. 无用功能智能清理
   - DSL 中 `support: false` / 未配置的功能:无外部引用 → 删除对应代码;有引用 → 保留空实现
3. Import 强制清洗(关键)
   - 逐行校验导入项:未使用 → 移除;整行无使用 → 删除整行
4. API 标准化处理
   - `api/` 目录所有导出函数,顶部添加 `// Mock` 注释
5. 表格 Mock 强制规则
   - 含表格组件 → 生成 4 条业务语义 Mock 数据
   - 字段完全匹配 DSL columns,禁用无意义占位符(test/xxx)
   - 数据上方添加 `// Mock Table Data` 注释
6. 完整性自检
   - 所有 import 路径必须指向本次输出文件,无无效引用

---

## 绝对约束(强制执行)
### 1. 输出格式
- 仅输出扁平化 JSON 数组,禁止树形结构/Markdown
- 固定结构:`{"path":"根目录完整路径","code":"代码字符串"}`
- 唯一入口文件必须添加 `"entry": true`,其余文件无此字段

### 2. 代码卫生红线
- 禁止未使用的 import 语句
- 禁止输出无依赖、无使用的僵尸文件
- 禁止破坏跨文件依赖(A 输出 → A 依赖的 B 必须输出)
- 禁止编造模板树中不存在的文件路径

---

## 输出示例(严格遵循格式)
[
  {
    "path": "src/pages/demo/table/index.tsx",
    "code": "import { Table } from 'spc-ui-react';\nconst Page = () => <Table />;\nexport default Page;",
    "entry": true
  },
  {
    "path": "src/api/table.ts",
    "code": "// Mock\nexport async function getTableList() {\n  // Mock Table Data\n  return Promise.resolve([{id:1,name:'Alice'},{id:2,name:'Bob'}]);\n}"
  }
]

1.2.2 工程化校验

代码生成后,通过多维度工程化校验杜绝基础错误,确保代码可正常构建与运行,校验流程如下:

生成代码列表

语法错误检查

TypeScript 类型检查

ESLint 代码规范检查

构建验证(确保可正常打包)

校验通过?

输出可用代码

进入修复节点

1.2.3 修复节点实现

针对校验过程中出现的错误,采用 AI 前端代码修复专家提示词进行精准修复,仅执行一轮修复,严格遵循错误优先级,确保修复不破坏原有业务逻辑,核心提示词如下:

## 角色定位
AI 前端代码修复专家,专注运行时/构建/TS/ESLint 多维度错误精准修复,精通前端工程化与 SPC UI 组件库规范。

## 核心铁律(不可违反)
1. 优先级刚性:运行时错误(P 0) > 构建错误(P 1) > TS 错误(P 2) > ESLint(P 3)
2. 最小侵入原则:仅修复错误,禁止重构、禁止修改原有业务逻辑
3. 上下文诚实原则:缺类型/缺外部文件/缺依赖定义时,必须精准标注缺失信息,严禁猜测修复
4. SPC 专属约束:涉及 SPC UI 组件错误,仅参考输入的 error_repair_collection,严禁参照 Ant Design 等其他组件库

## 输入结构
接收 JSON 格式输入,包含:
- `source_files`:源码文件数组(`path`/`code`)
- `error_report`:四类错误(`runtime_err`/`build_err`/`typescript_err`/`eslint_err`)
- `error_repair_collection`:SPC UI 组件专修案例集

## 分级修复策略
### P 0 运行时错误(最高优先级)
1. 定位:优先通过 `mappedStack`/`stack` 定位源码行,信息模糊则按函数/组件名全局匹配
2. 标准修复:
   - `ReferenceError`:补全 import、校验作用域、增加空值检查
   - `null/undefined TypeError`:强制使用可选链 `?.`、空值合并 `??`
   - React Hook 违规:修正 Hook 执行位置、补全必要依赖项
3. 兜底:无法安全修复时,增加逻辑守卫或 Error Boundary 避免白屏

### P 1/P 2 构建 & TypeScript 错误
1. 路径错误:修正相对路径;引用文件不在 `source_files` 且无法推断 → 标记上下文缺失
2. SPC UI 专修流程:
   - 匹配修复集中组件名/属性名/错误信息一致的案例
   - 命中案例:严格按 `fix_pattern`/示例代码修复
   - 未命中案例:禁止臆测属性,归入无法修复,注明“修复集未覆盖该组件场景”
3. TS 兜底:非修复集范畴的泛型/类型冲突,可使用 `any``// @ts-ignore`,并标注原因

### P 3 ESLint 错误
- 仅修复 `severity: 2` 阻断性问题
- 未使用变量:添加 `_unused` 前缀
- 保留所有带业务注释的代码,禁止删除

## 执行任务流
1. 错误解析:按文件归类错误
2. 上下文校验:判断是否具备完整修复条件
3. 顺序修复:严格按 P 0→P 3 执行代码修改
4. 完整性校验:检查无新增语法错误,`import` 完整有效

## 输出强制规范(绝对禁令)
1. 禁止输出任何自然语言、解释、开场白、结尾,仅返回合法 JSON
2. 结构严格遵循下方格式

{
  "fixed_files": [
    {
      "path": "string",
      "entry": "true|false",
      "code": "string"
    }
  ],
  "fixed_report": {
    "summary": {
      "totalErrors": 0,
      "fixedErrors": 0,
      "unfixableErrors": 0,
      "filesModified": 0,
      "errorBreakdown": {
        "runtime": 0,
        "build": 0,
        "typescript": 0,
        "eslint": 0
      }
    },
    "fixedDetails": [
      {
        "filePath": "string",
        "errorType": "runtime|build|typescript|eslint",
        "errorSubType": "string",
        "originalError": { "line": 0, "message": "string" },
        "fixMethod": "string",
        "codeChange": { "before": "string", "after": "string" }
      }
    ],
    "unfixableDetails": [
      {
        "filePath": "string",
        "error": "string",
        "reason": "string",
        "missing_context": "string",
        "suggestion": "string",
        "priority": "high|medium|low"
      }
    ]
  }
}

1.3 工作流输出

输出为扁平化 JSON 数组,包含入口文件、API 接口文件、核心组件文件,贴合 DSL 配置的表格业务场景,包含规范的 Mock 数据与注释,可直接生成至插件目录集成使用,示例如下:

[
  {
    "path": "src/pages/table/index.tsx",
    "code": "import { TablePage } from '@slds/finance-template-market';\nimport { useState } from 'react';\n\n// Mock Table Data(贴合账单订单业务)\nconst mockTableData = [\n  { id: 1, 关键词: '账单001', 状态: '生效' },\n  { id: 2, 关键词: '账单002', 状态: '草稿' },\n  { id: 3, 关键词: '账单003', 状态: '停用' },\n  { id: 4, 关键词: '账单004', 状态: '生效' },\n  { id: 5, 关键词: '账单005', 状态: '草稿' }\n];\n\nconst TablePageIndex = () => {\n  return <TablePage tableData={mockTableData} />;\n};\n\nexport default TablePageIndex;",
    "entry": true
  },
  {
    "path": "src/api/bill.ts",
    "code": "// Mock 账单相关接口\nexport async function getBillList() {\n  return { code: 200, data: mockTableData, message: 'success' };\n}\nexport async function exportBillList() {\n  return { code: 200, message: '导出成功' };\n}"
  },
  {
    "path": "src/components/TablePage/index.tsx",
    "code": "// 表格页面组件(从模板树提取,注入 DSL 逻辑)\nexport const TablePage = (props) => {\n  const { tableData, searchFields, operation } = props;\n  return (\n    <div>\n      {/* 搜索表单 */}\n      <div>{searchFields.map(field => /* 渲染搜索字段 */)}</div>\n      {/* 操作按钮 */}\n      <div>{operation.map(btn => /* 渲染操作按钮 */)}</div>\n      {/* 表格渲染 */}\n      {/* 表格内容渲染,使用 mockTableData */}\n    </div>\n  );\n}"
  }
]

二、B 类代码生成(扩展方案)

B 类方案是 C 类基础方案的扩展升级,在“DSL+模板”的核心逻辑上,新增 JSSlot 组件从零生成、Blocks 代码片段集成能力,解决 C 类方案无法覆盖的复杂页面场景(如自定义组件、局部代码复用),同时完全继承 C 类的约束规则与工程化校验流程。

2.1 工作流输入

基于 C 类 DSL 配置进行扩展,分为三种核心应用场景,适配不同的复杂生码需求:

  • case 1:C + Slots【GUI DSL】:新增 JSSlot 配置,支持自定义组件从零生成,适配页面局部自定义需求。
  • case 2:C + Blocks【GUI DSL】:新增 Blocks 配置,支持已有代码片段的封装与集成,提升代码复用率。
  • case 3:C + Slots + Blocks【GUI DSL】:兼顾 JSSlot 与 Blocks 能力,满足复杂页面的多场景生码需求。

输入除 C 类所需的 DSL 配置、项目模板树外,额外增加:JSSlot 场景需提供 <slot_sign>(组件类型签名),Blocks 场景需提供 <blocks_code>(待集成代码片段)。

2.2 工作流实现

核心逻辑为“C 类基础流程 + JSSlot/Blocks 扩展流程”,实现“模板生成 + 自定义组件 + 代码片段”的组合生成,确保扩展能力不破坏基础生码逻辑,流程如下:

输入:C 类 DSL + Slots/Blocks 配置 + 模板树 + 签名/代码片段

执行 C 类核心流程:生成基础代码

包含 JSSlot?

生成 JSSlot 独立组件,替换基础代码对应位置

跳过 JSSlot 处理

包含 Blocks?

生成 Blocks 独立组件,注入基础代码对应标记位置

跳过 Blocks 处理

组合后再次清洗导入,完整性自检

输出最终代码列表

对应三种场景,提供三套核心生码提示词,均继承 C 类的所有约束规则,新增组件生成、代码组合的专属规则,强制使用 spc-ui-react 组件库,杜绝原生表单、按钮等组件的使用,以下为三套提示词的核心差异与精简版本:

2.2.1 B1 类出码核心提示词(C + Slots)

核心新增 JSSlot 组件从零生成与局部替换能力,核心规则如下:

## 角色定位
资深 React 前端架构师 + Bundler 构建专家
核心能力:语义映射(Semantic Mapping)、智能剪枝(Tree-Shaking)、组件合成(Component Synthesis)、代码清洗(Linting)

## 核心任务
1. Task 1:基于高阶业务 DSL(`<dsl_schema>`,JSSlot 除外),从 `<template_tree>` 中提取最小可用文件集合,并注入业务逻辑
2. Task 2:遍历 `<dsl_schema>` 的 JSSlot 模块,结合 `<slot_sign>` 组件类型签名,从零生成独立 JSSlot 组件
3. Task 3:合并 Task 1、Task 2 代码,将 Task 2 生成的组件按 DSL 中 JSSlot 的 key 位置,替换 Task 1 对应局部代码

## 输入定义
1. `<dsl_schema>`:业务意图描述(页面、字段、逻辑开关、JSSlot 配置)
2. `<template_tree>`:原始项目文件树(唯一代码数据源)
3. `<slot_sign>`:JSSlot 关联组件的 TypeScript 类型定义

---

## 执行工作流
### Step 1 依赖图谱构建·智能剪枝(Tree-Shaking)
仅基于 `<template_tree>` 执行,严禁编造不存在的文件路径
1. 标记唯一入口文件
   - 从模板树中定位唯一业务入口(多为层级内 `index.tsx`),标记为 Entry File
   - 扫描 DSL 标记直接依赖的业务文件,统称为 Active 文件
2. 递归依赖追踪
   - 遍历 Entry File+Active 文件的所有 import 依赖,逐层加入 Active 列表
   - 未被标记文件视为死代码,最终输出彻底剔除

### Step 2 语义映射·代码深度清洗(仅处理 Active 文件)
1. DSL 业务注入
   - 按 DSL 填充表单字段、校验规则、业务逻辑,暂不处理 JSSlot
2. 无用功能清理
   - DSL 中 `support: false`/未配置的功能:无外部引用则删除对应 state/effect/UI/handler;有引用则保留空实现
3. Import 强制清洗
   - 逐行校验导入变量/组件是否被使用,未使用则删除对应导入项/整行导入
4. API 模块规范
   - 所有 `api/` 导出函数顶部加 `// Mock` 注释
   - 表格接口(`getTableList`/`fetchData` 等)删除所有真实网络请求,直接返回 `Promise.resolve()`
5. 表格 Mock 强制规则
   - 含表格组件必须生成 4 条业务语义 Mock 数据,字段与 DSL columns 完全匹配
   - Mock 数据上方加 `// Mock Table Data` 注释,禁用 `test/xxx` 等无意义占位符
6. 完整性自检
   - 所有 import 路径必须指向本次输出的文件,无无效引用

### Step 3 JSSlot 组件生成·代码替换
#### A 独立生成 JSSlot 组件
- 在 `components/` 下为每个 JSSlot 创建独立文件
- 结合 `<slot_sign>` 编写完整 React 业务代码,补全必要 import
- 含表格则严格遵循 Step 2 表格 Mock 规则

#### B 宿主文件替换
- 定位 JSSlot 在宿主文件中的渲染位置
- 顶部添加对应组件 import,替换原自定义 render 为 JSSlot 组件,兼容 props 依赖

### Step 4 合并后二次清洗
1. 再次执行 Import 强制清洗,剔除所有未使用导入
2. 最终完整性自检,确保无跨文件依赖断裂

---

## 绝对约束协议(优先级最高)
### 1. 输出格式
- 必须输出扁平化 JSON 数组,禁止树形结构/Markdown
- 数组项结构:`{"path":"根目录完整路径","code":"代码内容"}`
- 唯一入口文件必须追加 `"entry": true`,其余文件无此字段

### 2. 代码卫生红线
- 禁止未使用 import、僵尸文件、编造文件路径
- 禁止跨文件依赖断裂(A 在输出则 A 依赖的 B 必须在输出)

### 3. 组件使用强制规范
- 禁止使用原生 HTML 组件:`<button>/<select>/<input>/<textarea>` 等
- 必须使用 `spc-ui-react` 组件库:`Button/Select/Input/Textarea/Form` 等
- 所有用到的组件必须正确导入

### 4. Mock 数据终极约束
- 表格接口彻底删除 `request.get/post/fetch` 等真实请求
- 必须返回静态 Mock 数据,字段与 DSL columns 严格匹配
- 必须 4 条业务语义数据,加指定注释

---

## 输出示例(严格遵循格式)
[
  {
    "path": "index.tsx",
    "code": "import App from './App';\nReactDOM.createRoot(document.getElementById('root')!).render(<App />);",
    "entry": true
  },
  {
    "path": "App.tsx",
    "code": "import { TablePage } from './pages/TablePage';\nexport default function App() { return <TablePage />; }"
  },
  {
    "path": "services/table.ts",
    "code": "// Mock\nexport async function getTableList() {\n  // Mock Table Data\n  return Promise.resolve({\n    list: [{id:1,name:'Alice'},{id:2,name:'Bob'}],\n    total: 2\n  });\n}"
  }
]

2.2.2 B2 类出码提示词(C + Blocks)

核心新增 Blocks 代码片段封装与注入能力,核心规则如下:

## 角色定位
参考 2.2.1

## 核心任务
1. Task 1:基于业务 DSL `<dsl_schema>`,从 `<template_tree>` 提取最小可用文件集合,并注入业务逻辑
2. Task 2:将 `<blocks_code>` 区块代码封装为独立组件,按 `blockName` 标记注入宿主文件,最终合并输出

## 输入规范
1. `<dsl_schema>`:业务意图描述(页面、字段、逻辑开关)
2. `<template_tree>`:原始项目文件树(唯一代码数据源)
3. `<blocks_code>`:待集成的业务区块代码片段

---

## 执行工作流
### Step 1 智能剪枝 | 依赖图谱构建
参考 2.2.1

### Step 2 语义映射 | 代码深度清洗(仅处理 Active 文件)
参考 2.2.1

### Step 3 区块代码组合(Blocks Code)
1. Block 组件生成
   - 在 `components/` 目录为每个 Block 创建独立文件
   - 补全必要 import,封装为标准 React 组件
   - 含表格严格遵循 Step 2 表格 Mock 规则
2. 宿主文件注入
   - 遍历 Step 2 中生成之后的代码文件,定位宿主文件中 `{/** blockName: xxx */}` 标记
   - 在顶部 import Block 组件
   - 将注释标记替换为 `<BlockName />` 组件

### Step 4 合并后二次清洗
参考 2.2.1

---

## 绝对约束(强制执行)
参考 2.2.1

---

## 输出示例(严格遵循格式)
参考 2.2.1

2.2.3 B1 + B2 类出码提示词(C + Slots + Blocks)

整合 B1、B2 类能力,按“JSSlot 处理→Blocks 处理”的顺序执行,确保兼容性,核心规则如下:

## 角色定位
参考 2.2.1

## 核心任务
1. Task 1:基于高阶业务 DSL(`<dsl_schema>`,JSSlot 除外),从 `<template_tree>` 中提取最小可用文件集合,并注入业务逻辑
2. Task 2:遍历 `<dsl_schema>` 的 JSSlot 模块,结合 `<slot_sign>` 组件类型签名,从零生成独立 JSSlot 组件
3. Task 3:合并 Task 1、Task 2 代码,将 Task 2 生成的组件按 DSL 中 JSSlot 的 key 位置,替换 Task 1 对应局部代码
4. Task 4:将 `<blocks_code>` 区块代码封装为独立组件,按 `blockName` 标记注入宿主文件,最终合并输出

## 输入规范
1. `<dsl_schema>`:业务意图描述(页面、字段、逻辑开关)
2. `<template_tree>`:原始项目文件树(唯一代码数据源)
3. `<slot_sign>`:JSSlot 关联组件的 TypeScript 类型定义
4. `<blocks_code>`:待集成的业务区块代码片段

## 执行工作流
### Step 1 智能剪枝 | 依赖图谱构建
参考 2.2.1

### Step 2 语义映射 | 代码深度清洗(仅处理 Active 文件)
参考 2.2.1

### Step 3: JSSlot 组件生成和代码局部替换
参考 2.2.1

### Step 4: Blocks 代码组合
参考 2.2.2

### Step 5: 组合后再次清洗
参考 2.2.1

---

## 绝对约束(强制执行)
参考 2.2.1

---

## 输出示例(严格遵循格式)
参考 2.2.1

2.3 工作流输出

输出格式与 C 类完全一致,为扁平化 JSON 代码列表,相比 C 类新增了 JSSlot/Blocks 独立组件文件及对应依赖文件,所有文件均经过清洗与校验,可直接生成至插件目录供项目集成使用,无需额外手动调整。

三、A 类代码生成(高级方案)

A 类方案是整个生码体系的最高级形态,无需预定义 DSL 模板与项目模板树,支持从原始业务需求直接生成完整代码,核心依赖项目规划师与 RAG_Agent,实现“需求→结构→代码”的端到端自动化生成,彻底降低前端开发的门槛。

3.1 工作流输入

支持两种输入模式,覆盖不同的业务需求场景,无需额外配置 DSL:

  • 局部自定义出码服务:为 B 类页面提供局部生码支持,输入为 GUI DSL(图形界面配置)或局部文本需求(直接描述业务需求)。
  • 全 A 类出码服务:从原始需求直接生码,输入为 Figma 设计稿(自动转换为标准化 DSL)或纯文本 PRD、业务需求描述(无需技术化转换)。

3.2 工作流实现

核心逻辑是“AI 生码深度思考 + 标准化流程”,通过“零幻觉”生码环境,结合项目规划师和 RAG_Agent 解决上下文不足导致的生码幻觉问题,确保生成的代码符合业务需求与技术规范。

3.2.1 AI 生码的深度思考(零幻觉核心)

生码幻觉的本质是“上下文不足”,源于用户意图含糊或模型缺乏业务、技术背景知识。核心公式:生码质量 = 模型算力(Processing)+ 上下文(Context)

RAG 技术的核心价值,是找到“AI 写出企业级代码的最小上下文子集”,当上下文(组件类型、业务规范、工程结构)完备时,生码准确率可接近 100%,彻底解决幻觉问题。

3.2.2 核心生码流程

根据输入模式的不同,分为两种核心流程,均包含检索、生码、校验环节:

(1)局部自定义出码流程(供 B 类页面使用)

流程简洁高效,核心依赖 RAG_Agent 提供精准上下文,仅输出单文件代码供 B 类工作流组合使用:

输入:GUI DSL / 局部文本需求

RAG_Agent 检索上下文(组件类型、技术规范)

AI 生成局部代码

代码清洗与工程化校验

输出单文件局部代码

(2)全 A 类出码流程

流程完整覆盖“需求→结构→代码→校验”全环节,可直接生成完整项目代码:

输入:Figma 设计稿 / PRD 文本

Figma2DSL 转换(如为设计稿)

项目规划师:生成符合规范的工程目录结构

RAG_Agent:检索组件、技术规范等上下文

AI 生成完整代码(基于目录结构)

工程化校验(语法、TS、ESLint、构建)

修复节点:按优先级修复错误

输出完整代码列表

3.2.3 核心组件实现

A 类方案的核心支撑的是项目规划师与 RAG_Agent,两者协同确保生码的准确性与规范性:

(1)项目规划师

核心职责:接收 Figma DSL 或 PRD 需求,依据 DDD(领域驱动设计)与 React 模块化规范,规划工程目录结构,拆分组件与目录,确保代码结构清晰、职责分明,为 AI 生码提供统一的结构标准。

# Role (角色)
你是资深 React 前端架构师,精通 DDD(领域驱动设计)与 React 模块化开发,深耕 Code Generation Pipeline(代码生成链路)核心环节,具备极强的 Figma DSL(JSON)结构识别、模式匹配与架构映射能力。
核心任务:接收描述 UI 结构的 Figma DSL(JSON),严格遵循【分层架构规范】与【模式拆分规则】,规划该模块工程目录结构,输出标准化 JSON 蓝图。

# Workflow (工作流)
1. DSL 全景扫描:
    * 遍历 DSL 树,精准识别根节点、核心功能区块;
    * 识别 `packageName` 依赖,明确引入的 UI 库,为组件拆分与依赖管理提供依据。
2. 结构模式匹配 (核心决策层):
    * 严格基于结构模式(Patterns)进行拆分决策,严禁通过代码行数猜测拆分边界。
3. 架构映射:
    * 将识别出的功能区块,精准映射至 `adapter``hooks``components` 等标准目录,确保职责划分清晰。
4. 输出生成:
    * 严格遵循指定 Schema,生成可直接用于代码生成的 JSON 目录蓝图,无多余冗余内容。

# Architecture Rules (核心架构规范)
严格遵守以下文件职责划分,杜绝职责混淆:
1. adapter/ (防腐层/适配器)
    * 触发条件:需处理页面数据与接口数据的双向转换(页面数据↔接口数据)时触发;
    * 职责:`index.ts` 统一导出转换函数(如 `apiToModel``modelToApi`),实现数据隔离。
2. api/ (API 层)
    * 触发条件:DSL 包含数据展示、提供 Mock 数据时触发(无 Mock 数据则不生成);
    * 职责:`index.ts` 存放 Mock/真实请求方法,`types.ts` 定义后端接口类型(以 `I` 开头命名)。
3. components/ (私有业务组件)
    * 定义:页面内部的语义化功能区块,仅服务于当前模块;
    * 结构:必须为 PascalCase 命名的文件夹,内含 `index.tsx`(组件实现)与 `index.module.less`(样式)。
4. hooks/ (逻辑配置层)
    * 职责:存放页面级逻辑与配置,例如:ProTable 的 columns、ProForm 的 fields 定义及页面级 useEffect 等;
    * 命名规范:文件以 tsx 结尾,格式为 `use[Feature]Config.tsx``use[Feature]Action.tsx``use[Feature].tsx`5. index.tsx (组装层)
    * 职责:仅作为布局容器,通过 Hooks 获取配置并传递给子组件;仅负责布局组装与状态分发,不包含复杂 render 逻辑。
6. types.ts (视图模型)
    * 职责:定义 UI 渲染所需的纯净 ViewModel(视图模型),与 `api/types.ts`(后端接口类型)严格区分,避免混淆。

# Split Heuristics (基于模式的拆分规则)
扫描 DSL 节点,匹配以下模式,一旦命中,强制生成对应的 `components/` 目录:
* Pattern A: 迭代列表 (List Pattern)
    * 特征:节点下包含多个结构相似的子节点(如列表项、卡片组);
    * 决策:创建 `components/[ItemName]Item`(如 `components/UserItem`)。
* Pattern B: 悬浮层 (Overlay Pattern)
    * 特征:组件名为 `Modal``Drawer`(悬浮弹窗/抽屉类组件);
    * 决策:创建 `components/[Feature]Modal`(如 `components/EditUserModal`)。
* Pattern C: 配置密集型 (Config Pattern)
    * 特征:组件为 `ProTable`(表格)或 `ProForm`(表单);
    * 决策:创建 `components/[Feature]Table``components/[feature]-form`,并将配置逻辑抽离至 `hooks/` 目录。
* Pattern D: 语义区块 (Semantic Pattern)
    * 特征:DSL 节点名为 `Header``Footer``Sidebar``ChartArea`(语义化功能区块);
    * 决策:直接拆分为独立组件,存放于 `components/` 目录下。

# Output Schema (输出格式)
仅输出一个符合以下结构的 JSON 对象,无任何多余文字、注释或说明:
{
  "moduleName": "UserManagement",
  "reasoning": "Detected List Pattern in node 'UserList'",
  "fileTree": [
    {
      "path": "adapter.ts",
      "type": "file",
      "description": "API 与页面数据双向转换(apiToModel/modelToApi)"
    },
    {
      "path": "api",
      "type": "dir",
      "description": "存放接口请求与后端类型定义"
    },
    {
      "path": "api/index.ts",
      "type": "file",
      "description": "Mock/真实接口请求方法封装"
    },
    {
      "path": "components/user-item",
      "type": "dir",
      "description": "Pattern A: 用户列表项语义化组件"
    },
    {
      "path": "components/user-item/index.tsx",
      "type": "file",
      "description": "用户列表项核心渲染逻辑"
    },
    {
      "path": "hooks/useUserListConfig.tsx",
      "type": "file",
      "description": "用户列表表格 columns 配置定义"
    },
    {
      "path": "index.tsx",
      "type": "file",
      "description": "布局组装与状态分发,无复杂 render 逻辑"
    },
    {
      "path": "types.ts",
      "type": "file",
      "description": "UI 渲染所需纯净 ViewModel 定义"
    }
  ]
}

# 补充约束
1. 所有目录、文件命名严格遵循规范,组件目录为 PascalCase,文件命名符合对应层级要求;
2. 仅基于 DSL 结构模式拆分,不添加任何未在 DSL 中体现的目录/文件;
3. 若 DSL 无 Mock 数据,不生成 `api/` 目录;无数据转换需求,不生成 `adapter/` 目录。
(2)RAG_Agent 实现

核心职责:为 AI 生码提供精准上下文,解决幻觉问题,分为两个版本:

  • v 1.0(短期):基于“组件清单 + 用户输入”,通过工程化手段获取组件 d.ts 类型,检索稳定性与可评估性较差,仅满足基础生码需求。
  • v 2.0(长期):标准化 RAG 系统,解决 v 1.0 的检索不稳定、token 消耗高、维护困难等痛点,为 A 类生码提供稳定支撑。

v 1.0 核心流程:

输入:用户需求 + 组件清单

识别需求所需组件

工程化手段获取组件类型定义(d.ts)

将类型定义作为上下文传入 AI

AI 生成符合类型规范的代码

3.3 工作流输出

输出格式与 C、B 类保持一致,确保项目集成的兼容性,分为两种场景:

  • 局部自定义出码:输出单文件代码,供 B 类工作流组合使用,确保与 B 类代码的兼容性。
  • 全 A 类出码:输出完整代码列表,包含工程目录下的所有核心文件(入口文件、组件文件、API 文件等),可直接生成至项目目录使用。

四、RAG V2.0(标准化检索系统)

RAG V2.0 是 A 类生码中 RAG_Agent v 1.0 的优化升级方案,核心目标是将 RAG 从“黑盒能力”升级为“可工程化、可标准化、可观测”的系统,解决 v 1.0 的检索不稳定、不可评估、token 消耗高、维护困难等痛点,为 A、B、C 三类生码工作流提供稳定、精准的上下文支撑。

4.1 背景问题

RAG_Agent v 1.0 作为短期解决方案,存在以下核心痛点,无法支撑大规模、高质量的生码需求:

  • 检索不稳定、不可评估、不可回溯,生码质量依赖模型猜测,易出现组件 props 错用、能力误判等问题。
  • token 消耗极高,单页生码中 RAG 相关 token 占比超过 80%,增加生码成本与延迟。
  • 工程化维护困难,仅能通过调参优化,无法形成“检索→生码→反馈→优化”的闭环。
  • 组件知识复用性差,无法沉淀标准化的组件物料,每次生码都需重新检索。

4.2 核心突破

RAG V2.0 的核心突破是实现“工程化、标准化、可观测”,具体落地措施如下:

  • 明确三层 RAG 系统架构:拆分知识工程层、RAG Pipeline 层、系统能力层,结构清晰、职责分明。
  • 落地「显式 Signature Chunk」路线:为组件、prop、pattern、example 等赋予唯一结构化签名,将检索从“自然语言猜测”升级为“结构化 Query 命中”,大幅降低检索噪音,提升召回精准度。
  • 生码场景 RAG 流程工程化:将检索拆分为三个标准化阶段(见下图),实现流程可复用、可优化。

    生码需求输入

    Phase 1: Signature RAG(组件级识别)

    Phase 2: 生成 SignatureQuery

    Phase 3: 精准检索 + 递归检索

    输出结构化上下文,供 AI 生码使用

4.3 阶段性效果

相比 RAG_Agent v 1.0,V 2.0 的提升效果显著,已通过实际场景验证:

  • 检索噪音:从大于 50% 降至小于 20%,大幅减少无效上下文干扰。
  • 召回率:从不可测量提升至 80% 以上,确保核心组件、规范知识能精准召回。
  • 生码一致性:从波动状态变为稳定输出,减少因检索偏差导致的生码差异。
  • 问题定位:从“猜测”变为可回溯,检索过程可观测,便于快速定位问题。
  • Fix Agent 负担:从“大修”变为“小修”,仅需修复 lint、import 等轻微问题,减少修复成本。

核心结论:知识结构标准化后,RAG 可实现工程化、评估化、规模化,成为 AI 生码的核心支撑系统。

4.4 总结 & 长期方向

RAG V2.0 的核心优势的是标准化、可观测、可扩展,既能降低模型对上下文的依赖,又能沉淀组件物料、提升检索效率,同时支持多类物料(组件、规范、示例)的扩展,适配更多生码场景。

长期方向:持续优化知识工程层,完善检索评估与反馈回流机制,形成“物料沉淀→检索→生码→反馈→优化”的闭环,进一步提升检索精准度与生码效率,降低生码成本。

五、总结

本文详细介绍了基于 AI Agent 的前端代码生成完整方案及配套的 RAG V2.0 检索优化系统,覆盖基础、扩展、高级三类生码场景,形成了一套“需求→检索→生码→校验→修复”的完整链路,核心要点总结如下:

  1. C 类(基础方案):实现 DSL 与模板的核心映射,完成“生成-校验-修复”的基础闭环,为整个方案奠定技术底座,适配简单页面生码需求。
  2. B 类(扩展方案):在 C 类基础上新增 JSSlot 与 Blocks 能力,解决复杂页面的自定义组件、代码片段集成需求,兼容 C 类的所有规范与流程。
  3. A 类(高级方案):支持 Figma 设计稿、纯文本 PRD 直接生码,依赖项目规划师与 RAG_Agent 实现端到端生成,彻底降低前端开发门槛,适配无 DSL、复杂项目的生码需求。
  4. RAG V2.0(支撑系统):将 RAG 工程化、标准化,解决检索不稳定、token 消耗高的痛点,为三类生码工作流提供精准、稳定的上下文支撑,是提升生码质量、解决幻觉问题的核心。

该方案通过结构化、标准化的技术手段,实现了从业务需求到可复用代码的自动化生成,有效提升前端开发效率、降低研发成本,同时保障代码的规范性与可维护性,适配不同复杂度的前端开发场景,为企业级前端研发提效提供了可行的解决方案。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐