# ai-app-generation
**Repository Path**: lywynl/ai-app-generation
## Basic Information
- **Project Name**: ai-app-generation
- **Description**: 这是一个ai agent项目
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2026-03-16
- **Last Updated**: 2026-05-30
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# AI App Generation
**一句话需求 → 可部署 Web 应用** · 基于 LangChain4j 的 AI 全栈零代码(NoCode)应用生成平台
[](https://openjdk.org/)
[](https://spring.io/projects/spring-boot)
[](https://docs.langchain4j.dev/)
[](https://vuejs.org/)
[](https://vitejs.dev/)
[](https://docs.docker.com/compose/)
[](#-许可证)
[](#-参与贡献)
[功能特性](#-核心特性) · [架构设计](#-系统架构) · [快速开始](#-快速开始) · [项目结构](#-项目结构) · [核心模块](#-核心模块解析) · [API 文档](#-api-文档) · [部署](#-生产部署)
---
## 项目简介
`ai-app-generation` 是一个面向 C 端开发者与产品同学的 **AI 驱动应用生成平台**,对标美团 NoCode、Bolt.new、Lovable 等同类型产品。用户只需用自然语言描述应用需求,平台即可:
1. **AI 智能识别**应当生成什么形态的代码(单文件 HTML / 多文件项目 / Vue 完整工程)
2. **检索 RAG 模板库**为大模型注入高质量上下文片段,提升生成稳定性
3. **流式输出**生成过程,实时反馈代码片段、工具调用、思考过程
4. **一键部署**生成产物到平台静态服务,并支持代码 ZIP 下载
平台内置:智能路由、检索增强(RAG)、Agent 工具调用、Prompt 安全护栏、流式 SSE、对象存储、网页截图、应用市场、可观测监控等完整能力。
---
## 核心特性
| 能力 | 说明 |
| :--- | :--- |
| 三种代码生成模式 | `HTML` 单文件 / `MULTI_FILE` 多文件 / `VUE_PROJECT` Vue 工程 |
| AI 智能路由 | 由 Qwen-Turbo 自动判断需求适合的生成模式 |
| RAG 检索增强 | PgVector 向量检索 + DashScope `text-embedding-v4` + `gte-rerank-v2` 二次重排 |
| Agent 工具调用 | Vue 工程模式下 AI 自主调用 `FileWrite/Read/Modify/Delete/DirRead/Exit` 6 类工具完成多文件项目搭建 |
| 图片采集 Agent | 首条消息自动调度 `Pexels 图片搜索` + `阿里 wan2.2 Logo 生成` + `Mermaid 流程图` + `unDraw 插画` 4 类工具,并行收集封面/Logo/插图素材 |
| 流式 SSE | Reactor `Flux` + 自定义工具调用流解析器(字符级状态机) |
| Prompt 安全护栏 | 注解 `@PromptSafetyCheck` + AOP 切面 + LangChain4j `InputGuardrail` 双重拦截 |
| 一键部署 | `deployKey` 标识 + Nginx 静态托管,生成产物即时可访问 |
| 代码下载 | 生成目录打包为 ZIP,支持完整工程导出 |
| 网页截图 | Selenium + Chromium + WebDriverManager 容器内自动截屏,封面同步上传腾讯云 COS |
| 应用市场 | 精选作品(priority 排序)+ 我的应用 + 管理员后台,分页缓存 + 游标查询 |
| 对话历史 | 按 `appId + createTime` 联合索引的游标分页 |
| 双层缓存 | Caffeine 本地缓存 + Redis 分布式缓存 + Spring `@Cacheable` 自动失效 |
| 可观测 | Spring Actuator + Micrometer + Prometheus + Grafana AI 模型可观测看板 |
| 用户体系 | Spring Session + Redis 持久化(30 天)+ AOP `@AuthCheck` 角色拦截 |
---
## 系统架构
```
┌──────────────────────────────────────────────────────────────────────┐
│ 浏览器(Vue 3 + AntDV) │
└──────────────┬─────────────────────────────────────┬─────────────────┘
│ /api (HTTP / SSE) │ /static (生成产物)
┌──────────────▼─────────────────┐ ┌──────────────▼─────────────────┐
│ Spring Boot 3.5.4 (port 9025) │ │ Nginx (静态资源 / 部署托管) │
│ ┌────────────────────────────┐ │ └────────────────────────────────┘
│ │ Controller (App / User / │ │
│ │ ChatHistory / Health) │ │
│ ├────────────────────────────┤ │
│ │ AppService (业务编排) │ │
│ │ ├─ AiCodeGenTypeRouting │──── Qwen-Turbo(路由分类)
│ │ ├─ AiCodeGeneratorFacade │
│ │ │ ├─ RAG Retrieval │──── PgVector + Rerank
│ │ │ ├─ Image Collection │──── DashScope + Pexels(并行 Agent)
│ │ │ └─ Code Generator │──── DeepSeek-Chat(主生成)
│ │ ├─ ScreenshotService │──── Selenium + Chromium
│ │ └─ ProjectDownload │──── Hutool ZipUtil
│ ├────────────────────────────┤ │
│ │ Guardrail (Prompt 安全) │
│ │ AOP (@AuthCheck) │
│ │ Cache (Caffeine + Redis) │
│ └────────────────────────────┘ │
└─┬────────┬────────┬────────┬──┘
│ │ │ │
▼ ▼ ▼ ▼
MySQL Redis PgVector COS
(业务) (Session) (RAG) (封面截图)
┌────────────────────────────┐ ┌──────────────────────────────────┐
│ Prometheus (port 9090) │ ─► │ Grafana (port 3000) │
│ 抓取 /actuator/prometheus │ │ AI Model Observability Dashboard │
└────────────────────────────┘ └──────────────────────────────────┘
```
**核心数据流(流式生成)**
```
User Prompt
│
▼
[Prompt 安全护栏] ─► [AI 智能路由:Qwen-Turbo] ─► [图片采集 Agent (并行 4 工具)]
│
▼
[RAG 检索 → Rerank → 拼接片段]
│
▼
[DeepSeek 流式生成] ── SSE Flux ──► 浏览器
│
▼
[代码解析 → 文件落盘 → Vue 工程构建]
│
▼
[Selenium 截屏 → COS 上传 → 更新封面]
```
---
## 技术栈
### 后端
| 类别 | 选型 | 版本 |
| :--- | :--- | :--- |
| 语言 / 框架 | Java / Spring Boot | 25 / 3.5.4 |
| AI 编排 | LangChain4j (含 OpenAI Starter / Reactor / PgVector) | 1.1.0 |
| Agent 工作流 | LangGraph4j | 1.6.0-rc2 |
| AI 模型 | DeepSeek(主生成)+ 阿里 DashScope(路由 / Embedding / Rerank / 文生图) | - |
| ORM | MyBatis-Flex(含 codegen) | 1.11.0 |
| 数据库 | MySQL 8.0.40 + PostgreSQL 16 (pgvector) | - |
| 缓存 / Session | Redis 7.0.15 + Redisson + Spring Session + Caffeine | - |
| API 文档 | Knife4j (OpenAPI 3) | 4.4.0 |
| 网页截图 | Selenium + WebDriverManager | 4.33.0 / 6.1.0 |
| 对象存储 | 腾讯云 COS SDK | 5.6.227 |
| 工具库 | Hutool / Lombok | 5.8.38 / - |
| 监控 | Spring Actuator + Micrometer Prometheus | - |
### 前端
| 类别 | 选型 |
| :--- | :--- |
| 框架 | Vue 3.5 + Composition API |
| 构建 | Vite 7 |
| 状态管理 | Pinia 3 |
| UI 组件库 | Ant Design Vue 4.2 |
| 路由 | Vue Router 4 |
| 类型 | TypeScript 5.8 |
| HTTP | Axios 1.11 |
| 类型生成 | `@umijs/openapi`(基于 OpenAPI 自动生成 TS 接口) |
| Markdown | markdown-it + highlight.js |
### 基础设施
| 类别 | 选型 |
| :--- | :--- |
| 容器化 | Docker + Docker Compose |
| 反向代理 | Nginx |
| 监控可视化 | Prometheus + Grafana |
| 数据库迁移 | Flyway 风格 SQL(`V1__hnsw_index.sql` 等) |
---
## 快速开始
### 环境要求
| 依赖 | 最低版本 | 备注 |
| :--- | :--- | :--- |
| JDK | 25 | 项目使用 Java 25 特性(switch pattern) |
| Maven | 3.9+ | 或直接使用项目自带 `mvnw` |
| Node.js | 20 LTS+ | 前端构建 |
| MySQL | 8.0+ | 端口默认 `3406`(可改) |
| Redis | 7.0+ | 端口 `6379`,需开启 ACL |
| PostgreSQL | 16 + pgvector | 端口 `5432`,库 `ai_codegen_rag` |
### 必需的 API Key
启动前请准备好以下 Key(写入环境变量):
| 变量名 | 用途 | 申请地址 |
| :--- | :--- | :--- |
| `DEEPSEEK_API_KEY` | 主代码生成 / 推理 | https://platform.deepseek.com |
| `DASHSCOPE_API_KEY` | 智能路由 / Embedding / Rerank / 文生图 | https://dashscope.aliyun.com |
| `PEXELS_API_KEY` | 免费图片素材搜索 | https://www.pexels.com/api |
| `COS_HOST` / `TEN_SERCET_ID` / `TEN_SECRET_KEY` | 腾讯云 COS 对象存储 | https://console.cloud.tencent.com/cos |
### 1. 克隆仓库
```bash
git clone https://gitee.com/lywynl/ai-app-generation.git
cd ai-app-generation
```
### 2. 初始化数据库
```bash
# MySQL:执行 sql/schema.sql
mysql -u root -p < sql/schema.sql
# PostgreSQL:启用 pgvector 扩展
psql -U admin -d ai_codegen_rag -f prod/postgres/init/01-enable-pgvector.sql
```
### 3. 配置环境变量
将 API Key 注入到环境变量(PowerShell 示例):
```powershell
$env:DEEPSEEK_API_KEY="sk-xxx"
$env:DASHSCOPE_API_KEY="sk-xxx"
$env:PEXELS_API_KEY="xxx"
$env:COS_HOST="https://xxx.cos.ap-beijing.myqcloud.com"
$env:TEN_SERCET_ID="xxx"
$env:TEN_SECRET_KEY="xxx"
```
> **温馨提示**:`application.yml` 中数据库密码默认为开发期占位 `lyw666`,请上线前改成自己的安全密码或迁移到环境变量。
### 4. 启动后端
```bash
# Windows
mvnw.cmd spring-boot:run
# Linux / macOS
./mvnw spring-boot:run
```
启动成功后访问:
- API 文档(Knife4j):
- 健康检查:
- Prometheus 指标:
### 5. 启动前端
```bash
cd ai-app-generation-frontend
npm install
npm run dev
```
前端默认 ,已通过 Vite 代理转发到后端 `/api`。
---
## 项目结构
```
ai-app-generation/
├── ai-app-generation-frontend/ # Vue 3 前端(独立子项目)
│ ├── src/
│ │ ├── api/ # OpenAPI 自动生成的 TS 接口
│ │ ├── components/ # 通用组件
│ │ ├── pages/ # 路由页面(编辑器、应用市场、登录等)
│ │ ├── stores/ # Pinia 状态
│ │ └── router/ # Vue Router
│ ├── package.json
│ └── vite.config.ts
│
├── src/main/java/com/lyw/appgeneration/
│ ├── AiAppGenerationApplication.java # 启动类(@EnableCaching + @MapperScan)
│ │
│ ├── ai/ # AI 能力层(核心)
│ │ ├── AiCodeGeneratorService.java # AI Service 接口(@SystemMessage / @UserMessage)
│ │ ├── AiGeneratorServiceFactory.java # 按 appId + 类型构建独立 AI 实例(含工具/记忆)
│ │ ├── AiCodeGenTypeRoutingService.java # 智能路由:自动选择 HTML/多文件/Vue
│ │ ├── AiCodeGenTypeRoutingServiceFactory.java
│ │ ├── model/ # AI 响应数据结构(HtmlCodeResult, MultiFileCodeResult)
│ │ │ └── message/ # 流式消息:AiResponse / ToolRequest / ToolExecuted / ...
│ │ ├── parser/
│ │ │ └── ToolRequestStreamParser.java # 工具调用流解析器(字符级状态机)
│ │ ├── tools/ # Vue 工程模式下的 Agent 工具
│ │ │ ├── BaseTool.java # 工具基类
│ │ │ ├── FileWriteTool / FileReadTool
│ │ │ ├── FileModifyTool / FileDeleteTool
│ │ │ ├── FileDirReadTool # 目录读取
│ │ │ └── ExitTool # AI 主动退出循环
│ │ ├── image/ # 图片采集 Agent
│ │ │ ├── ImageCollectionService.java # 入口:增强 Prompt
│ │ │ ├── ImageCollectionPlanService.java # 编排器:解析 4 类工具的并行计划
│ │ │ ├── ImageCollectionPromptBuilder.java
│ │ │ ├── ImageCollectionExecutorConfig.java # 自定义线程池
│ │ │ ├── tools/
│ │ │ │ ├── ImageSearchTool.java # Pexels 搜索
│ │ │ │ ├── LogoGeneratorTool.java # 阿里 wan2.2 文生图
│ │ │ │ ├── MermaidDiagramTool.java # mmdc CLI 渲染流程图
│ │ │ │ └── UndrawIllustrationTool.java # unDraw 插画
│ │ │ └── model/ # ImageCategoryEnum / ImageCollectionPlan / ImageResource
│ │ └── guardrail/ # Prompt 安全护栏
│ │ ├── PromptSafetyValidator.java
│ │ ├── PromptSafetyRules.java
│ │ ├── PromptSafetyInputGuardrail.java # LangChain4j InputGuardrail
│ │ ├── annotation/PromptSafetyCheck.java
│ │ └── aspect/PromptSafetyAspect.java # AOP 切面
│ │
│ ├── core/ # 代码生成核心引擎
│ │ ├── AiCodeGeneratorFacade.java # 统一门面(同步 + 流式)
│ │ ├── parser/ # 代码解析器(HTML / 多文件 / Executor)
│ │ ├── saver/ # 文件落盘模板(HTML / 多文件 / Executor)
│ │ ├── handler/ # 流处理器(SimpleText / JsonMessage / Executor)
│ │ └── builder/VueProjectBuilder.java # Vue 工程后置构建(npm install / build)
│ │
│ ├── controller/
│ │ ├── AppController.java # 应用 CRUD / 流式生成 / 部署 / 下载
│ │ ├── UserController.java # 用户 CRUD / 登录 / 当前用户
│ │ ├── ChatHistoryController.java # 对话历史游标查询
│ │ ├── StaticResourceController.java # 部署产物静态服务
│ │ └── HealthController.java
│ │
│ ├── service/
│ │ ├── AppService / UserService / ChatHistoryService
│ │ ├── ScreenshotService # Selenium 截屏
│ │ ├── ProjectDownloadService # ZIP 下载
│ │ └── rag/ # RAG 检索增强
│ │ ├── RagRetrievalService.java # 向量召回(带降级)
│ │ ├── RagRerankService.java # gte-rerank-v2 二次重排
│ │ ├── RagPromptAssembler.java # 提示词拼接
│ │ ├── ingest/TemplateIngestService.java # 模板嵌入入库
│ │ ├── exception/RerankException.java
│ │ └── model/ # TemplateDoc / RetrievedSnippet
│ │
│ ├── config/ # Spring 配置
│ │ ├── CorsConfig / JsonConfig / CosClientConfig
│ │ ├── RoutingAiModelConfig # 多 AI 模型 Bean 装配
│ │ ├── StreamingChatModelConfig
│ │ ├── ReasoningStreamingChatModelConfig
│ │ ├── RedisChatMemoryStoreConfig # 对话记忆存储
│ │ ├── RedisCacheManagerConfig # Redis Cache
│ │ ├── RagConfig + RagProperties # RAG 配置类
│ │ └── ...
│ │
│ ├── manger/ # Manager 层(注:包名为 manger 非 manager,源码原状)
│ │ ├── CosManager.java # 腾讯云 COS 上传
│ │ ├── ToolManager.java # AI 工具集中注册
│ │ └── AppFileStateManager.java # 应用文件状态管理
│ │
│ ├── aop/AuthInterceptor.java # 权限拦截切面
│ ├── annotation/AuthCheck.java # @AuthCheck 注解
│ ├── exception/ # 业务异常 / 错误码 / ThrowUtils
│ ├── common/ # BaseResponse / ResultUtils / PageRequest
│ ├── constants/ # AppConstant / UserConstant / RagConstants
│ ├── model/ # entity / dto / vo / enums
│ ├── mapper/ # MyBatis-Flex Mapper
│ ├── generator/MyBatisCodeGenerator # 代码生成器(开发期工具)
│ └── utils/SpringContextUtil / CacheKeyUtils
│
├── src/main/resources/
│ ├── application.yml # 主配置(DeepSeek / Qwen / Redis / MySQL / RAG)
│ └── db/migration/V1__hnsw_index.sql # PgVector HNSW 索引
│
├── embed_text/ # RAG 模板库(30+ 已策展模板)
│ ├── html/ # 纯 HTML 模板(landing-hero / pricing-table / ...)
│ ├── multi-file/ # 多文件模板(todo-app / weather-search / ...)
│ └── vue-project/ # Vue 工程模板(login-form / dashboard / ...)
│
├── prod/ # 生产部署目录(独立可发布)
│ ├── docker-compose.yml # 7 容器编排
│ ├── docker/
│ │ ├── Dockerfile.backend # 后端镜像(含 Chromium / mermaid-cli)
│ │ ├── Dockerfile.nginx
│ │ └── Dockerfile.postgres
│ ├── nginx/nginx.conf
│ ├── redis/users.acl # Redis ACL
│ ├── postgres/init/ # pgvector 初始化
│ ├── prometheus/prometheus.yml
│ ├── grafana/ # 数据源、仪表盘自动 provision
│ ├── sql/schema.sql
│ ├── embed_text/ # 同步 RAG 模板库
│ ├── artifacts/ # 构建产物(jar + 前端 dist)
│ ├── build-artifacts.ps1 # 一键打包脚本
│ ├── deploy.ps1
│ ├── .env.example
│ └── README.md # 部署文档
│
├── sql/schema.sql # 业务表结构(user / app / chat_history)
├── docs/ # 设计文档(图片采集并发设计等)
├── docker/ # 开发环境 Docker
└── pom.xml
```
---
## 核心模块解析
### 1. AI 智能路由
**类**:`ai/AiCodeGenTypeRoutingService.java`
调用 Qwen-Turbo(轻量 + 低成本)对用户的需求做分类,自动判定应当走哪条生成流水线:
```
用户输入 ─► Qwen-Turbo 分类 ─► CodeGenTypeEnum
├─ HTML 单文件页面
├─ MULTI_FILE HTML + CSS + JS 多文件
└─ VUE_PROJECT 完整 Vue 3 工程
```
**为什么这样设计**:不同形态的应用对模型的要求不同,单文件 HTML 用一次 chat 就够了,Vue 工程则需要文件级 Agent 来反复读写。先分类,再选择对应的 AI Service 与系统提示词,能显著降低 Token 消耗与生成失败率。
### 2. RAG 检索增强(Retrieval-Augmented Generation)
**模块**:`service/rag/`
完整流水线:
```
用户 prompt ──► [Embedding: text-embedding-v4 (1024 维)]
│
▼
[PgVector HNSW 召回 top-K=10] (RagRetrievalService)
│
▼
[gte-rerank-v2 重排 → top-K=3] (RagRerankService)
│
▼
[拼接到用户消息前] (RagPromptAssembler)
│
▼
[DeepSeek 主生成]
```
**关键决策**:
- 召回阶段最低分阈值放宽到 `0.30`,给 rerank 足够候选池
- 整条链路有降级保护:检索/重排任意一步失败都不影响主生成(`RagRetrievalService` 内部 try-catch)
- 模板提示词上下文预算 `4000` 字符(约 2000 token),避免挤占用户 prompt 空间
### 3. Vue 工程模式 · Agent 工具调用
**类**:`AiCodeGeneratorFacade.processTokenStream()` + `ai/tools/*`
Vue 工程不能用一次性 chat 生成(结构复杂、文件多),改用 LangChain4j `TokenStream` + 工具调用:
| 工具 | 作用 |
| :--- | :--- |
| `FileWriteTool` | 创建/覆盖文件 |
| `FileReadTool` | 读取已生成文件内容 |
| `FileModifyTool` | 局部修改(避免整文件重写) |
| `FileDeleteTool` | 删除文件 |
| `FileDirReadTool` | 列出工程目录 |
| `ExitTool` | AI 主动判断完成、退出循环 |
**流式工具调用解析器**:`ai/parser/ToolRequestStreamParser.java`
每个 tool call id 维护独立的字符级状态机,处理 LLM 流式吐出参数 JSON 时的字段级 delta 推送(`KEY_READY` → `DELTA` → `VALUE_READY`),让前端实时渲染"正在写入哪个文件",体验接近 Cursor / Bolt.new。
### 4. 图片采集 Agent
**模块**:`ai/image/`
仅在 **首条消息** 触发(`isFirstMessage = true`),通过自定义线程池 `ImageCollectionExecutorConfig` 并行调度 4 类工具:
| 工具 | 数据源 | 用途 |
| :--- | :--- | :--- |
| `ImageSearchTool` | Pexels API | 真实场景照片(背景/产品图) |
| `LogoGeneratorTool` | 阿里 DashScope `wan2.2-t2i-flash` | 文生图,定制 Logo |
| `MermaidDiagramTool` | mermaid-cli (`mmdc`) | 流程图 / 架构图渲染 |
| `UndrawIllustrationTool` | unDraw | SVG 风格插画 |
收集结果会被拼接到原 prompt,让大模型在生成代码时能直接引用真实素材 URL。
### 5. Prompt 安全护栏
**模块**:`ai/guardrail/`
三道防线:
1. **注解 + AOP 切面**:`@PromptSafetyCheck` 标记需要校验的方法,`PromptSafetyAspect` 在调用前静态规则匹配
2. **LangChain4j InputGuardrail**:`PromptSafetyInputGuardrail` 在 AI Service 入口拦截
3. **规则集中管理**:`PromptSafetyRules` 统一维护黑词、注入特征、长度上限
### 6. 流式 SSE 协议
**控制器**:`AppController.chatToGenCode()` 返回 `Flux>`
```
GET /api/app/chat/gen/code?appId=1&message=做一个待办应用
Content-Type: text/event-stream
data: {"d":""}
data: {"d":""}
event: tool_request
data: {"toolName":"FileWriteTool","arguments":"..."}
event: business-error
data: {"error":true,"code":50000,"message":"..."}
event: done
data:
```
- 单条消息体用 `{"d": "片段"}` 包装,前端只需读 `d` 字段拼接
- `business-error` 事件统一承载业务异常(含错误码)
- Reactor `Flux.create` + `onErrorResume` 保证流不中断
### 7. 数据库设计
**MySQL 业务库** `ai_app_generation`:
| 表 | 关键字段 | 索引设计 |
| :--- | :--- | :--- |
| `user` | userAccount(uk) / userRole / userAvatar | `uk_userAccount` 唯一,`idx_userName` 提速搜索 |
| `app` | initPrompt / codeGenType / deployKey(uk) / priority / userId | `uk_deployKey` 保证部署标识唯一,`idx_userId` 加速我的列表 |
| `chat_history` | message / messageType (user/ai) / appId / userId | **`idx_appId_createTime` 联合索引** —— 游标分页核心 |
**PostgreSQL 向量库** `ai_codegen_rag`:
- pgvector 1024 维向量列
- HNSW 索引(`V1__hnsw_index.sql`),近邻检索 O(log n)
---
## API 文档
启动后端后访问 Knife4j:
```
http://localhost:9025/api/doc.html
```
主要接口分组:
| 模块 | 路径前缀 | 核心接口 |
| :--- | :--- | :--- |
| 应用 | `/api/app` | `POST /add` 创建 · `GET /chat/gen/code` 流式生成(SSE) · `POST /deploy` 部署 · `GET /download/{appId}` 下载 ZIP · `POST /good/list/page/vo` 精选 |
| 用户 | `/api/user` | `POST /register` · `POST /login` · `GET /get/login` 当前用户 |
| 对话 | `/api/chatHistory` | `POST /list/my/page` 我的对话游标分页 |
| 静态 | `/api/static/**` | 部署产物访问 |
| 监控 | `/api/actuator/{health,info,prometheus}` | 健康 / 指标 |
---
## 配置说明
主配置文件 `src/main/resources/application.yml` 关键项:
```yaml
server:
port: 9025
servlet:
context-path: /api
spring:
mvc.async.request-timeout: 600000 # SSE 流式接口异步超时:10 分钟
session:
store-type: redis
timeout: 2592000 # 30 天
langchain4j:
open-ai:
chat-model: # 主生成
base-url: https://api.deepseek.com
model-name: deepseek-chat
streaming-chat-model: # 流式生成
reasoning-streaming-chat-model: # 推理任务
routing-chat-model: # 路由分类(Qwen-Turbo)
base-url: https://dashscope.aliyuncs.com/compatible-mode/v1
rag:
enabled: true
templates-dir: D:/ai-app-generation/embed_text # 模板库根目录
ingest.enabled: false # 模板入库开关(手动触发)
pgvector: { host: localhost, port: 5432, database: ai_codegen_rag }
embedding: { model-name: text-embedding-v4, dimension: 1024 }
retrieval: { top-k: 3, min-score: 0.30 }
rerank: { enabled: true, model-name: gte-rerank-v2, top-n: 10 }
prompt: { max-context-chars: 4000 }
```
---
## 生产部署
完整部署文档:[`prod/README.md`](./prod/README.md)
### 一键部署(Docker Compose)
```bash
# 1. 本地打包前后端产物到 prod/artifacts/
.\prod\build-artifacts.ps1
# 2. 上传 prod 目录到服务器(例如 /opt/ai-app-generation/prod)
# 3. 服务器进入 prod 目录
cd /opt/ai-app-generation/prod
cp .env.example .env
# 编辑 .env 填入 API Key、数据库密码
# 4. 一键启动
docker compose --env-file .env up -d
```
### 端口映射
| 服务 | 容器端口 | 主机端口(默认) | 用途 |
| :--- | :--- | :--- | :--- |
| Nginx | 100 | `${NGINX_HOST_PORT}` 100 | 业务总入口(前端 + 部署产物) |
| Backend | 9025 | `${BACKEND_HOST_PORT}` 9025 | Spring Boot API |
| MySQL | 3306 | - | 业务数据 |
| Redis | 6379 | - | Session / 缓存 |
| PostgreSQL | 5432 | - | RAG 向量库 |
| Prometheus | 9090 | `${PROMETHEUS_HOST_PORT}` 9090 | 指标采集 |
| Grafana | 3000 | `${GRAFANA_HOST_PORT}` 3000 | 可视化看板 |
### 健康检查
```bash
docker compose ps
docker compose logs -f backend
curl http://localhost:9025/api/actuator/health
```
---
## 监控与可观测性
预置 Grafana 看板 `prod/grafana/dashboards/ai-model-observability-dashboard.json`,开箱即用:
- 模型调用 QPS / 平均延迟 / P99
- Token 消耗(输入 / 输出)
- 工具调用次数 / 成功率
- RAG 检索命中率 / 重排耗时
- JVM / HikariCP / Redis 连接池
访问:(默认账号 `admin / lyw666`,请上线前修改)
---
## 路线图
- [x] 三种代码生成模式(HTML / 多文件 / Vue)
- [x] AI 智能路由
- [x] RAG 模板检索 + Rerank
- [x] 流式 SSE + 工具调用流解析
- [x] 图片采集 Agent(4 工具并行)
- [x] Prompt 安全护栏
- [x] 一键部署 + 代码下载
- [x] Docker Compose 全栈部署 + Grafana 监控
- [ ] 多模型支持(接入 Claude、GPT-4、月之暗面等)
- [ ] 应用模板市场(社区共享)
- [ ] 在线协作编辑
- [ ] 端到端 E2E 测试覆盖
---
## 参与贡献
1. Fork 本仓库
2. 新建特性分支:`git checkout -b feat/your-feature`
3. 提交代码(遵循 [约定式提交](https://www.conventionalcommits.org/zh-hans/)):
- `feat:` 新功能
- `fix:` Bug 修复
- `refactor:` 重构
- `docs:` 文档
- `chore:` 杂项
4. 推送分支并提交 Pull Request
> 提交代码前请确保通过 `mvn clean verify` 与前端 `npm run lint`。
---
## 许可证
本项目采用 [MIT License](LICENSE)。
---
## 致谢
本项目站在以下优秀开源项目的肩膀上:
- [Spring Boot](https://spring.io/projects/spring-boot)
- [LangChain4j](https://docs.langchain4j.dev/) · 强大的 Java AI 编排框架
- [LangGraph4j](https://github.com/bsorrentino/langgraph4j) · Agent 工作流
- [MyBatis-Flex](https://mybatis-flex.com/) · 优雅的 ORM
- [Vue.js](https://vuejs.org/) · 渐进式前端框架
- [Ant Design Vue](https://antdv.com/) · 企业级 UI 组件
- [pgvector](https://github.com/pgvector/pgvector) · PostgreSQL 向量扩展
- [DeepSeek](https://www.deepseek.com/) · 高性价比代码生成模型
- [阿里云 DashScope](https://dashscope.aliyun.com/) · 通义千问 / Embedding / Rerank
- [Hutool](https://hutool.cn/) · Java 工具集
---
**如果这个项目对你有帮助,欢迎 Star 支持一下!**
Made with ♥ by [@lywynl](https://gitee.com/lywynl)