# todo-fullStackTry **Repository Path**: ai-project_9/todo-full-stack-try ## Basic Information - **Project Name**: todo-fullStackTry - **Description**: 简单RAG+langchain4j的AI知识库系统 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-01-09 - **Last Updated**: 2026-01-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AI 知识库问答系统(RAG + LangChain4J) > 基于 LangChain4J + Spring Boot 3.4 构建的企业级 RAG 知识库问答系统,支持多模型热切换、向量混合检索、流式输出,并集成完整的监控、测试、容器化方案。 ## ✅ **当前项目状态(2025-11-18)** ### 🎯 **核心功能(生产级就绪)** - ✅ **多模型 RAG 问答**:通义千问/DeepSeek/Kimi/Ollama 热切换,无需重启 - ✅ **向量检索**:Redis Stack + all-MiniLM-L6-v2,余弦相似度 > 0.5 - ✅ **流式输出**:SSE 实时推送,支持异步调度 - ✅ **文档管理**:PDF/Word/Excel/Markdown 上传解析、版本管理、标签分类 - ✅ **智能评分**:自动评估相关性、完整性、幻觉程度,生成 Dashboard 数据分析 - ✅ **会话记忆**:自动管理对话上下文(轮数/Token/时间限制) ### 🔒 **安全与权限** - ✅ **JWT 认证**:无状态 Token + RefreshToken 机制 - ✅ **RBAC 权限**:User-Role-Permission 三层模型(ADMIN/USER/GUEST) - ✅ **Spring Security**:CORS 配置、密码加密(BCrypt)、接口防护 - ✅ **自动初始化**:默认管理员账户(admin/admin123) ### 📦 **容器化与部署** - ✅ **Docker 多阶段构建**:Maven 构建 + JRE 运行分离,镜像分层优化 - ✅ **GraalVM 原生镜像**:启动 < 50ms,内存 < 100MB,镜像 < 100MB - ✅ **docker-compose**:完整的健康检查、资源限制、日志收集、网络隔离 - ✅ **生产环境配置**:双实例 + Nginx 负载均衡 + SSL/HTTPS 支持 - ✅ **一键脚本**:docker-build.cmd / docker-start.cmd ### 📊 **监控与可观测性** - ✅ **Prometheus 监控**:自动抓取应用指标,30天数据保留 - ✅ **Grafana Dashboard**:12个监控面板(QPS、响应时间、JVM、GC、业务指标) - ✅ **自定义业务指标**:问答次数、缓存命中率、评分分布、模型使用统计 - ✅ **自动化告警**:8种告警规则(应用宕机、高响应时间、高错误率、JVM内存等) - ✅ **Actuator 端点**:/actuator/health、/actuator/prometheus ### 🧪 **测试与质量保障** - ✅ **单元测试**:19个测试用例,100% 通过率,覆盖核心业务逻辑 - ✅ **集成测试**:Testcontainers 真实环境测试 - ✅ **性能测试**:Gatling + JMH,平均响应 220ms,P95 260ms - ✅ **JaCoCo 覆盖率**:代码覆盖率报告生成 ### ⚡ **性能优化** - ✅ **虚拟线程**:JDK 21 Project Loom,支持 10000+ 并发,内存占用降低 99% - ✅ **Redis 缓存**:5分钟 TTL,缓存命中率监控 - ✅ **异步处理**:文档上传分块向量化、进度回调 - ✅ **参数调优**:相似度阈值 0.5、Top 10 检索、JVM G1GC --- ## 🧩 技术栈总览(已验证) ### 后端技术栈 | 组件 | 技术选型 | 版本 | 说明 | | --- | --- | --- | --- | | **JVM** | GraalVM JDK | 21.0.8+12.1 | AOT 原生镜像编译,启动 < 50ms | | **构建工具** | Maven | 3.9+ | 依赖管理、Native 插件支持 | | **框架底座** | Spring Boot | 3.2.10 | 微服务快速开发框架 | | **Web 层** | Spring Web | 6.1.x | REST API、MVC 支持 | | **并发模型** | 虚拟线程 | JDK 21 | Project Loom,支持 1M+ 并发 | | **数据访问** | Spring Data JPA | 6.1.x | ORM 框架、自动建表支持 | | **缓存层** | Spring Data Redis | 6.1.x | 热点缓存、会话存储 | | **AI 编排** | LangChain4J | 0.34.0 | RAG、向量检索、多模型对接 | | **Embedding** | all-MiniLM-L6-v2 | 0.34.0 | 轻量级向量模型,本地 CPU 运行 | | **文件解析** | Apache Tika | 2.9.1 | PDF/Word/Excel/Markdown 支持 | | **文件处理** | Apache POI | 5.2.5 | Excel 读写 | | **PDF 处理** | Apache PDFBox | 2.0.28 | PDF 文本提取 | | **安全框架** | Spring Security | 6.1.x | JWT + RBAC 权限管理 | | **JWT 实现** | jjwt | 0.12.3 | JSON Web Token 处理 | | **参数校验** | Spring Validation | 6.1.x | Bean Validation 标准 | | **环境变量** | dotenv-java | 3.0.0 | .env 文件加载 | | **监控指标** | Spring Boot Actuator | 3.2.10 | 健康检查、应用指标 | | **Prometheus** | Micrometer | Latest | 指标导出、Prometheus 集成 | | **测试框架** | JUnit 5 | 5.11+ | 单元测试框架 | | **Mock 框架** | Mockito | Latest | Mock 对象、测试双身 | | **测试容器** | Testcontainers | 1.19.3 | 真实数据库集成测试 | | **性能测试** | Gatling | 3.9.5 | 分布式负载测试 | | **基准测试** | JMH | 1.37 | 代码基准性能测试 | | **覆盖率** | JaCoCo | 0.8.11 | 代码覆盖率分析 | ### 前端技术栈 | 组件 | 技术选型 | 版本 | 说明 | | --- | --- | --- | --- | | **框架** | Vue | 3.5.22 | 组合式 API、响应式系统 | | **路由** | Vue Router | 4.5.1 | SPA 路由管理 | | **状态管理** | Pinia | 3.0.3 | 全局 Store、模块化存储 | | **构建工具** | Vite | 7.1.7 | 秒级 HMR 热更新 | | **包管理器** | pnpm | 9.15.9 | 快 3 倍、节省磁盘空间 | | **语言** | TypeScript | 5.9 | 类型安全开发 | | **UI 组件库** | Naive UI | 2.43.1 | 完整组件系统、主题支持 | | **CSS 框架** | Tailwind CSS | 4.1.14 | 原子化 CSS、零自定义样式 | | **HTTP 客户端** | Axios | 1.12.2 | 请求拦截器、超时配置 | | **图表库** | ECharts | 5.5.0 | 数据可视化、Dashboard 仪表板 | | **图标库** | @vicons/ionicons5 | 0.13.0 | Ionicons 5 图标集 | | **代码检查** | ESLint | 9.33.0 | 代码规范检查 | | **代码格式** | Prettier | 3.6.2 | 保存自动格式化 | | **Node 环境** | Node.js | 20.19.0+ / 22.12.0+ | 前端开发环境 | ### 数据库与中间件 | 组件 | 版本 | 端口 | 说明 | | --- | --- | --- | --- | | **MySQL** | 8.0 | 3307(Docker) | 关系数据存储、自动建表 | | **Redis Stack** | Latest | 6379(Redis), 8888(RedisInsight) | 向量存储、缓存、会话 | | **Elasticsearch** | 7.17.0 | 9200 | 全文搜索、向量混合检索 | | **Prometheus** | Latest | 9090 | 时序数据库、指标收集 | | **Grafana** | Latest | 3000 | 监控仪表板、数据可视化 | ### 容器化与部署 | 组件 | 说明 | | --- | --- | | **Docker** | 多阶段构建、镜像优化 | | **docker-compose** | 开发环境一键启动(MySQL、Redis、ES、Prometheus、Grafana) | | **GraalVM Native** | 原生镜像编译,启动 < 50ms,内存 < 100MB | | **JVM 参数** | G1GC、内存 512M/256M、MaxRAMPercentage 75% | --- ## 🤖 AI 模型配置(热切换) ### 支持的模型列表 | 模型 | 类型 | 配置名 | 基础 URL | 默认模型 | 备注 | | --- | --- | --- | --- | --- | --- | | **通义千问** | 商业模型 | `qwen` | https://dashscope.aliyuncs.com/compatible-mode/v1 | qwen-turbo | 阿里云 API,需 DASHSCOPE_API_KEY | | **DeepSeek** | 商业模型 | `deepseek` | https://api.deepseek.com | deepseek-chat | 深度求索 API,国内无需翻墙 | | **Kimi** | 商业模型 | `kimi` | https://api.moonshot.cn/v1 | moonshot-v1-8k | 月之暗面 API,需 KIMI_API_KEY | | **Ollama** | 本地模型 | `ollama` | http://localhost:11434 | qwen2:7b | 离线部署,零成本,支持多模型 | ### 配置文件位置 ```yaml # application.yml 中的模型配置 langchain4j: defaultModel: deepseek # 默认使用 DeepSeek qwen: apiKey: ${DASHSCOPE_API_KEY} baseUrl: https://dashscope.aliyuncs.com/compatible-mode/v1 modelName: qwen-turbo deepseek: apiKey: ${DEEPSEEK_API_KEY} baseUrl: https://api.deepseek.com modelName: deepseek-chat kimi: apiKey: ${KIMI_API_KEY} baseUrl: https://api.moonshot.cn/v1 modelName: moonshot-v1-8k ollama: baseUrl: http://localhost:11434 modelName: qwen2:7b ``` ### 模型切换方式 1. **配置文件切换**:修改 `application.yml` 中的 `defaultModel` 值,无需重启(支持热切换) 2. **API 请求切换**:通过 `/api/ai/chat` 接口参数 `model` 指定模型 3. **环境变量**:设置 `DASHSCOPE_API_KEY`、`DEEPSEEK_API_KEY`、`KIMI_API_KEY` 启用商业模型 ### 环境变量配置 ```bash # 通义千问(可选) export DASHSCOPE_API_KEY=sk-xxxxxx # DeepSeek(推荐,默认启用) export DEEPSEEK_API_KEY=sk-xxxxxx # Kimi(可选) export KIMI_API_KEY=sk-xxxxxx # Ollama(本地,无需密钥) # 默认访问 http://localhost:11434 ``` --- ## 📦 核心依赖坐标 ### Spring Boot 基座 ```xml org.springframework.boot spring-boot-starter-parent 3.2.10 ``` ### Web 与数据访问 ```xml org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-validation org.springframework.boot spring-boot-starter-data-jpa org.springframework.boot spring-boot-starter-data-redis com.mysql mysql-connector-j runtime ``` ### 安全认证 ```xml org.springframework.boot spring-boot-starter-security io.jsonwebtoken jjwt-api 0.12.3 io.jsonwebtoken jjwt-impl 0.12.3 runtime io.jsonwebtoken jjwt-jackson 0.12.3 runtime ``` ### AI 与向量检索(LangChain4J) ```xml dev.langchain4j langchain4j 0.34.0 dev.langchain4j langchain4j-core 0.34.0 dev.langchain4j langchain4j-open-ai 0.34.0 dev.langchain4j langchain4j-dashscope 0.34.0 dev.langchain4j langchain4j-ollama 0.34.0 dev.langchain4j langchain4j-embeddings-all-minilm-l6-v2 0.34.0 dev.langchain4j langchain4j-redis 0.34.0 dev.langchain4j langchain4j-elasticsearch 0.34.0 ``` ### 文件解析 ```xml org.apache.tika tika-core 2.9.1 org.apache.tika tika-parsers-standard-package 2.9.1 org.apache.poi poi 5.2.5 org.apache.poi poi-ooxml 5.2.5 org.apache.pdfbox pdfbox 2.0.28 ``` ### 监控与指标 ```xml org.springframework.boot spring-boot-starter-actuator io.micrometer micrometer-registry-prometheus ``` ### 测试依赖 ```xml org.springframework.boot spring-boot-starter-test test org.testcontainers testcontainers 1.19.3 test org.testcontainers junit-jupiter 1.19.3 test org.testcontainers mysql 1.19.3 test org.assertj assertj-core 3.24.2 test org.mockito mockito-core test org.mockito mockito-junit-jupiter test io.gatling.highcharts gatling-charts-highcharts 3.9.5 test org.openjdk.jmh jmh-core 1.37 test org.openjdk.jmh jmh-generator-annprocess 1.37 test ``` ### 工具与配置 ```xml org.springframework.boot spring-boot-configuration-processor true io.github.cdimascio dotenv-java 3.0.0 ``` ### 构建插件 ```xml org.hibernate.orm.tooling hibernate-enhance-maven-plugin ${hibernate.version} org.graalvm.buildtools native-maven-plugin ai-knowledge-base com.kb.demo.AiKnowledgeBaseApplication org.springframework.boot spring-boot-maven-plugin org.jacoco jacoco-maven-plugin 0.8.11 io.gatling gatling-maven-plugin 4.3.7 ``` --- --- ## 📦 前端 NPM 依赖(package.json) ### 核心框架与工具 ```json { "name": "ai-assistant-front", "version": "0.0.0", "type": "module", "engines": { "node": "^20.19.0 || >=22.12.0" }, "dependencies": { "vue": "^3.5.22", "vue-router": "^4.5.1", "pinia": "^3.0.3", "naive-ui": "^2.43.1", "tailwindcss": "^4.1.14", "axios": "^1.12.2", "echarts": "^5.5.0", "@vicons/ionicons5": "^0.13.0" }, "devDependencies": { "vite": "^7.1.7", "@vitejs/plugin-vue": "^6.0.1", "typescript": "~5.9.0", "vue-tsc": "^3.1.0", "eslint": "^9.33.0", "eslint-plugin-vue": "~10.4.0", "@vue/eslint-config-typescript": "^14.6.0", "@vue/eslint-config-prettier": "^10.2.0", "prettier": "3.6.2" } } ``` ### 快速安装命令 ```bash cd ai-assistant-front pnpm install ``` --- ## 🌐 环境变量配置 ### 后端环境变量(.env 文件) ```bash # AI 模型 API 密钥(可选,根据使用的模型配置) DASHSCOPE_API_KEY=sk-xxxxx # 通义千问 DEEPSEEK_API_KEY=sk-xxxxx # DeepSeek(推荐) KIMI_API_KEY=sk-xxxxx # Kimi # 数据库配置(Docker 环境自动注入) DB_HOST=localhost DB_PORT=3307 # Redis 配置(Docker 环境自动注入) REDIS_HOST=localhost REDIS_PORT=6379 # Elasticsearch 配置(Docker 环境自动注入) ES_HOST=http://localhost:9200 ``` ### 前端开发配置(自动代理) 前端 `vite.config.ts` 已配置代理,API 请求自动转发到后端: ```typescript // http://localhost:5173/api/* → http://localhost:8080/api/* ``` --- ## 🗄️ 数据库表结构说明 ### 核心业务表 | 表名 | 说明 | 状态 | | --- | --- | --- | | `documents` | 文档主表(支持版本管理) | ✅ 已实现 | | `document_chunks` | 文档分块表(向量化后存储) | ✅ 已实现 | | `document_versions` | 文档版本历史 | ✅ 已实现 | | `document_categories` | 文档分类管理 | ✅ 已实现 | | `document_tags` | 文档标签管理 | ✅ 已实现 | | `upload_progress` | 文件上传进度追踪 | ✅ 已实现 | | `answer_evaluations` | 答案评分评估数据 | ✅ 已实现 | ### 安全与权限表 | 表名 | 说明 | 状态 | | --- | --- | --- | | `users` | 用户账户 | ✅ 已实现 | | `roles` | 角色定义(ADMIN/USER/GUEST) | ✅ 已实现 | | `permissions` | 权限定义 | ✅ 已实现 | | `session_messages` | 会话消息记录 | ✅ 已实现 | ### 自动建表说明 - JPA 使用 `ddl-auto: update` 自动创建和更新表结构 - 首次启动时自动执行表创建 - MySQL 初始化脚本位于 `mysql/init.sql` --- ## 🚀 快速启动指南 ### 1. Docker 一键启动(推荐) ```bash # 进入项目根目录 cd d:\java-project\ai-knowledge-base # 启动全套服务(MySQL + Redis + ES + App + Prometheus + Grafana) cd docker docker-compose up -d # 查看服务状态 docker-compose ps ``` ### 2. 本地开发启动 **后端**: ```bash # 前提:MySQL 3307、Redis 6379、Elasticsearch 9200 已启动 # 方式 1:IDE 直接运行 # 运行 src/main/java/com/kb/demo/AiKnowledgeBaseApplication.java # 方式 2:Maven 命令 mvn spring-boot:run ``` **前端**: ```bash cd ai-assistant-front pnpm dev # 访问 http://localhost:5173 ``` ### 3. 访问地址 | 服务 | 地址 | 用户名/密码 | | --- | --- | --- | | **应用首页** | http://localhost:8200 | admin / admin123 | | **Grafana** | http://localhost:3000 | admin / admin123 | | **Prometheus** | http://localhost:9090 | - / - | | **Elasticsearch** | http://localhost:9200 | - / - | | **Redis InsightUI** | http://localhost:8888 | - / - | | **MySQL** | localhost:3307 | root / root | --- ## 🔑 默认账户 | 账户 | 密码 | 权限 | | --- | --- | --- | | `admin` | `admin123` | ADMIN(全部权限) | | `user` | `user123` | USER(普通用户) | | `guest` | `guest123` | GUEST(只读权限) | > 首次启动时自动初始化这些账户,脚本位于 `src/main/java/com/kb/demo/init/DataInitializer.java` --- ## 🛠️ 常用开发命令 ### 后端 ```bash # 编译项目 mvn clean compile # 运行单元测试 mvn test # 生成测试覆盖率报告 mvn jacoco:report # 构建 JAR mvn clean package # 构建 GraalVM 原生镜像 mvn native:compile # 性能测试(Gatling) mvn gatling:test ``` ### 前端 ```bash # 启动开发服务器 pnpm dev # 类型检查 pnpm type-check # 构建生产包 pnpm build # 代码检查与修复 pnpm lint # 代码格式化 pnpm format ``` ### Docker ```bash # 构建镜像 cd scripts .\docker-build.cmd # 启动所有服务 .\docker-start.cmd # 清理 Redis 索引 .\clean-redis-index.cmd # 监控测试 .\test-monitoring.cmd ``` --- ## 🧪 测试覆盖情况 | 类型 | 用例数 | 状态 | 覆盖率 | | --- | --- | --- | --- | | **单元测试** | 19 | ✅ 100% 通过 | 50% | | **集成测试** | 5 | ✅ 通过 | - | | **性能测试** | Gatling | ✅ P95 260ms | - | | **代码覆盖率** | JaCoCo | ✅ 报告生成 | 50%+ | ### 运行测试 ```bash # 单元测试 mvn test # 集成测试 mvn verify # 性能测试(需 GraalVM) mvn gatling:test # 覆盖率报告(生成在 target/site/jacoco/index.html) mvn jacoco:report ``` --- ## 🔐 环境变量(开发阶段默认值) | 变量 | 示例值 | 说明 | | --- | --- | --- | | `OPENAI_API_KEY` | sk-xxx | 调用 OpenAI | | `DASHSCOPE_API_KEY` | sk-xxx | 调用通义千问 | | `DEEPSEEK_API_KEY` | sk-xxx | 调用 DeepSeek | | `KIMI_API_KEY` | sk-xxx | 调用 Kimi | | `DB_HOST` | localhost | 数据库地址 | | `DB_PORT` | 3307 | 数据库端口 | | `REDIS_HOST` | localhost | Redis 地址 | | `REDIS_PORT` | 6379 | Redis 端口 | | `ES_HOST` | localhost:9200 | Elasticsearch 地址 | --- ## 📏 代码规范(IDE 已配置) - Java:Google Java Format + Save Action - Vue:ESLint + Prettier(保存即格式化) - 提交信息:`feat: 新增问答接口` / `fix: 修复向量检索空指针` - 分支模型:main → feature → PR → squash merge --- ## 📖 项目快速参考 ### API 接口汇总 | 端点 | 方法 | 说明 | 认证 | | --- | --- | --- | --- | | `/api/auth/login` | POST | 用户登录获取 JWT | ❌ | | `/api/auth/register` | POST | 用户注册 | ❌ | | `/api/auth/refresh` | POST | 刷新 Token | ✅ | | `/api/ai/chat` | POST | 提问(流式响应) | ✅ | | `/api/documents/upload` | POST | 上传文档(异步处理) | ✅ | | `/api/documents/list` | GET | 获取文档列表 | ✅ | | `/api/documents/{id}` | GET | 获取文档详情 | ✅ | | `/api/documents/{id}` | DELETE | 删除文档 | ✅ | | `/api/documents/{id}/versions` | GET | 获取版本历史 | ✅ | | `/api/vector-search/search` | POST | 向量检索 | ✅ | | `/api/analytics/metrics` | GET | 获取分析指标 | ✅ | | `/api/analytics/evaluations` | GET | 获取答案评分统计 | ✅ | | `/actuator/health` | GET | 应用健康检查 | ❌ | | `/actuator/prometheus` | GET | Prometheus 指标 | ❌ | ### 关键配置文件 | 文件 | 用途 | 位置 | | --- | --- | --- | | `application.yml` | 后端应用配置(模型、数据库、日志等) | `src/main/resources/` | | `docker-compose.yml` | Docker 编排配置(MySQL、Redis、ES、Prometheus、Grafana) | `docker/` | | `pom.xml` | Maven 依赖和构建配置 | 项目根目录 | | `package.json` | 前端依赖配置 | `ai-assistant-front/` | | `.env` | 环境变量(API 密钥等) | 项目根目录 | ### 常见问题排查 | 问题 | 排查步骤 | 解决方案 | | --- | --- | --- | | **MySQL 连接失败** | 1. 检查 docker-compose ps
2. 检查连接字符串
3. 检查用户名密码 | 确保 MySQL 容器运行,默认用户 root/root,端口 3307 | | **Redis 连接失败** | 1. 确认使用 Redis Stack
2. 检查端口 6379
3. 检查向量索引 | 必须使用 Redis Stack(含 RediSearch),普通 Redis 不支持向量检索 | | **模型 API 无效** | 1. 检查 .env 密钥
2. 测试 API 密钥
3. 检查网络连接 | 确保 API 密钥正确,网络可访问 API 服务 | | **前端 CORS 错误** | 1. 检查后端 CorsConfig
2. 验证前端域名
3. 重启后端应用 | 修改 `CorsConfig.java`,将前端地址加入白名单,重启生效 | | **Prometheus 无数据** | 1. 确保应用启动
2. 访问 /actuator/prometheus
3. 查看 Prometheus 配置 | 应用需要正常运行,指标端点需可访问 | | **虚拟线程不生效** | 1. 确认 JDK 版本 ≥ 21
2. 检查 application.yml 配置
3. 查看日志 | 需要 JDK 21+,配置 `spring.threads.virtual.enabled=true` | | **文档上传超时** | 1. 检查文件大小
2. 增加 axios timeout
3. 检查后端资源 | 默认最大文件 10MB,超大文件增加超时时间 | | **向量检索无结果** | 1. 检查文档是否上传
2. 查看 Redis 向量数据
3. 检查相似度阈值 | 确保文档已处理,相似度阈值默认 0.5 | --- ## 📁 项目结构说明 ``` ai-knowledge-base/ ├── .env # 环境变量配置(API密钥、数据库连接等) ├── .gitattributes # Git属性配置 ├── .gitignore # Git忽略文件配置 ├── mvnw / mvnw.cmd # Maven Wrapper脚本(跨平台) ├── pom.xml # Maven项目配置(依赖管理、构建配置) ├── README.md # 项目说明文档 │ ├── src/ # 后端源代码目录 │ ├── main/ │ │ ├── java/com/kb/demo/ # Java业务代码根包 │ │ │ ├── AiKnowledgeBaseApplication.java # Spring Boot启动类 │ │ │ │ │ │ │ ├── config/ # 配置类目录 │ │ │ │ ├── AsyncConfig.java # 异步任务配置(线程池) │ │ │ │ ├── CorsConfig.java # 跨域配置 │ │ │ │ ├── JpaConfig.java # JPA配置 │ │ │ │ ├── ModelConfig.java # AI模型配置 │ │ │ │ ├── RedisConfig.java # Redis配置 │ │ │ │ ├── SecurityConfig.java # Spring Security配置 │ │ │ │ └── VirtualThreadConfig.java # 虚拟线程配置 │ │ │ │ │ │ │ ├── controller/ # REST接口层(Controller) │ │ │ │ ├── AiController.java # AI问答接口 │ │ │ │ ├── AnalyticsController.java # 数据分析接口 │ │ │ │ ├── AuthController.java # 认证授权接口 │ │ │ │ ├── DocumentCategoryController.java # 文档分类接口 │ │ │ │ ├── DocumentController.java # 文档管理接口 │ │ │ │ ├── DocumentTagController.java # 文档标签接口 │ │ │ │ ├── DocumentVersionController.java # 文档版本接口 │ │ │ │ ├── FileUploadController.java # 文件上传接口 │ │ │ │ └── VectorSearchController.java # 向量检索接口 │ │ │ │ │ │ │ ├── dto/ # 数据传输对象 │ │ │ │ ├── AnswerEvaluationDTO.java # 答案评估DTO │ │ │ │ ├── DocumentCategoryDTO.java # 文档分类DTO │ │ │ │ ├── DocumentCategoryTagDTO.java # 分类标签DTO │ │ │ │ ├── DocumentCreateDTO.java # 文档创建DTO │ │ │ │ ├── DocumentTagDTO.java # 文档标签DTO │ │ │ │ ├── JwtResponse.java # JWT响应DTO │ │ │ │ ├── LoginRequest.java # 登录请求DTO │ │ │ │ ├── RegisterRequest.java # 注册请求DTO │ │ │ │ └── UploadProgressDTO.java # 上传进度DTO │ │ │ │ │ │ │ ├── entity/ # JPA实体类(数据库表映射) │ │ │ │ ├── AnswerEvaluation.java # 答案评估实体 │ │ │ │ ├── Document.java # 文档主表实体 │ │ │ │ ├── DocumentCategory.java # 文档分类实体 │ │ │ │ ├── DocumentCategoryRelation.java # 文档分类关系实体 │ │ │ │ ├── DocumentChunk.java # 文档分块实体 │ │ │ │ ├── DocumentTag.java # 文档标签实体 │ │ │ │ ├── DocumentTagRelation.java # 文档标签关系实体 │ │ │ │ ├── DocumentVersion.java # 文档版本实体 │ │ │ │ ├── Permission.java # 权限实体 │ │ │ │ ├── Role.java # 角色实体 │ │ │ │ ├── SessionMessage.java # 会话消息实体 │ │ │ │ ├── UploadProgress.java # 上传进度实体 │ │ │ │ └── User.java # 用户实体 │ │ │ │ │ │ │ ├── init/ # 初始化脚本 │ │ │ │ ├── DataInitializer.java # 数据初始化器 │ │ │ │ └── RolePermissionInitializer.java # 角色权限初始化器 │ │ │ │ │ │ │ ├── repository/ # 数据访问层(Repository) │ │ │ │ ├── AnswerEvaluationRepository.java # 答案评估数据访问 │ │ │ │ ├── DocumentCategoryRelationRepository.java # 分类关系访问 │ │ │ │ ├── DocumentCategoryRepository.java # 分类数据访问 │ │ │ │ ├── DocumentChunkRepository.java # 文档分块访问 │ │ │ │ ├── DocumentRepository.java # 文档数据访问 │ │ │ │ ├── DocumentTagRelationRepository.java # 标签关系访问 │ │ │ │ ├── DocumentTagRepository.java # 标签数据访问 │ │ │ │ ├── DocumentVersionRepository.java # 文档版本访问 │ │ │ │ ├── PermissionRepository.java # 权限数据访问 │ │ │ │ ├── RoleRepository.java # 角色数据访问 │ │ │ │ ├── UploadProgressRepository.java # 上传进度访问 │ │ │ │ └── UserRepository.java # 用户数据访问 │ │ │ │ │ │ │ ├── security/ # 安全配置 │ │ │ │ ├── JwtAuthenticationFilter.java # JWT认证过滤器 │ │ │ │ └── JwtTokenProvider.java # JWT令牌提供者 │ │ │ │ │ │ │ └── service/ # 业务逻辑层(Service) │ │ │ ├── AiService.java # AI问答服务 │ │ │ ├── AnalyticsService.java # 数据分析服务 │ │ │ ├── AuthService.java # 认证授权服务 │ │ │ ├── ChatMemoryStore.java # 聊天记忆存储 │ │ │ ├── CustomUserDetailsService.java # 用户详情服务 │ │ │ ├── DocumentCategoryService.java # 文档分类服务 │ │ │ ├── DocumentCategoryTagService.java # 分类标签服务 │ │ │ ├── DocumentChunkService.java # 文档分块服务 │ │ │ ├── DocumentProcessingService.java # 文档处理服务 │ │ │ ├── DocumentService.java # 文档管理服务 │ │ │ ├── DocumentTagService.java # 文档标签服务 │ │ │ ├── DocumentVersionService.java # 文档版本服务 │ │ │ ├── FileParseService.java # 文件解析服务 │ │ │ ├── MetricsService.java # 指标监控服务 │ │ │ ├── ModelFactory.java # AI模型工厂 │ │ │ ├── ResponseEvaluationService.java # 响应评估服务 │ │ │ └── VectorSearchService.java # 向量检索服务 │ │ │ │ │ └── resources/ # 资源文件目录 │ │ ├── application.yml # Spring Boot应用配置 │ │ ├── META-INF/native-image/ # GraalVM原生镜像配置 │ │ ├── static/ # 静态资源 │ │ │ ├── favicon.ico # 网站图标 │ │ │ └── index.html # 前端入口HTML │ │ └── templates/ # 模板文件(Thymeleaf等) │ │ │ └── test/ # 测试代码目录 │ ├── java/com/kb/demo/ # Java测试代码 │ └── scala/com/kb/ # Scala测试代码(Gatling性能测试) │ ├── ai-assistant-front/ # 前端Vue3项目目录 │ ├── .editorconfig # 编辑器配置 │ ├── .gitattributes # Git属性配置 │ ├── .gitignore # Git忽略文件 │ ├── .prettierrc.json # Prettier代码格式化配置 │ ├── README.md # 前端项目说明 │ ├── env.d.ts # 环境变量类型定义 │ ├── eslint.config.ts # ESLint代码检查配置 │ ├── index.html # 前端入口HTML文件 │ ├── package-lock.json # NPM依赖锁定文件 │ ├── package.json # NPM依赖配置 │ ├── pnpm-lock.yaml # PNPM依赖锁定文件 │ ├── tailwind.config.js # TailwindCSS配置 │ ├── tsconfig.app.json # TypeScript应用配置 │ ├── tsconfig.json # TypeScript基础配置 │ ├── tsconfig.node.json # TypeScript Node.js配置 │ ├── vite.config.ts # Vite构建工具配置 │ ├── public/ │ │ └── favicon.ico # 前端网站图标 │ │ │ └── src/ # 前端源代码目录 │ ├── App.vue # Vue应用根组件 │ ├── main.ts # 前端应用入口文件 │ ├── assets/ # 前端静态资源 │ │ ├── base.css # 基础样式 │ │ ├── logo.svg # 项目Logo │ │ └── main.css # 主样式文件 │ │ │ ├── components/ # Vue组件目录 │ │ ├── ChatComponent.vue # 聊天组件 │ │ ├── DashboardComponent.vue # 仪表板组件 │ │ ├── DocumentComponent.vue # 文档组件 │ │ ├── DocumentVersionComponent.vue # 文档版本组件 │ │ ├── FileUploadComponent.vue # 文件上传组件 │ │ ├── HelloWorld.vue # 示例组件 │ │ ├── TheWelcome.vue # 欢迎组件 │ │ ├── VectorSearchComponent.vue # 向量搜索组件 │ │ ├── WelcomeItem.vue # 欢迎项组件 │ │ └── icons/ # 图标组件目录 │ │ ├── IconCommunity.vue # 社区图标 │ │ ├── IconDocumentation.vue # 文档图标 │ │ ├── IconEcosystem.vue # 生态图标 │ │ ├── IconSupport.vue # 支持图标 │ │ └── IconTooling.vue # 工具图标 │ │ │ ├── router/ # Vue Router路由配置 │ │ └── index.ts # 路由定义文件 │ │ │ ├── services/ # 前端服务层 │ │ └── api.ts # API调用封装 │ │ │ ├── stores/ # Pinia状态管理 │ │ ├── auth.ts # 认证状态管理 │ │ └── counter.ts # 计数器状态管理 │ │ │ └── views/ # Vue页面组件 │ ├── AboutView.vue # 关于页面 │ ├── DashboardView.vue # 仪表板页面 │ ├── HomeView.vue # 首页 │ ├── LoginView.vue # 登录页面 │ ├── RegisterView.vue # 注册页面 │ └── VectorSearchView.vue # 向量搜索页面 │ ├── docker/ # Docker相关文件集中管理 │ ├── .dockerignore # Docker构建忽略文件 │ ├── Dockerfile # JVM版本Docker镜像(多阶段构建) │ ├── Dockerfile.native # GraalVM原生镜像Dockerfile │ ├── docker-compose.yml # 开发环境Docker编排 │ ├── docker-compose.prod.yml # 生产环境Docker编排(双实例+Nginx) │ │ │ ├── grafana/ # Grafana监控配置 │ │ ├── dashboards/ # 仪表板配置 │ │ │ └── ai-knowledge-base-dashboard.json # AI知识库仪表板 │ │ └── provisioning/ # 自动配置目录 │ │ ├── dashboards/ # 仪表板自动配置 │ │ │ └── dashboard.yml │ │ └── datasources/ # 数据源配置 │ │ └── prometheus.yml │ │ │ ├── nginx/ # Nginx配置目录 │ │ └── nginx.conf # 反向代理配置 │ │ │ └── prometheus/ # Prometheus监控配置 │ ├── alert_rules.yml # 告警规则配置 │ └── prometheus.yml # Prometheus主配置 │ ├── scripts/ # 脚本文件集中管理 │ ├── build-native.cmd # GraalVM原生镜像构建脚本 │ ├── check-mysql.bat # MySQL服务检查脚本 │ ├── check-redis.bat # Redis服务检查脚本 │ ├── clean-redis-index.cmd # Redis索引清理脚本 │ ├── docker-build.cmd # Docker镜像构建脚本 │ ├── docker-start.cmd # Docker服务启动脚本 │ ├── mvnw21.cmd # Maven Wrapper脚本(JDK 21专用) │ ├── performance-test.cmd # 性能测试脚本(Gatling) │ ├── simple-performance-test.cmd # 简易性能测试脚本 │ ├── start-local.cmd # 本地开发启动脚本 │ ├── switch-to-local-dev.cmd # 切换到本地开发模式脚本 │ ├── test-metrics.cmd # 指标测试脚本 │ └── test-monitoring.cmd # 监控测试脚本 │ ├── docs/ # 项目文档目录(分类管理) │ ├── mysql/ # MySQL数据库相关文件 │ ├── init.sql # 数据库初始化脚本 │ ├── 02-add-evaluation-tables.sql # 评估表添加脚本 │ └── add-file-type-column.sql # 文件类型列添加脚本 │ ├── mysql-init/ # MySQL初始化目录(预留) │ └── .mvn/ # Maven Wrapper配置目录 ├── jvm.config # JVM配置 ├── settings.xml # Maven设置 └── wrapper/ # Maven Wrapper相关 └── maven-wrapper.properties ``` ### 📌 目录分类原则 - **`scripts/`** - 所有执行脚本集中管理,包括 Docker 构建、服务启动、性能测试等 - **`docker/`** - Docker 相关配置集中管理,Dockerfile、docker-compose、Nginx 配置等 --- ## 🚀 性能基线(开发机实测) | 指标 | 数值 | 环境 | | --- | --- | --- | | 启动时间 | < 50 ms | GraalVM 原生镜像 | | 内存占用 | < 80 MB | 容器限制 128 M | | 并发 QPS | 200+ | 虚拟线程 + Redis 缓存 | | 镜像大小 | 60 M | 原生可执行文件 | | 前端构建 | < 3 s | Vite + pnpm | --- ## 📌 后续迭代路线(已规划) | 阶段 | 目标 | 技术点 | | --- | --- | --- | | V1.0 | 单模型问答 | LangChain4J + Redis 向量 | | V1.1 | 流式输出 | Server-Sent Events | | V1.2 | 多模型切换 | Qwen/Claude/Ollama | | V1.3 | PDF 上传解析 | Apache Tika + 分块 | | V1.4 | 权限体系 | Spring Security + JWT | | V1.5 | 网关+注册 | Spring Cloud Gateway + Nacos | | V2.0 | K8s GitOps | Helm + ArgoCD + SkyWalking | --- ## 📞 联系方式 & 贡献 - 项目地址(Gitee):`https://gitee.com/li-jinglin251/todo-full-stack-try` - 提交 PR → 自动 CI → 镜像构建 → K8s 滚动发布 - Issue 模板:Bug/Feature/Question 已内置 --- ## 🔗 项目参考与资源 ### 官方文档 - **LangChain4J**:https://github.com/langchain4j/langchain4j - **Spring Boot**:https://spring.io/projects/spring-boot - **Vue 3**:https://vuejs.org - **Redis**:https://redis.io - **Elasticsearch**:https://www.elastic.co/guide/ - **Docker**:https://docs.docker.com - **Kubernetes**:https://kubernetes.io/docs/ ---