2026年软件学院创新项目实训|智能居家养老健康守护系统·第七周工作博客
2026年山东大学软件学院创新项目实训 小组周报第七周一、本周工作概述本周小组围绕AI 对话系统全面落地 安全加固 鉴权联调 新功能上线推进开发主要完成以下工作后端——AI 多角色对话系统实现与安全加固完成 5 个 Agent情感陪伴/健康陪诊/健康干预/用药安全/家属辅诊的完整对话接口开发每个 Agent 提供普通对话、流式 SSE、会话列表、会话详情、会话删除共 5 个接口修复 15 个会话管理接口的用户隔离漏洞修复家属辅诊familyId可被伪造的安全问题新增对话记忆滑动窗口防止 Token 超限。后端——JWT 统一身份识别与数据归属校验重构登录态体系将用户主键写入 JWT subject新增全局过滤器与线程上下文在健康数据、用药计划、病历等模块按「老人本人 / 家属已绑定老人」过滤读写范围。后端——用药提醒数据层基础设施设计medication_reminder_log表结构及索引完成实体映射、定时任务线程池配置、短信模板扩展。后端——健康报告生成与 OCR 医疗单据识别新增基于 7 天体征数据的 AI 健康报告生成含多轮追问新增 OCR 医疗单据识别功能调用 qwen3.6-plus 多模态模型自动结构化入库。前端——JWT 鉴权全链路联调适配后端登录响应字段增强请求拦截器统一注入 Bearer 令牌完善双层 401 拦截机制完成数据归属参数传递与全链路验证。二、具体工作内容2.1 AI 多角色对话系统实现1系统架构采用统一基座 差异化 Prompt架构所有 Agent 共享同一套会话管理ChatSessionService和大模型调用基础设施通过不同的 System Prompt 定义角色能力边界。调用链路用户消息 → Controller → resolveSession() → ElderlyContextService.getFullContext()加载健康档案 → ChatMemoryService.buildMessages()构建消息数组 滑动窗口截断 → DeepSeek API/v1/chat/completions → 保存会话 → 返回响应2Agent 矩阵Agent名字接口前缀核心能力温度情感陪伴暖心/api/companion心理慰藉 / 陪诊助手0.8健康陪诊康伴/api/health-companion全科健康问答、导诊0.6健康干预养怡/api/health-intervention饮食/运动/作息个性化方案0.5用药安全审核—/api/medication-safety药物配伍禁忌筛查0.3家属辅诊家护/api/family-assist跨角色健康分析与照护建议0.43每个 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 安全加固1AI 对话用户隔离修复问题5 个 Agent 共 15 个会话管理接口没有用户隔离任意用户可查看/删除其他用户的对话修复ChatSessionServiceImpl注入ElderlyAccessService所有会话操作增加归属校验5 个 Agent Controller 的会话接口统一从JwtUserContext取用户信息操作隔离逻辑列出会话老人elderlyId 自己家属familyId 自己查看/删除校验 session 归属不匹配抛 403创建会话assertCanAccessElderly(elderlyId)2家属辅诊身份修复问题FamilyAssistController的familyId从请求体获取可被伪造修复Controller 层用JwtUserContext.requireFamilyId()覆盖请求体中的值非家属账号调用直接 403同时校验绑定关系无绑定返回 4032.3 JWT 统一身份识别与数据归属校验1登录与令牌重构JwtServiceImpl.generateAccessToken将 userId 写入 JWT 标准字段subjectuserType、phone、openId 写入自定义 claimsJwtService.resolvePrincipal(authorization)统一解析 Bearer 令牌封装JwtPrincipal(userId, userType, phone, openId)短信登录返回SmsLoginResponse含 accessToken、userId、elderlyId前端持久化后携带身份访问业务接口2全局过滤器与线程上下文新增JwtAuthFilterOncePerRequestFilter除登录、发码、Swagger 等白名单路径外默认要求有效 JWT解析成功后写入JwtUserContext请求结束 finally 清理 ThreadLocal 防止线程池复用串用户JwtUserContext提供requireUserId()、requireFamilyId()、requireElderlyId()等静态方法3数据归属校验体系新增ElderlyAccessServiceassertCanAccessElderly(elderlyId)校验当前用户能否访问指定老人数据——老人仅本人家属仅bindStatus1的绑定老人新增ElderlyScopedCrudSupport封装带 elderlyId 实体的权限模板各模块 Controller 改造为listForCurrentUser()/getForCurrentUser(id)等方法解决ElderlyAccessService与ElderlyFamilyService循环依赖绑定关系查询改为注入ElderlyFamilyMapper2.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提供历史报告列表与详情查询接口2OCR 医疗单据识别调用 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 超限滑动窗口已兜底但无摘要压缩后续引入摘要压缩策略五、下周计划最终联调完成项目全模块前后端联调确保鉴权、归属校验、会话管理等全链路无遗漏会话模块对齐master 合并 JWT 能力后将会话模块 DB 持久化与 ownerUserId 归属校验统一Token 刷新增加 token 自动刷新机制在即将过期时静默续期健康指标校验完善录入数值范围校验提升数据质量用药提醒业务层配合完成定时扫描与短信发送的业务层实现健康报告与 OCR 联调与前端对接健康报告生成、追问及 OCR 识别接口

相关新闻

Kimi    LeetCode 3283. 吃掉所有兵需要的最多移动次数 Rust实现

Kimi LeetCode 3283. 吃掉所有兵需要的最多移动次数 Rust实现

以下是 LeetCode 3283. 吃掉所有兵需要的最多移动次数 的 Rust 实现。解题思路这道题是一个组合博弈问题,核心思路分为两步:1. BFS 预处理最短距离 棋盘大小为 5050,马的移动有 8 个方向。由于最多只有 15 个兵,我们可以&#xff…

2026/6/19 5:55:32阅读更多 →
曲线拟合实战指南:从原理到Python实现与避坑

曲线拟合实战指南:从原理到Python实现与避坑

1. 项目概述:从“addcurve”看曲线拟合的工程实践“addcurve”这个看似简单的函数名,背后承载的是数据科学、工程仿真乃至日常数据分析中一个极为核心的需求:如何让一条平滑、合理的曲线穿过我们手头那些离散的、可能还带着噪声的数据点&…

2026/6/19 5:50:32阅读更多 →
跨视图对比学习在脑疾病分类中的创新应用

跨视图对比学习在脑疾病分类中的创新应用

1. 跨视图对比学习在脑疾病分类中的创新应用在神经影像分析领域,脑疾病分类一直面临着两个关键挑战:如何有效整合全局脑结构信息与局部区域间功能连接特征,以及如何在有限标注数据下学习具有判别力的表征。传统方法通常单独处理3D脑成像体积或…

2026/6/19 5:50:32阅读更多 →
Chatbox CE技术架构深度解析:多模型AI客户端的模块化设计与实战应用

Chatbox CE技术架构深度解析:多模型AI客户端的模块化设计与实战应用

Chatbox CE技术架构深度解析:多模型AI客户端的模块化设计与实战应用 【免费下载链接】chatbox Powerful AI Client 项目地址: https://gitcode.com/GitHub_Trending/ch/chatbox 为什么选择Chatbox CE作为你的AI开发工具箱?在AI应用遍地开花的今天…

2026/6/19 7:25:40阅读更多 →
Mindustry服务器搭建指南:从源码编译到生产部署的完整实践

Mindustry服务器搭建指南:从源码编译到生产部署的完整实践

Mindustry服务器搭建指南:从源码编译到生产部署的完整实践 【免费下载链接】Mindustry The automation tower defense RTS 项目地址: https://gitcode.com/GitHub_Trending/min/Mindustry 你是否曾想搭建自己的Mindustry服务器,却对复杂的配置和编…

2026/6/19 7:25:40阅读更多 →
Wan2.1-T2V-14B API使用教程:如何通过RESTful接口生成AI视频

Wan2.1-T2V-14B API使用教程:如何通过RESTful接口生成AI视频

Wan2.1-T2V-14B API使用教程:如何通过RESTful接口生成AI视频 【免费下载链接】Wan2.1-T2V-14B 项目地址: https://ai.gitcode.com/atomgit-ascend/Wan2.1-T2V-14B 想要通过简单的API调用就能生成惊艳的AI视频吗?Wan2.1-T2V-14B是一个基于昇腾NPU…

2026/6/19 7:25:40阅读更多 →
Appium Inspector环境配置与自动化测试入门实战指南

Appium Inspector环境配置与自动化测试入门实战指南

1. 项目概述与核心价值最近在折腾移动端自动化测试,发现很多朋友卡在了环境配置和第一个脚本上。Appium Inspector 作为 Appium 的官方桌面客户端,配合 Android 真机或模拟器,是入门自动化测试最直观的路径。但这条路看似平坦,实则…

2026/6/19 7:25:40阅读更多 →
MPC105 L2缓存接口配置:从硬件设计到软件调优的工程实践

MPC105 L2缓存接口配置:从硬件设计到软件调优的工程实践

1. MPC105 L2缓存接口:从硬件设计到软件配置的深度解析在嵌入式系统和高性能计算板卡的设计中,处理器的性能瓶颈往往不在其主频,而在于内存墙。当CPU核心以GHz频率运行时,每一次对主内存的访问都可能需要数十甚至上百个时钟周期的…

2026/6/19 7:25:40阅读更多 →
驾驭脑电信号:MNE-Python如何破解神经数据分析的三大核心难题

驾驭脑电信号:MNE-Python如何破解神经数据分析的三大核心难题

驾驭脑电信号:MNE-Python如何破解神经数据分析的三大核心难题 【免费下载链接】mne-python MNE: Magnetoencephalography (MEG) and Electroencephalography (EEG) in Python 项目地址: https://gitcode.com/gh_mirrors/mn/mne-python 当你面对海量的脑电图数…

2026/6/19 7:20:39阅读更多 →
Photobucket付费墙背后:5美元买童年回忆却落得一场空!

Photobucket付费墙背后:5美元买童年回忆却落得一场空!

1. 付费墙初现如今身处万亿市值公司林立的时代,我们也不能轻易放弃5美元。就像Photobucket,它曾相当于过去的Imgur,我们小时候常把图片上传到这个网站,然后在各种论坛上分享链接,它简单好用,尽职尽责。但最…

2026/6/19 0:04:37阅读更多 →
如何在5分钟内掌握Mermaid Live Editor:实时图表编辑终极指南

如何在5分钟内掌握Mermaid Live Editor:实时图表编辑终极指南

如何在5分钟内掌握Mermaid Live Editor:实时图表编辑终极指南 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live…

2026/6/19 0:04:37阅读更多 →
yuzu模拟器内存修改技术深度解析:金手指功能实现原理与实践指南

yuzu模拟器内存修改技术深度解析:金手指功能实现原理与实践指南

yuzu模拟器内存修改技术深度解析:金手指功能实现原理与实践指南 【免费下载链接】yuzu 项目地址: https://gitcode.com/GitHub_Trending/yuz/yuzu yuzu作为目前最流行的开源Nintendo Switch模拟器,不仅提供了完整的游戏运行环境,还内…

2026/6/19 0:04:37阅读更多 →