一、本周工作概述

本周小组围绕"AI Agent 核心能力完善 + 前端交互重构 + 健康数据可视化"三条主线推进开发,主要完成了以下工作:

  1. 后端——家属辅诊 Agent 开发与上下文聚合层实现:完成家属辅诊 Agent 的 Prompt 工程、绑定关系权限校验、多源数据上下文聚合(ElderlyContext)以及多轮会话管理机制,同时记录了 AI 辅助开发过程中的 Bug 排查与修复。
  2. 后端——多维度健康数据聚合与实时大屏接口:基于现有 elderly_health_data 表,新增健康分析专用 Service 与 REST 接口,支持每日健康指标录入及 7 天/30 天/3 个月三维度图表聚合输出,已具备与前端联调条件。
  3. 前端——交互架构重构与聊天会话持久化对接:将导航架构从 5Tab 精简为 3Tab,重新设计 AI 对话页面,完成会话持久化前端对接,统一全站设计风格,并适配 JWT 鉴权机制。

二、具体工作内容

2.1 后端——家属辅诊 Agent 与上下文聚合层

(1)家属辅诊 Agent Prompt 工程

  • 设计"家护"角色 System Prompt,面向中青年家属,语言风格定位为"专业简洁、信息密集",区别于老人端 Agent 的"亲切温和"
  • 核心设计要点:侧重家属可执行的照护建议(饮食搭配、复诊提醒、用药监督);加入焦虑管控指令,避免因异常指标引发家属过度紧张;明确区分"数据显示"与"建议就医确认"
  • Temperature 设为 0.4,在准确性与灵活性之间取平衡
  • 经 AI 生成初版后人工迭代修复两个问题:去除过于自信的数据访问声明,防止模型编造数据;补充"区分确定/不确定"指令,优化异常指标的表述方式

(2)绑定关系权限校验

  • 家属辅诊是系统中唯一涉及跨用户数据访问的模块,通过查询 elderly_family 表(familyId + elderlyId + bindStatus=1)实现绑定校验,不通过则抛出 403 异常
  • 校验逻辑放在 Service 层而非 Controller 层,确保无论从 Controller、定时任务还是其他 Service 调用都必须经过权限检查
  • SSE 流式接口中,校验在建立 SSE 连接之前于主线程完成,确保异常能被 Spring 全局异常处理器正常捕获返回标准 JSON 错误

(3)多源数据上下文聚合层(ElderlyContext)

  • 设计 ElderlyContext 数据模型,涵盖基本信息、疾病史、当前用药、近期就诊记录、最新体征数据
  • 实现 ElderlyContextService,从 elderlydiseasemedication_planmedical_recordelderly_health_data 五张表聚合数据,提供全量(getFullContext)和精简版(getBasicContext)两种接口
  • 输出采用自然语言格式(中文标签分隔,如【疾病史】【当前用药】)而非 JSON,经测试对比在推理准确率和回复自然度上均优于 JSON 格式
  • 家属端采用显式数据注入(“请基于这些数据回答”),老人端采用隐式注入(“不要主动提及已知信息”),体现跨角色设计差异

(4)多轮会话管理

  • 所有 5 个 Agent 共享 ChatSessionService,通过 agentType 字段逻辑隔离
  • 会话生命周期:首次请求 sessionId=null 时自动创建,后续通过 sessionId 恢复历史
  • 消息构建遵循 OpenAI 兼容接口标准范式:system → user → assistant → ...

(5)AI 辅助开发中的 Bug 与修复

Bug原因修复方案
verifyBinding 放在异步线程导致 403 无法被全局处理器捕获AI 将校验放在 executor.execute() lambda 内将校验提到主线程,SSE 连接建立前执行
medication_plan 关联查询 N+1 问题每条用药记录单独查 disease 表批量查出所有 disease 后内存关联,9 次查询降为 2 次
currentMedications 空列表输出不一致只判了 null 没判 isEmpty()补充 isEmpty() 判断
会话并发写入导致消息顺序错乱两个线程同时操作同一 ChatSession 的 messages 列表基于 ConcurrentHashMap 对同一 sessionId 加轻量锁

2.2 后端——多维度健康数据聚合与实时大屏接口

(1)设计思路

采用"每日录入 + 按时间窗口聚合 + 图表结构直出"策略:

  • 老人端每日提交当日检测值,后端按 (elderly_id, check_date) 做 upsert,同日重复提交自动覆盖
  • 查询时补全缺失日期(无数据日指标为 null),前端折线图可直接断点展示
  • 同时输出 series(各指标时间序列)与 summaries(最新值/均值/极值/有效采样天数),一次请求支撑折线图 + 指标卡片

(2)核心实现

  • 数据模型复用现有 ElderlyHealthData 实体,覆盖身高、体重、收缩压、舒张压、心率、血糖、体温 7 项指标
  • 录入 DTO HealthDataTodayRequestcheckDate 由服务端固定为当天,防止客户端篡改
  • 多时间维度支持 LAST_7_DAYSLAST_30_DAYSLAST_3_MONTHS 三种范围枚举
  • 图表响应结构 HealthAnalyticsChartResponse 包含 dateLabelsdailyPointsseriessummaries 等字段,前端可直接绑定 ECharts 组件

(3)新增接口

方法路径说明
POST/api/health-analytics/today录入今日健康数据,同日覆盖更新
GET/api/health-analytics/today?elderlyId=查询今日是否已录入
GET/api/health-analytics/chart?elderlyId=&range=获取指定时间范围图表数据

2.3 前端——交互架构重构与聊天会话持久化对接

(1)导航架构优化(5Tab → 3Tab)

  • 精简为"首页 / AI对话 / 我的"三个 Tab,将 AI 对话提升为核心入口
  • 原"记录"和"用药"功能整合到"我的"页面,通过快捷入口访问

(2)AI 对话页面重构

  • Agent 选择页采用网格卡片布局,点击直接进入对话
  • 聊天界面优化气泡样式、Agent 切换弹窗、输入区域交互
  • 会话管理支持历史会话列表查看、加载恢复、删除操作

(3)会话持久化前端对接

  • 5 个 Agent 服务均已完成 listSessions()getSession(id)deleteSession(id) 接口对接
  • 数据流:发送消息 → chatStream() 流式响应 → 增量渲染;查看历史 → listSessions() → 列表展示;加载历史 → getSession() → 恢复对话上下文

(4)设计风格统一与 JWT 鉴权

  • 统一全站页面结构规范(根类名、背景色、内容容器、导航栏等),已覆盖全部主要页面
  • 实现 JWT Token 自动携带与 401 状态自动跳转登录页

三、联调验证情况

模块验证项状态
聊天会话持久化创建/查看/加载/删除会话✅ 通过
导航架构3Tab 切换、Agent 切换弹窗✅ 通过
JWT 鉴权Token 存储、请求携带、401 跳转✅ 通过
健康数据接口待前端联调(接口契约已就绪)⏳ 待验证

四、待解决问题与风险

问题当前状态处理计划
健康分析接口尚未与 JWT 身份强绑定,存在越权查询风险优先完成核心聚合逻辑下周补充权限校验
健康指标数值范围校验(血压/心率/体温合理区间)未实现录入仅校验 ID 非空与产品/医学侧确认阈值后补充
缺少连续多日 mock 数据,不便验证折线图连续性可通过 Swagger 连续调用或 SQL 脚本补数据下周联调时补充
多轮对话 Token 超限风险当前限制 max_tokens 为 2000后续引入消息裁剪或摘要压缩

五、下周计划

  1. 前后端联调:与健康大屏/小程序前端完成 /api/health-analytics 三个接口联调,验证 7天/30天/3个月切换与折线图、指标卡片展示效果
  2. 权限增强:补充健康分析接口的 JWT 身份校验与家属绑定关系校验,防止越权访问
  3. 数据校验:完善健康指标数值范围校验及录入完成度统计
  4. 可视化优化:增加健康数据的图表展示,提升数据可视化效果
  5. 稳定性提升:优化弱网环境下的用户体验,增加重试机制
  6. 协同推进:配合病历上传模块进度,视需要为家属端提供只读健康趋势查询能力
Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐