1230 lines
34 KiB
Markdown
1230 lines
34 KiB
Markdown
# AI心理健康测评系统 - 项目架构说明
|
||
|
||
## 📋 项目概述
|
||
|
||
**项目名称**:DDNAIAI心理健康测评系统 (ry-xinli)
|
||
**项目版本**:1.0.0
|
||
**技术架构**:前后端分离 + AI微服务
|
||
**开发团队**:DDNAI
|
||
|
||
这是一个集成了AI大模型和RAG知识库的智能心理健康测评系统,提供专业的心理量表测评、智能分析和个性化建议。
|
||
|
||
---
|
||
|
||
## 🎯 核心功能模块
|
||
|
||
### 1. 心理量表测评系统
|
||
- **量表管理**
|
||
- 支持多种标准心理量表(焦虑自评量表SAS、抑郁自评量表SDS等)
|
||
- 量表配置管理(题目、选项、因子、计分规则)
|
||
- 量表权限控制与分配
|
||
- 量表导入导出(JSON格式)
|
||
|
||
- **在线测评**
|
||
- 用户在线答题
|
||
- 自动计分与因子分析
|
||
- 实时保存答题进度
|
||
- 支持移动端和Web端
|
||
|
||
- **测评报告**
|
||
- 自动生成专业测评报告
|
||
- 多维度因子分析
|
||
- 分数解释与等级评定
|
||
- 历史报告查询与对比
|
||
|
||
### 2. AI智能分析
|
||
- **大模型集成**
|
||
- 集成Ollama本地大模型
|
||
- 支持多种开源模型(Llama、Qwen等)
|
||
- 可配置模型地址和参数
|
||
|
||
- **RAG知识库增强**
|
||
- 基于专业心理学知识库
|
||
- 语义检索相关知识
|
||
- 上下文增强生成
|
||
- 提高分析专业性和准确性
|
||
|
||
- **智能分析功能**
|
||
- 测评结果深度解读
|
||
- 个性化心理健康建议
|
||
- 心理状态趋势分析
|
||
- 专业术语解释
|
||
|
||
|
||
### 3. RAG知识库管理
|
||
- **文档管理**
|
||
- 支持多种格式(txt、md、pdf、docx)
|
||
- 文档上传与批量导入
|
||
- 文档分类与标签
|
||
- 文档版本管理
|
||
|
||
- **智能索引**
|
||
- 自动文档解析与分块
|
||
- 向量化存储(FAISS)
|
||
- 实时文件监控
|
||
- 增量索引更新
|
||
|
||
- **语义检索**
|
||
- 基于向量的语义搜索
|
||
- 支持中文语义理解
|
||
- Top-K相关文档检索
|
||
- 检索结果排序优化
|
||
|
||
- **知识库内容**
|
||
- 心理健康基础知识
|
||
- 心理量表专业解读
|
||
- 个性化分析案例库
|
||
- 青少年心理发展特点
|
||
|
||
### 4. 用户与权限管理
|
||
- **用户管理**
|
||
- 用户注册与登录
|
||
- 用户档案管理
|
||
- 用户分组与角色
|
||
- 测评历史记录
|
||
|
||
- **权限控制**
|
||
- 基于角色的访问控制(RBAC)
|
||
- 量表访问权限
|
||
- 数据隔离与安全
|
||
- 操作日志审计
|
||
|
||
- **用户画像**
|
||
- 基本信息管理
|
||
- 测评历史统计
|
||
- 心理健康档案
|
||
- 数据可视化展示
|
||
|
||
### 5. 心理风险预警系统
|
||
- **预警规则配置**
|
||
- 自定义预警条件
|
||
- 多维度风险评估
|
||
- 阈值动态调整
|
||
- 规则优先级管理
|
||
|
||
- **风险识别**
|
||
- 异常结果自动识别
|
||
- 高危人群筛查
|
||
- 趋势分析预警
|
||
- 多次测评对比
|
||
|
||
- **预警处理**
|
||
- 预警通知机制
|
||
- 预警记录管理
|
||
- 处理流程跟踪
|
||
- 统计分析报表
|
||
|
||
|
||
### 6. 门户网站功能
|
||
- **内容管理**
|
||
- 心理健康资讯发布
|
||
- 文章分类管理
|
||
- 富文本编辑器
|
||
- 图片上传管理
|
||
|
||
- **互动功能**
|
||
- 用户评论系统
|
||
- 内容点赞收藏
|
||
- 评论审核管理
|
||
- 敏感词过滤
|
||
|
||
- **门户展示**
|
||
- 首页内容推荐
|
||
- 分类浏览导航
|
||
- 搜索功能
|
||
- 响应式布局
|
||
|
||
### 7. 系统管理功能
|
||
- **菜单管理**:动态菜单配置
|
||
- **字典管理**:系统字典维护
|
||
- **参数配置**:系统参数设置
|
||
- **通知公告**:系统消息发布
|
||
- **日志管理**:操作日志、登录日志
|
||
- **在线用户**:在线用户监控
|
||
- **定时任务**:任务调度管理
|
||
- **代码生成**:快速生成CRUD代码
|
||
|
||
---
|
||
|
||
## 🏗️ 技术架构
|
||
|
||
### 整体架构图
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ 客户端层 │
|
||
├──────────────────────────┬──────────────────────────────────┤
|
||
│ Android App (Gradle) │ Web前端 (Vue.js) │
|
||
│ - WebView加载前端 │ - Element UI │
|
||
│ - 语音读题功能 │ - Axios HTTP │
|
||
│ - PaddleSpeech集成 │ - Vuex状态管理 │
|
||
└──────────────────────────┴──────────────────────────────────┘
|
||
↓
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ 网关层 │
|
||
├─────────────────────────────────────────────────────────────┤
|
||
│ Nginx (端口80) │
|
||
│ - 静态资源服务(前端dist) │
|
||
│ - API反向代理(/api → 后端30081) │
|
||
│ - 负载均衡 │
|
||
└─────────────────────────────────────────────────────────────┘
|
||
↓
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ Java应用层 (Spring Boot) │
|
||
├─────────────────────────────────────────────────────────────┤
|
||
│ 端口:30081 │
|
||
│ │
|
||
│ ├─ ry-xinli-admin (Web控制层) │
|
||
│ │ └─ Controller层:处理HTTP请求 │
|
||
│ │ │
|
||
│ ├─ ry-xinli-system (业务逻辑层) │
|
||
│ │ ├─ Service:业务逻辑实现 │
|
||
│ │ ├─ Mapper:数据访问接口 │
|
||
│ │ └─ Domain:实体类与VO │
|
||
│ │ │
|
||
│ ├─ ry-xinli-framework (框架核心) │
|
||
│ │ ├─ Security:安全认证(JWT) │
|
||
│ │ ├─ Config:系统配置 │
|
||
│ │ └─ Interceptor:拦截器 │
|
||
│ │ │
|
||
│ ├─ ry-xinli-common (通用工具) │
|
||
│ │ ├─ Utils:工具类 │
|
||
│ │ ├─ Exception:异常处理 │
|
||
│ │ └─ Annotation:自定义注解 │
|
||
│ │ │
|
||
│ ├─ ry-xinli-quartz (定时任务) │
|
||
│ │ └─ Quartz任务调度 │
|
||
│ │ │
|
||
│ └─ ry-xinli-generator (代码生成) │
|
||
│ └─ Velocity模板生成 │
|
||
└─────────────────────────────────────────────────────────────┘
|
||
↓
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ AI服务层 (Python) │
|
||
├─────────────────────────────────────────────────────────────┤
|
||
│ RAG知识库服务 (Flask) - 端口5000 │
|
||
│ ├─ app.py (Flask应用入口) │
|
||
│ ├─ document_parser.py (文档解析:PDF/DOCX/TXT/MD) │
|
||
│ ├─ text_splitter.py (文本分块:智能切分) │
|
||
│ ├─ vector_store.py (向量存储:FAISS索引) │
|
||
│ ├─ knowledge_service.py(知识库服务:检索与管理) │
|
||
│ └─ file_watcher.py (文件监控:自动索引) │
|
||
│ │
|
||
│ Ollama大模型服务 - 端口11434 │
|
||
│ ├─ 文本生成模型(Llama/Qwen等) │
|
||
│ ├─ 嵌入模型(nomic-embed-text) │
|
||
│ └─ 模型管理与推理 │
|
||
└─────────────────────────────────────────────────────────────┘
|
||
↓
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ 数据层 │
|
||
├──────────────────────────┬──────────────────────────────────┤
|
||
│ MySQL (端口3306) │ Redis (端口6379) │
|
||
│ - 业务数据存储 │ - 缓存与会话 │
|
||
│ - 量表配置数据 │ - Token管理 │
|
||
│ - 用户测评记录 │ - 分布式锁 │
|
||
│ - 系统配置数据 │ - 消息队列 │
|
||
└──────────────────────────┴──────────────────────────────────┘
|
||
```
|
||
|
||
|
||
### 技术栈详情
|
||
|
||
#### 后端技术栈(Java)
|
||
| 技术 | 版本 | 说明 |
|
||
|------|------|------|
|
||
| Spring Boot | 2.5.15 | 应用框架 |
|
||
| Spring Security | 5.7.14 | 安全认证 |
|
||
| Spring Framework | 5.3.39 | 核心框架 |
|
||
| MyBatis | - | ORM框架 |
|
||
| PageHelper | 1.4.7 | 分页插件 |
|
||
| Druid | 1.2.23 | 数据库连接池 |
|
||
| JWT | 0.9.1 | Token生成与解析 |
|
||
| Swagger | 3.0.0 | API文档 |
|
||
| FastJSON | 2.0.58 | JSON解析 |
|
||
| OkHttp | 4.12.0 | HTTP客户端 |
|
||
| POI | 4.1.2 | Excel/Word处理 |
|
||
| PDFBox | 2.0.29 | PDF处理 |
|
||
| Quartz | - | 定时任务 |
|
||
| Velocity | 2.3 | 模板引擎 |
|
||
| Kaptcha | 2.3.3 | 验证码 |
|
||
| ZXing | 3.5.1 | 二维码生成 |
|
||
|
||
#### 前端技术栈(Vue)
|
||
| 技术 | 版本 | 说明 |
|
||
|------|------|------|
|
||
| Vue.js | 2.x | 前端框架 |
|
||
| Element UI | - | UI组件库 |
|
||
| Axios | - | HTTP请求 |
|
||
| Vuex | - | 状态管理 |
|
||
| Vue Router | - | 路由管理 |
|
||
| Webpack | - | 模块打包 |
|
||
| Babel | - | ES6+转译 |
|
||
| Sass/Less | - | CSS预处理 |
|
||
|
||
#### AI服务技术栈(Python)
|
||
| 技术 | 版本 | 说明 |
|
||
|------|------|------|
|
||
| Flask | - | Web框架 |
|
||
| FAISS | - | 向量检索引擎 |
|
||
| Sentence Transformers | - | 文本向量化 |
|
||
| PyPDF2 | - | PDF解析 |
|
||
| python-docx | - | Word解析 |
|
||
| Watchdog | - | 文件监控 |
|
||
| Ollama | - | 本地大模型服务 |
|
||
|
||
#### 移动端技术栈(Android)
|
||
| 技术 | 版本 | 说明 |
|
||
|------|------|------|
|
||
| Gradle | 7.x | 构建工具 |
|
||
| Android SDK | 33 | 开发工具包 |
|
||
| WebView | - | 网页加载 |
|
||
| PaddleSpeech | - | 语音合成(读题功能) |
|
||
|
||
#### 数据库与中间件
|
||
| 技术 | 版本 | 说明 |
|
||
|------|------|------|
|
||
| MySQL | 5.7+ | 关系型数据库 |
|
||
| Redis | 6.x | 缓存数据库 |
|
||
| Nginx | 1.x | Web服务器 |
|
||
|
||
---
|
||
|
||
## 🔄 核心业务流程
|
||
|
||
### 1. 用户测评流程
|
||
|
||
```
|
||
用户登录
|
||
↓
|
||
选择量表
|
||
↓
|
||
开始答题 ──→ 实时保存进度
|
||
↓
|
||
提交答卷
|
||
↓
|
||
后端计算得分 ──→ 因子分析 ──→ 等级评定
|
||
↓
|
||
调用RAG服务 ──→ 检索相关知识
|
||
↓
|
||
构建Prompt ──→ 调用Ollama生成分析
|
||
↓
|
||
生成测评报告 ──→ 保存数据库
|
||
↓
|
||
返回报告给用户 ──→ 支持导出/打印
|
||
```
|
||
|
||
### 2. AI分析流程
|
||
|
||
```
|
||
测评结果数据
|
||
↓
|
||
提取关键信息(得分、因子、等级)
|
||
↓
|
||
调用RAG服务API
|
||
↓
|
||
RAG向量检索 ──→ 查询FAISS索引
|
||
↓
|
||
返回Top-K相关文档片段
|
||
↓
|
||
构建增强Prompt
|
||
├─ 测评结果
|
||
├─ 量表信息
|
||
├─ 用户画像
|
||
└─ 检索到的专业知识
|
||
↓
|
||
调用Ollama API
|
||
↓
|
||
流式生成分析报告
|
||
↓
|
||
后处理与格式化
|
||
↓
|
||
返回最终分析结果
|
||
```
|
||
|
||
|
||
### 3. RAG知识库索引流程
|
||
|
||
```
|
||
文档上传/添加
|
||
↓
|
||
文档格式检测
|
||
├─ PDF ──→ PyPDF2解析
|
||
├─ DOCX ──→ python-docx解析
|
||
├─ TXT ──→ 直接读取
|
||
└─ MD ──→ Markdown解析
|
||
↓
|
||
文本预处理
|
||
├─ 清洗特殊字符
|
||
├─ 去除多余空白
|
||
└─ 编码转换
|
||
↓
|
||
智能分块(text_splitter)
|
||
├─ 按段落分割
|
||
├─ 保持语义完整
|
||
├─ 设置重叠区域
|
||
└─ 控制块大小(500字符)
|
||
↓
|
||
向量化(Sentence Transformers)
|
||
└─ 使用多语言模型(支持中文)
|
||
↓
|
||
存储到FAISS索引
|
||
├─ 向量数据
|
||
└─ 元数据(文件名、块ID等)
|
||
↓
|
||
持久化到磁盘
|
||
├─ faiss.index(向量索引)
|
||
└─ documents.json(文档元数据)
|
||
```
|
||
|
||
### 4. 文件监控与增量更新
|
||
|
||
```
|
||
启动file_watcher
|
||
↓
|
||
监控knowledge_docs目录
|
||
↓
|
||
检测文件变化
|
||
├─ 新增文件 ──→ 自动索引
|
||
├─ 修改文件 ──→ 重新索引
|
||
└─ 删除文件 ──→ 移除索引
|
||
↓
|
||
触发索引更新
|
||
↓
|
||
更新FAISS索引
|
||
↓
|
||
保存到磁盘
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 数据库设计
|
||
|
||
### 核心数据表
|
||
|
||
#### 心理测评相关表
|
||
- `psy_scale` - 心理量表主表
|
||
- `psy_scale_item` - 量表题目表
|
||
- `psy_scale_option` - 题目选项表
|
||
- `psy_factor` - 量表因子表
|
||
- `psy_factor_rule` - 因子计分规则表
|
||
- `psy_result_interpretation` - 结果解释表
|
||
- `psy_warning_rule` - 预警规则表
|
||
|
||
#### 问卷答题相关表
|
||
- `psy_questionnaire` - 问卷实例表
|
||
- `psy_questionnaire_item` - 问卷题目表
|
||
- `psy_questionnaire_option` - 问卷选项表
|
||
- `psy_questionnaire_answer` - 用户答题记录表
|
||
- `psy_assessment_report` - 测评报告表
|
||
- `psy_warning` - 预警记录表
|
||
|
||
#### 用户相关表
|
||
- `psy_user_profile` - 用户档案表
|
||
- `psy_scale_permission` - 量表权限表
|
||
- `sys_user` - 系统用户表
|
||
- `sys_role` - 角色表
|
||
- `sys_user_role` - 用户角色关联表
|
||
|
||
#### 门户网站相关表
|
||
- `psy_website_category` - 内容分类表
|
||
- `psy_website_content` - 内容表
|
||
- `psy_website_comment` - 评论表
|
||
|
||
#### 系统管理相关表
|
||
- `sys_menu` - 菜单表
|
||
- `sys_dept` - 部门表
|
||
- `sys_post` - 岗位表
|
||
- `sys_dict_type` - 字典类型表
|
||
- `sys_dict_data` - 字典数据表
|
||
- `sys_config` - 参数配置表
|
||
- `sys_notice` - 通知公告表
|
||
- `sys_oper_log` - 操作日志表
|
||
- `sys_logininfor` - 登录日志表
|
||
|
||
---
|
||
|
||
## 🔐 安全设计
|
||
|
||
### 认证与授权
|
||
- **JWT Token认证**:无状态认证机制
|
||
- **RBAC权限模型**:基于角色的访问控制
|
||
- **密码加密**:BCrypt加密存储
|
||
- **Token刷新机制**:支持Token自动续期
|
||
- **单点登录**:支持多端登录控制
|
||
|
||
### 数据安全
|
||
- **SQL注入防护**:MyBatis预编译
|
||
- **XSS防护**:输入输出过滤
|
||
- **CSRF防护**:Token验证
|
||
- **敏感数据加密**:AES加密存储
|
||
- **数据脱敏**:日志脱敏处理
|
||
|
||
### 接口安全
|
||
- **接口鉴权**:统一鉴权拦截器
|
||
- **限流控制**:防止接口滥用
|
||
- **签名验证**:关键接口签名校验
|
||
- **HTTPS传输**:生产环境强制HTTPS
|
||
|
||
---
|
||
|
||
## 🚀 部署架构
|
||
|
||
### 开发环境
|
||
```
|
||
本机 (192.168.1.164)
|
||
├─ MySQL (3306)
|
||
├─ Redis (6379)
|
||
├─ Java后端 (30081)
|
||
├─ Python RAG (5000)
|
||
├─ Ollama (11434)
|
||
└─ 前端开发服务器 (80)
|
||
```
|
||
|
||
### 生产环境(内网部署)
|
||
```
|
||
服务器 (192.168.0.106)
|
||
├─ Nginx (80) ──→ 前端静态文件 + API代理
|
||
├─ Java后端 (30081) ──→ xinli-admin.jar
|
||
├─ Python RAG (5000) ──→ rag-python/app.py
|
||
├─ Ollama (11434) ──→ 本地大模型服务
|
||
├─ MySQL (远程: 1.15.149.240:3306)
|
||
└─ Redis (6379)
|
||
```
|
||
|
||
|
||
### 服务端口汇总
|
||
|
||
| 服务 | 端口 | 说明 | 访问方式 |
|
||
|------|------|------|----------|
|
||
| Nginx | 80 | 前端入口 | http://192.168.0.106 |
|
||
| Java后端 | 30081 | 后端API | http://localhost:30081 |
|
||
| Python RAG | 5000 | 知识库服务 | http://localhost:5000 |
|
||
| Ollama | 11434 | 大模型服务 | http://localhost:11434 |
|
||
| MySQL | 3306 | 数据库 | 远程:1.15.149.240:3306 |
|
||
| Redis | 6379 | 缓存 | localhost:6379 |
|
||
|
||
---
|
||
|
||
## 📁 项目目录结构
|
||
|
||
```
|
||
xinli/
|
||
├─ ry-xinli-admin/ # Web控制层模块
|
||
│ └─ src/main/
|
||
│ ├─ java/com/ddnai/web/
|
||
│ │ └─ controller/ # 控制器
|
||
│ │ ├─ psychology/ # 心理测评相关
|
||
│ │ ├─ system/ # 系统管理相关
|
||
│ │ └─ monitor/ # 监控相关
|
||
│ └─ resources/
|
||
│ ├─ application.yml # 主配置文件
|
||
│ └─ mybatis/ # MyBatis配置
|
||
│
|
||
├─ ry-xinli-system/ # 业务逻辑层模块
|
||
│ └─ src/main/java/com/ddnai/system/
|
||
│ ├─ domain/ # 实体类
|
||
│ ├─ mapper/ # 数据访问接口
|
||
│ └─ service/ # 业务逻辑实现
|
||
│
|
||
├─ ry-xinli-framework/ # 框架核心模块
|
||
│ └─ src/main/java/com/ddnai/framework/
|
||
│ ├─ config/ # 系统配置
|
||
│ ├─ security/ # 安全认证
|
||
│ ├─ interceptor/ # 拦截器
|
||
│ └─ aspectj/ # AOP切面
|
||
│
|
||
├─ ry-xinli-common/ # 通用工具模块
|
||
│ └─ src/main/java/com/ddnai/common/
|
||
│ ├─ utils/ # 工具类
|
||
│ ├─ exception/ # 异常处理
|
||
│ ├─ annotation/ # 自定义注解
|
||
│ └─ core/ # 核心组件
|
||
│
|
||
├─ ry-xinli-quartz/ # 定时任务模块
|
||
│ └─ src/main/java/com/ddnai/quartz/
|
||
│
|
||
├─ ry-xinli-generator/ # 代码生成模块
|
||
│ └─ src/main/java/com/ddnai/generator/
|
||
│
|
||
├─ xinli-ui/ # 前端Vue项目
|
||
│ ├─ src/
|
||
│ │ ├─ api/ # API接口
|
||
│ │ ├─ assets/ # 静态资源
|
||
│ │ ├─ components/ # 组件
|
||
│ │ ├─ layout/ # 布局
|
||
│ │ ├─ router/ # 路由
|
||
│ │ ├─ store/ # Vuex状态
|
||
│ │ ├─ utils/ # 工具类
|
||
│ │ └─ views/ # 页面视图
|
||
│ ├─ public/ # 公共资源
|
||
│ ├─ package.json # 依赖配置
|
||
│ └─ vue.config.js # Vue配置
|
||
│
|
||
├─ xinli-App/ # Android应用
|
||
│ ├─ app/
|
||
│ │ └─ src/main/
|
||
│ │ ├─ java/ # Java代码
|
||
│ │ └─ res/ # 资源文件
|
||
│ ├─ build.gradle # Gradle配置
|
||
│ └─ gradlew.bat # Gradle包装器
|
||
│
|
||
├─ rag-python/ # Python RAG服务
|
||
│ ├─ app.py # Flask应用入口
|
||
│ ├─ config.py # 配置文件
|
||
│ ├─ document_parser.py # 文档解析
|
||
│ ├─ text_splitter.py # 文本分块
|
||
│ ├─ vector_store.py # 向量存储
|
||
│ ├─ knowledge_service.py # 知识库服务
|
||
│ ├─ file_watcher.py # 文件监控
|
||
│ ├─ requirements.txt # Python依赖
|
||
│ ├─ knowledge_docs/ # 知识库文档目录
|
||
│ ├─ index_data/ # 索引数据目录
|
||
│ ├─ uploads/ # 上传临时目录
|
||
│ ├─ install.bat # 安装脚本
|
||
│ └─ start.bat # 启动脚本
|
||
│
|
||
├─ PaddleSpeech-develop/ # 语音合成库(App读题功能)
|
||
│
|
||
├─ Archive/ # 归档文档
|
||
│
|
||
├─ 项目介绍/ # 项目文档
|
||
│ ├─ 环境配置/ # 环境配置说明
|
||
│ ├─ 量表/ # 量表配置文件
|
||
│ └─ 项目/ # 项目相关文档
|
||
│
|
||
└─ pom.xml # Maven主配置
|
||
```
|
||
|
||
---
|
||
|
||
## 🔧 关键配置文件
|
||
|
||
### 1. 后端配置(application.yml)
|
||
```yaml
|
||
# 服务端口
|
||
server:
|
||
port: 30081
|
||
|
||
# 数据库配置
|
||
spring:
|
||
datasource:
|
||
url: jdbc:mysql://1.15.149.240:3306/xinli?useUnicode=true&characterEncoding=utf8
|
||
username: root
|
||
password: ******
|
||
|
||
# Redis配置
|
||
redis:
|
||
host: localhost
|
||
port: 6379
|
||
|
||
# RAG服务配置
|
||
rag:
|
||
enabled: true
|
||
service-url: http://127.0.0.1:5000
|
||
|
||
# Ollama配置
|
||
ollama:
|
||
base-url: http://localhost:11434
|
||
model: qwen2.5:7b
|
||
```
|
||
|
||
### 2. 前端配置(vue.config.js)
|
||
```javascript
|
||
module.exports = {
|
||
devServer: {
|
||
port: 80,
|
||
proxy: {
|
||
'/api': {
|
||
target: 'http://localhost:30081',
|
||
changeOrigin: true,
|
||
pathRewrite: {
|
||
'^/api': ''
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
### 3. RAG服务配置(config.py)
|
||
```python
|
||
# 服务端口
|
||
PORT = 5000
|
||
|
||
# 文本分块配置
|
||
CHUNK_SIZE = 500
|
||
CHUNK_OVERLAP = 50
|
||
|
||
# 向量模型(支持中文)
|
||
EMBEDDING_MODEL = "paraphrase-multilingual-MiniLM-L12-v2"
|
||
|
||
# 检索返回数量
|
||
TOP_K = 5
|
||
|
||
# 知识库目录
|
||
KNOWLEDGE_DOCS_DIR = "knowledge_docs"
|
||
INDEX_DATA_DIR = "index_data"
|
||
```
|
||
|
||
### 4. Nginx配置
|
||
```nginx
|
||
server {
|
||
listen 80;
|
||
server_name 192.168.0.106;
|
||
|
||
# 前端静态文件
|
||
location / {
|
||
root /www/wwwroot/xinli/dist;
|
||
index index.html;
|
||
try_files $uri $uri/ /index.html;
|
||
}
|
||
|
||
# 后端API代理
|
||
location /api/ {
|
||
proxy_pass http://127.0.0.1:30081/;
|
||
proxy_set_header Host $host;
|
||
proxy_set_header X-Real-IP $remote_addr;
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 🎨 前端页面结构
|
||
|
||
### 管理后台页面
|
||
- **首页**:数据统计、快速入口
|
||
- **心理测评管理**
|
||
- 量表管理:量表列表、新增/编辑、导入/导出
|
||
- 题目管理:题目配置、选项设置
|
||
- 因子管理:因子配置、计分规则
|
||
- 解释管理:结果解释、等级设置
|
||
- 预警规则:规则配置、阈值设置
|
||
- **问卷管理**
|
||
- 问卷列表:查看所有问卷实例
|
||
- 答题记录:用户答题详情
|
||
- 测评报告:报告查看、导出
|
||
- 预警记录:预警查看、处理
|
||
- **知识库管理**
|
||
- 文档管理:上传、删除、查看
|
||
- 索引管理:重建索引、统计信息
|
||
- 检索测试:测试语义检索
|
||
- **AI分析管理**
|
||
- 模型配置:Ollama地址、模型选择
|
||
- 分析记录:历史分析查看
|
||
- 提示词管理:Prompt模板配置
|
||
- **用户管理**
|
||
- 用户列表:用户信息管理
|
||
- 用户档案:详细档案查看
|
||
- 权限分配:量表权限设置
|
||
- **门户管理**
|
||
- 分类管理:内容分类设置
|
||
- 内容管理:文章发布、编辑
|
||
- 评论管理:评论审核、删除
|
||
- **系统管理**
|
||
- 菜单管理、角色管理、部门管理
|
||
- 字典管理、参数设置、通知公告
|
||
- 日志管理、在线用户、定时任务
|
||
|
||
|
||
### 用户端页面(App/Web)
|
||
- **登录注册**:用户登录、注册
|
||
- **首页**:推荐量表、最新资讯
|
||
- **量表测评**
|
||
- 量表列表:可用量表展示
|
||
- 在线答题:答题界面(支持语音读题)
|
||
- 测评报告:查看报告、AI分析
|
||
- 历史记录:历史测评查看
|
||
- **个人中心**
|
||
- 个人信息:资料编辑
|
||
- 我的测评:测评历史
|
||
- 我的报告:报告管理
|
||
- **资讯浏览**
|
||
- 文章列表:分类浏览
|
||
- 文章详情:阅读、评论
|
||
|
||
---
|
||
|
||
## 🚦 接口设计规范
|
||
|
||
### RESTful API规范
|
||
- **GET**:查询操作
|
||
- **POST**:新增操作
|
||
- **PUT**:修改操作
|
||
- **DELETE**:删除操作
|
||
|
||
### 统一响应格式
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "操作成功",
|
||
"data": {
|
||
// 业务数据
|
||
}
|
||
}
|
||
```
|
||
|
||
### 主要API接口
|
||
|
||
#### 心理测评相关
|
||
```
|
||
GET /psychology/scale/list # 获取量表列表
|
||
POST /psychology/scale # 新增量表
|
||
PUT /psychology/scale # 修改量表
|
||
DELETE /psychology/scale/{id} # 删除量表
|
||
POST /psychology/scale/import # 导入量表JSON
|
||
GET /psychology/scale/export/{id} # 导出量表JSON
|
||
|
||
GET /psychology/questionnaire/list # 获取问卷列表
|
||
POST /psychology/questionnaire/answer # 提交答题
|
||
GET /psychology/questionnaire/report/{id} # 获取测评报告
|
||
```
|
||
|
||
#### AI分析相关
|
||
```
|
||
POST /psychology/ai/analyze # AI分析测评结果
|
||
GET /psychology/ai/status # 获取AI服务状态
|
||
POST /psychology/ai/chat # AI对话接口
|
||
```
|
||
|
||
#### RAG知识库相关
|
||
```
|
||
GET /psychology/rag/health # 健康检查
|
||
GET /psychology/rag/documents # 获取文档列表
|
||
POST /psychology/rag/upload # 上传文档
|
||
DELETE /psychology/rag/documents/{filename} # 删除文档
|
||
POST /psychology/rag/search # 语义搜索
|
||
POST /psychology/rag/rebuild # 重建索引
|
||
GET /psychology/rag/stats # 获取统计信息
|
||
```
|
||
|
||
#### 用户相关
|
||
```
|
||
POST /login # 用户登录
|
||
POST /register # 用户注册
|
||
GET /getInfo # 获取用户信息
|
||
POST /logout # 退出登录
|
||
GET /psychology/profile/{id} # 获取用户档案
|
||
PUT /psychology/profile # 更新用户档案
|
||
```
|
||
|
||
---
|
||
|
||
## 🔍 核心算法与逻辑
|
||
|
||
### 1. 量表计分算法
|
||
```
|
||
总分计算:
|
||
总分 = Σ(题目得分)
|
||
|
||
因子分计算:
|
||
因子分 = Σ(因子内题目得分 × 权重)
|
||
|
||
等级评定:
|
||
根据分数范围匹配对应等级
|
||
- 正常:0-20分
|
||
- 轻度:21-40分
|
||
- 中度:41-60分
|
||
- 重度:61-80分
|
||
```
|
||
|
||
### 2. RAG检索算法
|
||
```
|
||
1. 查询向量化
|
||
query_vector = embedding_model.encode(query)
|
||
|
||
2. 相似度计算(余弦相似度)
|
||
similarity = cosine_similarity(query_vector, doc_vectors)
|
||
|
||
3. Top-K检索
|
||
top_k_docs = faiss_index.search(query_vector, k=5)
|
||
|
||
4. 结果排序与过滤
|
||
- 按相似度降序
|
||
- 过滤低相关文档(阈值0.5)
|
||
- 返回文档内容
|
||
```
|
||
|
||
### 3. AI分析Prompt构建
|
||
```
|
||
系统提示词:
|
||
你是一位专业的心理咨询师...
|
||
|
||
用户信息:
|
||
姓名:{name}
|
||
年龄:{age}
|
||
性别:{gender}
|
||
|
||
测评结果:
|
||
量表:{scale_name}
|
||
总分:{total_score}
|
||
等级:{level}
|
||
因子得分:{factor_scores}
|
||
|
||
专业知识(RAG检索):
|
||
{retrieved_knowledge}
|
||
|
||
分析要求:
|
||
1. 结合测评结果进行专业分析
|
||
2. 参考提供的专业知识
|
||
3. 给出个性化建议
|
||
4. 语言通俗易懂
|
||
```
|
||
|
||
### 4. 预警规则匹配
|
||
```
|
||
规则类型:
|
||
1. 单因子阈值:某因子分数 > 阈值
|
||
2. 总分阈值:总分 > 阈值
|
||
3. 多因子组合:多个因子同时满足条件
|
||
4. 趋势预警:连续多次测评分数上升
|
||
|
||
匹配逻辑:
|
||
for rule in warning_rules:
|
||
if match_condition(result, rule):
|
||
create_warning(user, result, rule)
|
||
send_notification(user, warning)
|
||
```
|
||
|
||
---
|
||
|
||
## 📈 性能优化策略
|
||
|
||
### 后端优化
|
||
- **数据库优化**
|
||
- 索引优化:关键字段建立索引
|
||
- 查询优化:避免N+1查询
|
||
- 连接池:Druid连接池配置
|
||
- 读写分离:主从复制(可选)
|
||
|
||
- **缓存策略**
|
||
- Redis缓存:热点数据缓存
|
||
- 本地缓存:Caffeine缓存
|
||
- 缓存预热:启动时加载常用数据
|
||
- 缓存更新:定时刷新策略
|
||
|
||
- **异步处理**
|
||
- 异步任务:@Async注解
|
||
- 消息队列:Redis队列
|
||
- 定时任务:Quartz调度
|
||
|
||
### 前端优化
|
||
- **资源优化**
|
||
- 代码分割:路由懒加载
|
||
- 图片优化:压缩、懒加载
|
||
- 打包优化:Webpack配置
|
||
- CDN加速:静态资源CDN
|
||
|
||
- **渲染优化**
|
||
- 虚拟滚动:长列表优化
|
||
- 防抖节流:频繁操作优化
|
||
- Keep-alive:页面缓存
|
||
|
||
### AI服务优化
|
||
- **向量检索优化**
|
||
- FAISS索引优化:IVF索引
|
||
- 批量检索:减少调用次数
|
||
- 缓存热门查询:Redis缓存
|
||
|
||
- **模型推理优化**
|
||
- 模型量化:减少显存占用
|
||
- 批处理:批量推理
|
||
- 流式输出:提升用户体验
|
||
|
||
---
|
||
|
||
## 🛠️ 开发与部署
|
||
|
||
### 开发环境搭建
|
||
|
||
#### 1. 后端开发环境
|
||
```bash
|
||
# 安装JDK 1.8
|
||
# 安装Maven 3.6+
|
||
# 安装MySQL 5.7+
|
||
# 安装Redis 6.x
|
||
|
||
# 克隆项目
|
||
git clone <repository-url>
|
||
|
||
# 导入数据库
|
||
mysql -u root -p < 项目介绍/项目/心理备份.sql
|
||
|
||
# 修改配置
|
||
# 编辑 ry-xinli-admin/src/main/resources/application.yml
|
||
# 修改数据库连接、Redis配置等
|
||
|
||
# 启动后端
|
||
cd ry-xinli-admin
|
||
mvn spring-boot:run
|
||
```
|
||
|
||
#### 2. 前端开发环境
|
||
```bash
|
||
# 安装Node.js 14+
|
||
# 安装npm或yarn
|
||
|
||
# 安装依赖
|
||
cd xinli-ui
|
||
npm install
|
||
|
||
# 启动开发服务器
|
||
npm run dev
|
||
|
||
# 访问 http://localhost:80
|
||
```
|
||
|
||
#### 3. Python RAG服务
|
||
```bash
|
||
# 安装Python 3.8+
|
||
|
||
# 安装依赖
|
||
cd rag-python
|
||
python -m venv venv
|
||
venv\Scripts\activate
|
||
pip install -r requirements.txt
|
||
|
||
# 启动服务
|
||
python app.py
|
||
|
||
# 访问 http://localhost:5000
|
||
```
|
||
|
||
#### 4. Ollama大模型
|
||
```bash
|
||
# 安装Ollama
|
||
# 下载地址:https://ollama.ai
|
||
|
||
# 拉取模型
|
||
ollama pull qwen2.5:7b
|
||
ollama pull nomic-embed-text
|
||
|
||
# 启动服务
|
||
ollama serve
|
||
```
|
||
|
||
|
||
### 生产环境部署
|
||
|
||
#### 1. 后端部署
|
||
```bash
|
||
# 打包
|
||
mvn clean package -DskipTests
|
||
|
||
# 上传jar包到服务器
|
||
# 文件位置:ry-xinli-admin/target/xinli-admin.jar
|
||
|
||
# 启动服务
|
||
nohup java -jar xinli-admin.jar > xinli.log 2>&1 &
|
||
|
||
# 或使用systemd服务
|
||
sudo systemctl start xinli-backend
|
||
```
|
||
|
||
#### 2. 前端部署
|
||
```bash
|
||
# 打包
|
||
npm run build:prod
|
||
|
||
# 上传dist目录到服务器
|
||
# 配置Nginx指向dist目录
|
||
|
||
# 重启Nginx
|
||
sudo systemctl restart nginx
|
||
```
|
||
|
||
#### 3. Android App打包
|
||
```bash
|
||
cd xinli-App
|
||
|
||
# 检查JDK和SDK
|
||
./check-jdk.bat
|
||
|
||
# 打包正式版APK
|
||
./gradlew assembleRelease
|
||
|
||
# APK位置:app/build/outputs/apk/release/app-release.apk
|
||
```
|
||
|
||
### 启动顺序
|
||
```
|
||
1. MySQL、Redis(基础服务)
|
||
2. Ollama(大模型服务)
|
||
3. Python RAG服务
|
||
4. Java后端服务
|
||
5. Nginx(前端服务)
|
||
```
|
||
|
||
### 停止服务
|
||
```bash
|
||
# 停止Java后端
|
||
ps -ef | grep xinli-admin.jar
|
||
kill -9 <pid>
|
||
|
||
# 停止Python RAG
|
||
ps -ef | grep app.py
|
||
kill -9 <pid>
|
||
|
||
# 停止Ollama
|
||
ps -ef | grep ollama
|
||
kill -9 <pid>
|
||
|
||
# 停止Nginx
|
||
sudo systemctl stop nginx
|
||
```
|
||
|
||
---
|
||
|
||
## 🧪 测试说明
|
||
|
||
### 单元测试
|
||
- 使用JUnit 5进行单元测试
|
||
- Service层业务逻辑测试
|
||
- Mapper层数据访问测试
|
||
- 工具类测试
|
||
|
||
### 接口测试
|
||
- 使用Swagger进行接口测试
|
||
- Postman接口集合
|
||
- 自动化接口测试脚本
|
||
|
||
### 性能测试
|
||
- JMeter压力测试
|
||
- 接口响应时间监控
|
||
- 并发用户测试
|
||
- 数据库性能分析
|
||
|
||
---
|
||
|
||
## 📝 开发规范
|
||
|
||
### 代码规范
|
||
- **命名规范**
|
||
- 类名:大驼峰(PascalCase)
|
||
- 方法名:小驼峰(camelCase)
|
||
- 常量:全大写下划线分隔
|
||
- 包名:全小写
|
||
|
||
- **注释规范**
|
||
- 类注释:说明类的功能、作者、日期
|
||
- 方法注释:说明参数、返回值、异常
|
||
- 关键逻辑注释:复杂算法说明
|
||
|
||
- **日志规范**
|
||
- ERROR:系统错误
|
||
- WARN:警告信息
|
||
- INFO:关键业务信息
|
||
- DEBUG:调试信息
|
||
|
||
### Git规范
|
||
- **分支管理**
|
||
- master:生产环境
|
||
- develop:开发环境
|
||
- feature/*:功能分支
|
||
- hotfix/*:紧急修复
|
||
|
||
- **提交规范**
|
||
- feat:新功能
|
||
- fix:修复bug
|
||
- docs:文档更新
|
||
- style:代码格式
|
||
- refactor:重构
|
||
- test:测试
|
||
- chore:构建/工具
|
||
|
||
### 数据库规范
|
||
- 表名:小写下划线分隔
|
||
- 字段名:小写下划线分隔
|
||
- 主键:id(自增)
|
||
- 创建时间:create_time
|
||
- 更新时间:update_time
|
||
- 逻辑删除:del_flag
|
||
|
||
---
|
||
|
||
## 🔮 未来规划
|
||
|
||
### 功能扩展
|
||
- [ ] 多租户支持
|
||
- [ ] 移动端原生App(Flutter)
|
||
- [ ] 微信小程序版本
|
||
- [ ] 视频咨询功能
|
||
- [ ] 在线预约系统
|
||
- [ ] 数据分析大屏
|
||
- [ ] 导出PDF报告
|
||
- [ ] 多语言支持
|
||
|
||
### 技术升级
|
||
- [ ] 升级Spring Boot 3.x
|
||
- [ ] 引入Spring Cloud微服务
|
||
- [ ] 使用Elasticsearch全文检索
|
||
- [ ] 引入消息队列(RabbitMQ/Kafka)
|
||
- [ ] 容器化部署(Docker/K8s)
|
||
- [ ] 前端升级Vue 3
|
||
- [ ] 引入TypeScript
|
||
- [ ] 使用GraphQL API
|
||
|
||
### AI能力增强
|
||
- [ ] 支持更多大模型(GPT、Claude等)
|
||
- [ ] 多模态分析(语音、图像)
|
||
- [ ] 情感分析
|
||
- [ ] 对话式测评
|
||
- [ ] 智能推荐量表
|
||
- [ ] 预测性分析
|
||
- [ ] 知识图谱构建
|
||
|
||
---
|
||
|
||
## 📞 联系方式
|
||
|
||
**开发团队**:DDNAI
|
||
**项目地址**:http://www.ddnai.com
|
||
**技术支持**:详见项目文档
|
||
|
||
---
|
||
|
||
## 📄 附录
|
||
|
||
### A. 常见问题
|
||
|
||
**Q1: 首次启动RAG服务很慢?**
|
||
A: 首次启动需要下载向量模型(约500MB),请耐心等待。模型会缓存到用户目录。
|
||
|
||
**Q2: Ollama连接失败?**
|
||
A: 检查Ollama服务是否启动,端口11434是否被占用,防火墙是否开放。
|
||
|
||
**Q3: 前端访问后端接口跨域?**
|
||
A: 开发环境使用vue.config.js代理,生产环境使用Nginx代理。
|
||
|
||
**Q4: 数据库连接失败?**
|
||
A: 检查数据库地址、端口、用户名、密码是否正确,数据库是否启动。
|
||
|
||
**Q5: App打包失败?**
|
||
A: 检查JDK版本(需要JDK 11),Android SDK是否安装,Gradle配置是否正确。
|
||
|
||
### B. 参考资料
|
||
|
||
- [Spring Boot官方文档](https://spring.io/projects/spring-boot)
|
||
- [Vue.js官方文档](https://vuejs.org/)
|
||
- [Element UI文档](https://element.eleme.io/)
|
||
- [MyBatis文档](https://mybatis.org/)
|
||
- [Ollama文档](https://ollama.ai/docs)
|
||
- [FAISS文档](https://github.com/facebookresearch/faiss)
|
||
- [Flask文档](https://flask.palletsprojects.com/)
|
||
|
||
### C. 更新日志
|
||
|
||
**v1.0.0 (2024-01-30)**
|
||
- 初始版本发布
|
||
- 完成核心功能开发
|
||
- 集成AI大模型和RAG知识库
|
||
- 支持Web端和Android端
|
||
|
||
---
|
||
|
||
**文档版本**:v1.0
|
||
**最后更新**:2026-01-30
|
||
**维护者**:DDNAI开发团队
|
||
|