当前位置: 首页 > news >正文

2026年软件学院创新项目实训|智能居家养老健康守护系统·第七周工作博客

2026年山东大学软件学院创新项目实训 小组周报(第七周)

一、本周工作概述

本周小组围绕"AI 对话系统全面落地 + 安全加固 + 鉴权联调 + 新功能上线"推进开发,主要完成以下工作:

  1. 后端——AI 多角色对话系统实现与安全加固:完成 5 个 Agent(情感陪伴/健康陪诊/健康干预/用药安全/家属辅诊)的完整对话接口开发,每个 Agent 提供普通对话、流式 SSE、会话列表、会话详情、会话删除共 5 个接口;修复 15 个会话管理接口的用户隔离漏洞;修复家属辅诊familyId可被伪造的安全问题;新增对话记忆滑动窗口防止 Token 超限。
  2. 后端——JWT 统一身份识别与数据归属校验:重构登录态体系,将用户主键写入 JWT subject,新增全局过滤器与线程上下文,在健康数据、用药计划、病历等模块按「老人本人 / 家属已绑定老人」过滤读写范围。
  3. 后端——用药提醒数据层基础设施:设计medication_reminder_log表结构及索引,完成实体映射、定时任务线程池配置、短信模板扩展。
  4. 后端——健康报告生成与 OCR 医疗单据识别:新增基于 7 天体征数据的 AI 健康报告生成(含多轮追问);新增 OCR 医疗单据识别功能,调用 qwen3.6-plus 多模态模型自动结构化入库。
  5. 前端——JWT 鉴权全链路联调:适配后端登录响应字段,增强请求拦截器统一注入 Bearer 令牌,完善双层 401 拦截机制,完成数据归属参数传递与全链路验证。

二、具体工作内容

2.1 AI 多角色对话系统实现

(1)系统架构

采用"统一基座 + 差异化 Prompt"架构,所有 Agent 共享同一套会话管理(ChatSessionService)和大模型调用基础设施,通过不同的 System Prompt 定义角色能力边界。

调用链路:

用户消息 → Controller → resolveSession() → ElderlyContextService.getFullContext()(加载健康档案) → ChatMemoryService.buildMessages()(构建消息数组 + 滑动窗口截断) → DeepSeek API(/v1/chat/completions) → 保存会话 → 返回响应

(2)Agent 矩阵

Agent名字接口前缀核心能力温度
情感陪伴暖心/api/companion心理慰藉 / 陪诊助手0.8
健康陪诊康伴/api/health-companion全科健康问答、导诊0.6
健康干预养怡/api/health-intervention饮食/运动/作息个性化方案0.5
用药安全审核/api/medication-safety药物配伍禁忌筛查0.3
家属辅诊家护/api/family-assist跨角色健康分析与照护建议0.4

(3)每个 Agent 提供 5 个接口

接口方法说明
/{prefix}/chatPOST普通对话(等待完整回复)
/{prefix}/chat/streamPOST流式对话(SSE 逐字输出)
/{prefix}/sessionsGET当前用户的会话列表
/{prefix}/sessions/{sessionId}GET会话详情(含完整消息)
/{prefix}/sessions/{sessionId}DELETE删除会话

(4)个性化健康上下文注入

每次对话自动从数据库加载老人健康档案,注入 System Prompt:基本信息(姓名、年龄、性别)、疾病列表、当前用药计划、近期病历记录(最近 5 条)、最新体征数据。家属端采用显式注入(“请基于这些数据回答”),老人端采用隐式注入(“不要主动提及已知信息”)。

(5)对话记忆滑动窗口

  • 问题:历史消息全量发送给大模型,对话轮次过多时超出上下文窗口导致 API 报错
  • 解决:新建ChatMemoryService,统一管理消息构建逻辑,超过 30 条消息自动截断保留最近记录;5 个 Agent 的buildMessages()统一改为调用chatMemoryService.buildMessages()
  • 新增配置项chat.memory.max-context-messages: 30(约 15 轮对话)

2.2 安全加固

(1)AI 对话用户隔离修复

  • 问题:5 个 Agent 共 15 个会话管理接口没有用户隔离,任意用户可查看/删除其他用户的对话
  • 修复ChatSessionServiceImpl注入ElderlyAccessService,所有会话操作增加归属校验;5 个 Agent Controller 的会话接口统一从JwtUserContext取用户信息
操作隔离逻辑
列出会话老人:elderlyId == 自己;家属:familyId == 自己
查看/删除校验 session 归属,不匹配抛 403
创建会话assertCanAccessElderly(elderlyId)

(2)家属辅诊身份修复

  • 问题FamilyAssistControllerfamilyId从请求体获取,可被伪造
  • 修复:Controller 层用JwtUserContext.requireFamilyId()覆盖请求体中的值,非家属账号调用直接 403;同时校验绑定关系,无绑定返回 403

2.3 JWT 统一身份识别与数据归属校验

(1)登录与令牌重构

  • JwtServiceImpl.generateAccessToken将 userId 写入 JWT 标准字段subject,userType、phone、openId 写入自定义 claims
  • JwtService.resolvePrincipal(authorization)统一解析 Bearer 令牌,封装JwtPrincipal(userId, userType, phone, openId)
  • 短信登录返回SmsLoginResponse(含 accessToken、userId、elderlyId),前端持久化后携带身份访问业务接口

(2)全局过滤器与线程上下文

  • 新增JwtAuthFilter(OncePerRequestFilter):除登录、发码、Swagger 等白名单路径外,默认要求有效 JWT;解析成功后写入JwtUserContext,请求结束 finally 清理 ThreadLocal 防止线程池复用串用户
  • JwtUserContext提供requireUserId()requireFamilyId()requireElderlyId()等静态方法

(3)数据归属校验体系

  • 新增ElderlyAccessServiceassertCanAccessElderly(elderlyId)校验当前用户能否访问指定老人数据——老人仅本人,家属仅bindStatus=1的绑定老人
  • 新增ElderlyScopedCrudSupport:封装带 elderlyId 实体的权限模板,各模块 Controller 改造为listForCurrentUser()/getForCurrentUser(id)等方法
  • 解决ElderlyAccessServiceElderlyFamilyService循环依赖:绑定关系查询改为注入ElderlyFamilyMapper

2.4 用药提醒数据层与定时任务基础设施

(1)数据库设计

新建medication_reminder_log表,记录用药提醒全生命周期(待发送 → 已发送短信 → 已确认服药):

CREATETABLEmedication_reminder_log(id BIGSERIALPRIMARYKEY,schedule_time_idBIGINTNOTNULL,elderly_idBIGINTNOTNULL,plan_dateDATENOTNULL,dose_timeTIMENOTNULL,remind_statusSMALLINTDEFAULT0,-- 0待发送 1已发送 2已确认push_timeTIMESTAMP,confirm_timeTIMESTAMP,created_atTIMESTAMPDEFAULTnow(),CONSTRAINTuk_schedule_dateUNIQUE(schedule_time_id,plan_date));

(2)索引与配置

索引用途
idx_reminder_elderly_date查询老人今日用药计划
idx_reminder_status查询未确认的提醒
idx_reminder_dose_time定时任务按时间扫描

定时任务线程池配置:5 线程,前缀medication-,支持优雅关闭。短信配置扩展reminderTemplateCode用药提醒模板编码。

2.5 健康报告 AI 生成与 OCR 医疗单据识别

(1)健康报告生成

  • 基于老人最近 7 天体征数据,AI 自动生成健康趋势分析报告(含数据总览、趋势分析、异常预警、综合评估、健康建议),报告存储在medical_record
  • 支持普通追问(/api/health-report/chat)和 SSE 流式追问(/api/health-report/chat/stream
  • 提供历史报告列表与详情查询接口

(2)OCR 医疗单据识别

  • 调用 qwen3.6-plus 多模态模型识别医疗单据图片,自动提取生化指标并结构化入库
  • 识别结果存入medical_record表,体征数据自动写入elderly_health_data
  • 支持识别:生命体征、身体测量、血常规、炎症指标、影像检查描述等
  • 返回结构化指标列表(含指标名、数值、单位、参考范围、是否异常)

2.6 前端——JWT 鉴权全链路联调

(1)登录响应字段适配

后端登录接口返回结构变更,前端同步适配:登录成功后持久化 accessToken、tokenType、userId、elderlyId、userInfo 到本地缓存。

(2)请求拦截器增强

所有业务服务统一通过base.request()发起请求,自动调用auth.buildAuthHeader()注入 `Authorization: Bearer *** 头,杜绝各服务重复手写。

(3)双层 401 拦截机制

层级拦截方式说明
第一层HTTP 状态码拦截statusCode === 401时清除缓存并跳转登录页
第二层业务消息拦截响应体中匹配 token 过期关键词时触发相同跳转
第三层错误消息标准化映射为用户友好中文提示

(4)数据归属参数传递

  • 老人端:elderlyId登录时已存入本地缓存,查询时自动携带
  • 家属端:从绑定关系获取boundElderlyId,操作老人数据时作为参数传递

三、联调与测试验证

模块验证项状态
5 个 Agent 对话角色设定生效,回复符合预期✅ 通过
SSE 流式输出逐字输出正常,120s 超时处理正确✅ 通过
会话用户隔离老人/家属只能操作自己的会话,越权返回 403✅ 通过
家属辅诊身份familyId 从 JWT 获取,不可伪造✅ 通过
JWT 鉴权所有业务请求携带 Bearer 令牌,无 token 返回 401✅ 通过
数据归属老人仅查本人数据,家属仅查绑定老人数据✅ 通过
双层 401 拦截HTTP 状态码 + 业务消息双层均生效✅ 通过
编译验证Maven 编译通过✅ 通过

四、待解决问题与风险

问题当前状态处理计划
会话模块 DB 持久化与 ownerUserId 归属校验未完全对齐4 个会话文件暂对齐 master 版本master 合并 JWT 后统一迭代
用药提醒短信模板编码未配置配置项已预留,值为空阿里云控制台申请模板后填入
Token 刷新机制未实现token 过期后直接跳转登录后续增加静默续期
健康指标数值范围校验尚未补充录入仅校验 ID 非空与产品/医学侧确认阈值后补充
对话过长 Token 超限滑动窗口已兜底,但无摘要压缩后续引入摘要压缩策略

五、下周计划

  1. 最终联调:完成项目全模块前后端联调,确保鉴权、归属校验、会话管理等全链路无遗漏
  2. 会话模块对齐:master 合并 JWT 能力后,将会话模块 DB 持久化与 ownerUserId 归属校验统一
  3. Token 刷新:增加 token 自动刷新机制,在即将过期时静默续期
  4. 健康指标校验:完善录入数值范围校验,提升数据质量
  5. 用药提醒业务层:配合完成定时扫描与短信发送的业务层实现
  6. 健康报告与 OCR 联调:与前端对接健康报告生成、追问及 OCR 识别接口
http://www.gsyq.cn/news/1552379.html

相关文章:

  • 科技创新与新e选烤火罩的结合
  • 外卖 茶饮行业偏爱 PP 塑料打包桶?
  • 2026西安输送辊厂家口碑推荐 价格透明避坑不踩坑 - myqiye
  • 函数递归:根据传入的序号,计算对应学生的年龄
  • 遵义六家黄金回收店铺逐一实测客观记录 - 余生黄金回收
  • 93LC46/56/66 EEPROM实战指南:从选型、驱动到可靠性设计
  • Burp Suite 2024.7.3专业版实测:拦截优化与性能提升深度解析
  • Kimi LeetCode 3283. 吃掉所有兵需要的最多移动次数 Rust实现
  • 串口服务器波特率踩坑记录
  • 口碑好的洗扫一体机专业公司,你知道几个 - mypinpai
  • 零成本上手AI测试工具:从核心原理到实战选型指南
  • YOLOv8-face轻量化人脸检测:从架构设计到边缘部署的全栈技术实践
  • AI辅助网络文学创作的合规方法论与实践路径
  • OpenCore Legacy Patcher终极解密:老Mac重生计划的技术突破与实战验证
  • 手机怎么调整图片分辨率?用秒转工具箱改像素和DPI - 玩机日常
  • PReLU与SELU工程实战:负向敏感度调节与自归一化落地指南
  • Audacity音频编辑:如何用开源工具解决专业音频处理难题?
  • 2026北京寰亚艺考面授教学效果深度测评 价格透明避坑指南 口碑实力之选 - mypinpai
  • 资质齐全的复印机出租公司如何选? - myqiye
  • 2026年6月目前靠谱的工业链条直销厂家推荐,非标链条/链条/不锈钢链条/工业链条,工业链条源头厂家哪家好 - 品牌推荐师
  • 小波Elman神经网络:多尺度时间序列预测的工程实践
  • 仿 Boots 大规模钓鱼攻击的技术机理与防御研究
  • 为什么机器学习工程师偏爱Colab:环境一致性与协作效率实战解析
  • [Android] Fluid Live Wallpaper V1.8.0流体动态壁纸高级版-4K液体流动,手指触摸变化
  • Windows性能分析实战:从卡顿根因定位到系统调优全流程
  • 深度哈希实战:端到端训练实现毫秒级相似性搜索
  • CRISP-ML(Q):面向落地的机器学习工程化标准流程
  • ML生产化不是部署模型,而是构建可信决策系统
  • Harness Engineering:从“使用AI“到“驾驭AI“的范式跃迁
  • 小模型接管前沿模型的四类确定性场景与工程落地方法