2026年软件学院创新项目实训|智能居家养老健康守护系统·第三周工作博客
登录全链路贯通、多轮对话记忆落地:系统迈向“真实可用”
第三周是项目从“能跑通”向“可联调、可记忆、可追溯”的关键转折点。团队完成了三大核心突破:前端登录升级为兼容真实短信与微信一键登录的稳定能力;后端打通了从短信/微信认证到 JWT 鉴权、家属绑定与敏感操作校验的全链路;AI 智能体则告别“失忆”模式,通过轻量级文件存储与多轮对话集成,真正具备了上下文记忆与历史管理能力。
前端:登录能力从演示级升级到联调级
前端登录模块在本周完成了真实短信验证码登录与微信手机号一键登录的完整对接,并大幅提升了错误定位效率。
短信验证码登录闭环
- 手机号与验证码输入自动过滤非数字字符、限制长度,从源头减少脏数据。
- 获取验证码按钮增加 60 秒倒计时与防重复点击,避免重复发送。
- 登录成功后本地持久化登录态,并自动跳转首页。
接口兼容与降级
- 优先请求
/api/auth/sms/send-code;若后端未部署该接口,自动回退到/api/auth/sms/send(scene=LOGIN)。 - 通过前端降级策略降低版本耦合,提升联调效率。
微信手机号一键登录
- 利用
open-type="getPhoneNumber"获取 phoneCode,结合wx.login的 loginCode 发起后端认证。 - 对“用户拒绝授权”“需先在微信验证手机号”等高频异常,提供明确中文提示,不再将技术报错直接暴露给老人。
错误处理与诊断增强
- 网络异常、验证码错误、短信服务暂不可用、操作频繁等场景全部映射为友好文案。
- 请求日志增加 method、url、timeout、elapsed,超时问题可从“页面级”迅速收敛到“接口级”。
- 经联调验证,登录流程(输入、发码、验证、跳转)全闭环可执行,异常分支均有明确指引。
后端:登录鉴权与家属绑定能力全面落地
后端本周围绕“身份认证”与“多角色关系”两条主线,完成了短信/微信双通道登录、JWT 鉴权、家属-老人绑定的完整闭环。
短信验证码服务
- 集成阿里云短信,验证码存入 Redis,Key 按场景隔离(
sms:code:<SCENE>:<PHONE>)。 - 5 分钟有效期,60 秒发送冷却,校验后立即删除,避免复用。
- 支持 LOGIN、FAMILY_SENSITIVE 等多种业务场景,敏感操作单独使用独立验证码。
微信小程序登录
- 封装
jscode2session获取 openid/unionid/session_key,并通过getuserphonenumber获取手机号。 - 首次微信登录自动注册用户档案(家属或老人),非首次登录按需更新资料。
- 数据库 elderly 与 family 表新增 open_id/union_id/register_source 字段,手机号改为可空,保证微信首次登录流程不中断。
JWT 鉴权
- 登录成功后签发 JWT Token,内含 userType、phone、openId 等声明。
- 后端通过 Spring Security 过滤器统一解析
Authorization: Bearer <token>,提取用户身份与角色,为家属侧敏感接口提供权限校验基础。
家属-老人绑定关系
- 提供绑定/解绑/改绑完整接口,绑定操作支持新建、历史恢复等幂等处理。
- 解绑与改绑被定义为敏感操作,必须通过短信验证码(scene=FAMILY_SENSITIVE)二次确认,降低误操作风险。
- 所有绑定接口均从 JWT 解析家属身份,并校验 userType,防止越权。
经过本周改造,系统在“老人/家属登录—身份建立—关系绑定—敏感操作校验”链路上具备最小闭环能力。
AI Agent:会话持久化与多轮对话记忆全面上线
前两周开发的用药审核 Agent 与情感陪伴 Agent 长期处于“一次性回答”模式——每次请求都是独立对话,AI 毫无上下文。本周通过引入轻量级 JSON 文件存储层,两个 Agent 同时拥有了“持久记忆”与“历史管理”能力。
1. 文件存储层设计
选用 JSON 文件(而非数据库)实现会话持久化,理由如下:
- 对话场景并发量低,单条数据量大(可达数千字),文件存储简洁高效。
- 零依赖,结构灵活,易于调试(文本编辑器直接查看)。
- 每个会话一个
.json文件,按 Agent 类型分子目录,文件名即 UUID。
核心数据模型:
ChatMessage:包含 role(user/assistant)、content、timestamp,与 OpenAI/DeepSeek 消息格式直接对齐。ChatSession:包含 sessionId、agentType、mode、title(自动取首条用户消息前30字)、createdAt/updatedAt、消息列表。
代码实现:
ChatSessionService提供创建、读取、保存、列表、删除五个核心操作。- 列表接口返回元数据(标题、时间)但清空 messages,减少数据传输;详情接口返回完整消息。
- 文件按修改时间倒序排列,最近活跃会话优先展示。
- 独立
ObjectMapper实例配置 ISO‑8601 时间格式与缩进,避免干扰 API 全局序列化配置。
2. 用药审核 Agent 多轮对话集成
改造后,用药审核 Agent 的交互流程变为:
- 前端可选传
sessionId,若不传则自动创建新会话。 - 加载历史会话,追加本次用户消息。
- 构建 messages 数组:System Prompt + 所有历史消息,发送给 DeepSeek。
- 收到 AI 回复后,将回复追加到会话并落盘。
效果:老人第一次问“我在吃硝苯地平和华法林,能加阿司匹林吗?”,AI 分析高危出血风险;紧接着问“那换成氯吡格雷呢?”,AI 能理解“换”的上下文,给出针对性审核。
3. 情感陪伴 Agent 的流式持久化
情感陪伴 Agent 同时提供流式(SSE)与非流式接口,流式接口的持久化是技术难点——回复逐字推送,完整内容只能等到流结束。
解决方案:
- 流开始前:解析会话、追加用户消息。
- 流进行中:
StringBuilder收集每个delta.content片段,同时通过 SseEmitter 推送给前端。 - 流正常结束后:将收集到的完整回复封装为 assistant 消息,追加到会话并落盘。
- 如果流中途异常断开,不保存不完整回复,避免脏数据。
改造后,两个 Agent 均新增了会话管理 API:
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/{agent}/sessions |
获取会话列表(不含消息) |
| GET | /api/{agent}/sessions/{id} |
获取完整聊天记录 |
| DELETE | /api/{agent}/sessions/{id} |
删除会话 |
前端可以在聊天界面展示历史对话列表,点击即可恢复完整上下文,用户体验大幅提升。
下周工作计划
前端
- 补齐 OCR 识别结果页与 AI 健康咨询页的完整交互,接入真实会话管理 API。
- 完善用药提醒的新增/编辑能力,优化边界条件处理。
- 开展首轮前后端联调,覆盖登录、绑定、Agent 对话等核心链路。
后端
- 完成数据库连通性与 Auth/绑定接口全量自测,修复短信、微信、JWT 首轮联调问题。
- 进一步开发基于时序数据的个人健康基线动态建模与周期性评估系统。
- 着手准备家属端接口权限细化与多角色联调用例。
AI Agent
- 引入会话上下文窗口限制(滑动窗口),防止对话轮次过多超出模型长度限制。
- 为会话列表增加按用户(老人/家属)隔离能力,避免数据混淆。
- 准备 Agent 对话质量回归测试用例,确保多轮对话稳定性。
从“看到界面”到“记住每一次交流”,第三周我们让系统真正开始“理解”用户。下一阶段,前后端将并肩作战,向完整联调与健康基线分析发起冲击!
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)