SpringBoot3+Vue3|AI心理健康咨询平台(源码)

发布时间:2026/7/23 4:55:13
SpringBoot3+Vue3|AI心理健康咨询平台(源码) 目录一、项目背景二、技术介绍三、功能介绍四、代码设计五、系统实现一、项目背景在当今快节奏、高压力的社会环境下心理健康问题日益凸显成为影响国民生活质量与社会和谐稳定的重要因素。据《中国国民心理健康发展报告》显示超过30%的成年人存在不同程度的焦虑或抑郁倾向而其中主动寻求专业心理咨询服务的比例不足10%。传统线下心理咨询面临资源分布不均、费用高昂、隐私顾虑强、预约周期长等现实瓶颈难以满足日益增长的多元化心理健康服务需求。与此同时人工智能技术的迅猛发展为心理健康服务模式变革提供了新的技术路径。以ChatGPT为代表的大语言模型LLM展现出强大的自然语言理解与多轮对话能力能够模拟共情式倾听与认知引导在情绪疏导、心理评估、日常陪伴等轻量级心理干预场景中具有天然的应用契合度。然而现有通用型AI对话产品缺乏心理学专业框架的约束与引导难以提供结构化、科学化的心理支持服务。基于上述背景本课题拟设计并实现一套基于SpringBoot3Vue3的AI心理健康咨询平台。系统采用前后端分离架构后端依托SpringBoot3框架与JDK17构建高并发、低延迟的服务底座结合MySQL与Redis实现数据持久化与缓存加速前端采用Vue3组合式API与TypeScript构建响应式、高交互性的用户界面。平台核心功能包括基于大语言模型的AI智能对话咨询提供7×24小时即时情绪陪伴与认知行为疏导心理健康测评体系内置标准化心理量表如PHQ-9、GAD-7进行初步风险评估咨询记录与趋势分析辅助用户追踪心理状态变化轨迹。本项目的研发旨在探索AI技术在心理健康服务领域的规范化、产品化落地路径为缓解公共心理健康服务资源供需矛盾提供一套低成本、高可及性的数字化解决方案让科技温度惠及更多有心理健康服务需求的群体。二、技术介绍系统架构B/S 模式前后端分离管理员与咨询师共用管理端、来访者使用用户端跨平台支持Windows / macOS开发环境JDK 17 IntelliJ IDEA MySQL 8.0 VS Code技术栈Spring Boot 3 MyBatis MySQL Vue 3 Element Plus Pinia Axios鉴权采用 JWT角色划分为 系统管理员 / 咨询师 / 来访者咨询会话基于 WebSocket 实时通信AI对接讯飞星火大模型本系统采用B/S架构与前后端完全分离的设计模式支持Windows与macOS跨平台运行。后端统一提供RESTful API接口前端根据用户角色动态渲染不同视图——管理员与咨询师共用管理端包含用户管理、咨询记录审核、会话监控等后台功能来访者使用用户端包含AI对话、心理测评、预约咨询等前台功能实现多端协同与职能隔离。开发环境方面后端基于JDK 17与IntelliJ IDEA前端使用VS Code数据库采用MySQL 8.0。技术栈上后端以Spring Boot 3为核心框架整合MyBatis作为持久层、MySQL存储业务数据、Redis缓存高频访问信息前端采用Vue 3组合式API配合Element Plus组件库构建界面Pinia管理全局状态Axios处理HTTP请求。安全与通信层面使用JWT实现身份认证与角色权限控制划分为系统管理员、咨询师、来访者三类角色咨询会话基于WebSocket实现实时双向通信AI对话模块对接讯飞星火大模型API提供智能心理疏导服务。该技术选型保障了系统的高性能、可扩展性与良好的用户体验。三、功能介绍1. 系统管理员功能用户管理平台注册用户的查询与维护保障账号体系可控咨询师管理咨询师档案与资质相关信息的管理与审核支撑内容运营心理测评量管理、文章管理、平台公告管理、轮播图等内容的管理预约与订单预约申请审核、订单与支付流水等业务侧管理咨询与风控咨询会话记录查询AI 风险监控——汇总会话风险告警便于运营与安全响应权限与菜单基于角色的菜单与功能访问控制2. 咨询师功能个人资料维护对外展示信息与来访者端咨询师详情一致排班管理可预约时段配置支撑来访者创建预约预约处理查看与处理预约进入对应 咨询会话咨询会话基于 WebSocket 的实时文字沟通结合平台的 风险告警 能力便于在会话中关注高危信号评价查看查看来访者评价形成服务闭环3. 用户功能首页与发现浏览推荐与运营内容进入测评、文章、公告等模块咨询师列表检索、详情查看首页/列表侧提供 按评分等综合维度的咨询师推荐可结合 AI 灵犀推荐按主诉智能匹配咨询师心理测评在线作答、查看结果支持 AI 测评报告解读心灵驿站阅读与浏览科普文章预约与订单创建预约、管理预约状态订单查询与详情咨询会话支付/流程满足条件后进入 实时咨询个人中心资料与密码、我的测评、我的评价、我的收藏等三、创新功能1. AI 测评报告解读在完成量表后由后端异步调用大模型生成结构化解读报告前端通过轮询获取结果避免同步 HTTP 超时旧数据可触发重新生成提升可用性与体验2. AI 灵犀咨询师匹配来访者可在咨询师列表页输入主诉、偏好与限制条件由大模型结合平台咨询师公开信息输出 Top 推荐与匹配理由辅助“选对咨询师”与单纯按评分排序形成互补3. 会话智能风险识别与多端告警在咨询消息流中嵌入 AI 风险检测对疑似高危内容进行分级向管理端风险监控、咨询师工作台风险列表 推送告警便于人工跟进强调“辅助决策、不替代专业判断”4. 大模型统一接入平台将讯飞星火 API封装为统一服务便于在测评解读、匹配、风控、会话增强等场景扩展四、代码设计package com.psyche.service.impl; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.psyche.config.SparkConfig; import com.psyche.service.AIChatService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import okhttp3.*; import org.springframework.stereotype.Service; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.net.URL; import java.nio.charset.StandardCharsets; import java.text.SimpleDateFormat; import java.util.*; /** * 讯飞星火大模型服务实现 * 支持流式对话与心理疏导场景 */ Slf4j Service RequiredArgsConstructor public class SparkAIChatServiceImpl implements AIChatService { private final SparkConfig sparkConfig; private final OkHttpClient okHttpClient new OkHttpClient.Builder() .connectTimeout(30, TimeUnit.SECONDS) .readTimeout(60, TimeUnit.SECONDS) .build(); /** * 流式对话SSE * param sessionId 会话ID用于上下文管理 * param userMessage 用户消息 * param emitter SSE发射器 */ Override public void chatStream(String sessionId, String userMessage, SseEmitter emitter) { try { // 1. 构建认证URL String authUrl buildAuthUrl(); // 2. 构建请求体含心理疏导系统提示词 JSONObject requestBody buildRequestBody(sessionId, userMessage); // 3. 创建WebSocket连接讯飞星火采用WS协议 Request request new Request.Builder() .url(authUrl) .addHeader(Content-Type, application/json) .post(RequestBody.create( MediaType.parse(application/json; charsetutf-8), requestBody.toJSONString() )) .build(); // 4. 发送请求并处理流式响应 okHttpClient.newCall(request).enqueue(new Callback() { Override public void onFailure(Call call, IOException e) { log.error(AI对话失败, e); emitter.completeWithError(e); } Override public void onResponse(Call call, Response response) throws IOException { try (ResponseBody body response.body()) { if (body null) return; String content body.string(); // 解析流式响应并逐块发送 processStreamResponse(content, emitter); emitter.complete(); } catch (Exception e) { emitter.completeWithError(e); } } }); } catch (Exception e) { log.error(AI对话异常, e); emitter.completeWithError(e); } } /** * 构建认证URLHMAC-SHA256签名 */ private String buildAuthUrl() throws Exception { String host spark-api.xf-yun.com; String path /v3.5/chat; String apiKey sparkConfig.getApiKey(); String apiSecret sparkConfig.getApiSecret(); SimpleDateFormat sdf new SimpleDateFormat(EEE, dd MMM yyyy HH:mm:ss z, Locale.US); sdf.setTimeZone(TimeZone.getTimeZone(GMT)); String date sdf.format(new Date()); // 构建签名原文 String signOrigin host: host \n date: date \n GET path HTTP/1.1; // HMAC-SHA256加密 Mac mac Mac.getInstance(HmacSHA256); SecretKeySpec secretKey new SecretKeySpec( apiSecret.getBytes(StandardCharsets.UTF_8), HmacSHA256); mac.init(secretKey); byte[] signBytes mac.doFinal(signOrigin.getBytes(StandardCharsets.UTF_8)); String signature Base64.getEncoder().encodeToString(signBytes); // 构建Authorization头 String authorization api_key\ apiKey \, algorithm\hmac-sha256\, headers\host date request-line\, signature\ signature \; return wss:// host path ? authorization Base64.getEncoder().encodeToString( authorization.getBytes(StandardCharsets.UTF_8)) date URLEncoder.encode(date, UTF-8) host host; } /** * 构建请求体包含心理疏导专属系统提示词 */ private JSONObject buildRequestBody(String sessionId, String userMessage) { JSONObject request new JSONObject(); // 系统提示词限定角色为心理咨询助手 String systemPrompt 你是一位专业的心理咨询助手名叫心聆。你的职责是\n 1. 以共情、温暖、非评判的态度倾听来访者的倾诉\n 2. 运用认知行为疗法CBT的基本技巧引导来访者觉察情绪\n 3. 不提供医学诊断不替代专业心理治疗\n 4. 当来访者表达自伤、自杀意念时必须明确建议其寻求紧急专业帮助\n 5. 回答简洁温暖每次回复控制在150字以内; JSONObject message new JSONObject(); message.put(role, user); message.put(content, userMessage); JSONObject payload new JSONObject(); payload.put(message, new JSONObject() {{ put(text, new JSONArray() {{ add(new JSONObject() {{ put(role, system); put(content, systemPrompt); }}); add(new JSONObject() {{ put(role, user); put(content, userMessage); }}); }}); }}); request.put(header, new JSONObject() {{ put(app_id, sparkConfig.getAppId()); put(uid, sessionId); }}); request.put(parameter, new JSONObject() {{ put(chat, new JSONObject() {{ put(domain, generalv3.5); put(temperature, 0.7); put(max_tokens, 2048); put(top_k, 4); }}); }}); request.put(payload, payload); return request; } /** * 处理流式响应 */ private void processStreamResponse(String content, SseEmitter emitter) throws IOException { // 解析SSE格式数据 String[] lines content.split(\n); for (String line : lines) { if (line.startsWith(data: )) { String jsonData line.substring(6); if ([DONE].equals(jsonData)) continue; try { JSONObject data JSON.parseObject(jsonData); JSONArray textArray data.getJSONObject(payload) .getJSONObject(choices) .getJSONArray(text); if (textArray ! null !textArray.isEmpty()) { String text textArray.getJSONObject(0).getString(content); emitter.send(SseEmitter.event() .name(message) .data(text)); } } catch (Exception e) { log.warn(解析流式数据失败: {}, e.getMessage()); } } } } }五、系统实现