山东大学软件学院项目实训-基于语言大模型的智能居家养老健康守护系统-个人博客(二)
一、技术选型
| 技术 | 选型 | 理由 |
|---|---|---|
| 后端框架 | Spring Boot 3.2 | 项目已有基础框架 |
| HTTP 客户端 | Spring RestTemplate | 项目已有 Bean,非流式场景够用 |
| 大模型 API | DeepSeek Chat API | OpenAI 兼容格式,国内访问稳定,性价比高 |
| 配置管理 | @ConfigurationProperties | Spring Boot 原生,类型安全 |
| 接口文档 | SpringDoc OpenAPI 3 | 自动生成 Swagger UI |
二、整体架构

整个调用链路为:前端 → Controller → Service → DeepSeek API → 解析响应 → 返回前端。
三、详细实现
3.1 配置层:DeepSeek API 接入
首先在 application.yml 中新增 DeepSeek 的连接配置:
api-key: sk-xxxxxxxxxxxxxxxxxxxxx # DeepSeek API 密钥
base-url: https://api.deepseek.com # API 基础地址
model: deepseek-chat # 使用的模型名称
然后通过 @ConfigurationProperties 将配置映射为 Java 对象,实现类型安全的配置读取:

设计思考:将 API 密钥和模型名称外部化到 yml,方便后续切换模型(如从
deepseek-chat切换到deepseek-reasoner)而不修改代码。同时在这里注册RestTemplateBean 供全局使用。
3.2 DTO 层:请求参数定义
定义请求体 DTO,使用 JSR-303 注解做参数校验,配合 Swagger 注解生成接口文档:
设计思考:
currentMedications使用List<String>而非单个字符串,因为老年人通常同时服用多种药物,列表形式更贴合实际业务场景,也方便前端从用药计划表中直接传入。
3.3 Service 层:核心业务逻辑
这是整个 Agent 的核心——Prompt 工程 + API 调用。
3.3.1 System Prompt 设计
System Prompt 是 Agent 的「人设」,决定了大模型的行为边界和输出格式:
Prompt 设计要点:
- 明确角色:「临床药师」限定了专业领域
- 明确受众:「老年人」让模型关注老年特殊生理(肝肾功能减退、多重用药等)
- 结构化输出:通过指定
【审核结果】【风险等级】【详细分析】【建议措施】四个板块,确保输出格式一致,便于前端解析展示
3.3.2 User Prompt 组装
将前端传入的药物列表转化为自然语言描述:

例如,当传入 currentMedications: ["硝苯地平", "华法林"],newMedication: "阿司匹林" 时,组装后的 User Prompt 为:
患者(老年人)目前正在服用以下药物:【硝苯地平、华法林】,现准备加服【阿司匹林】。请运用医学与药学专业知识,判断是否存在药物配伍禁忌、药食冲突或其他用药安全风险,并给出详细分析和建议。
3.3.3 调用 DeepSeek API
DeepSeek API 兼容 OpenAI 格式,调用 /v1/chat/completions 端点:
关键参数说明:
temperature: 0.3:设置较低的随机性,确保医学建议的严谨性和一致性。如果设为 0.9,每次对相同用药组合可能给出不同分析,在医疗场景下不可接受。max_tokens: 2000:足够覆盖一份详细的药物分析报告(通常 800-1500 tokens)。messages数组包含system(人设)和user(具体问题)两条消息,这是 OpenAI 格式的标准对话结构。
3.4 Controller 层:接口暴露
Controller 保持简洁,职责仅为接收请求、参数校验、调用 Service、封装响应:
使用
@Valid注解触发 DTO 中的 JSR-303 校验。如果前端未传currentMedications,会自动返回 400 错误,无需手动if-else判断。
四、API 接口文档
请求
```
POST /elderlycare/api/medication-safety/check
Content-Type: application/json
```
```json
{
"currentMedications": ["硝苯地平", "华法林"],
"newMedication": "阿司匹林"
}
```
成功响应
```json
{
"code": 200,
"msg": "success",
"data": "【审核结果】:存在风险\n\n【风险等级】:高危\n\n【详细分析】:\n1. 华法林 + 阿司匹林:两者均为抗凝/抗血小板药物,联合使用会显著增加出血风险(消化道出血、脑出血等),属于高危配伍禁忌。\n2. 硝苯地平 + 阿司匹林:两者无明显直接冲突,但硝苯地平可轻度影响血小板功能...\n\n【建议措施】:\n1. 强烈建议在医生指导下评估是否需要同时使用华法林和阿司匹林\n2. 如确需联用,应定期监测INR值和凝血功能\n3. 注意观察有无出血倾向(牙龈出血、皮肤瘀斑、黑便等)"
}
```
五、文件结构总结
新增文件:
src/main/java/com/xxx/elderlycare/
├── common/config/
│ └── DeepSeekConfig.java # dsAPI 配置
├── controller/
│ └── MedicationSafetyController.java # REST 接口
├── dto/
│ └── MedicationCheckRequest.java # 请求 DTO
├── service/
│ ├── MedicationSafetyService.java # 服务接口
│ └── impl/
│ └── MedicationSafetyServiceImpl.java # 核心实现
修改文件:
src/main/resources/
└── application.yml # 新增ds配置段
六、总结与思考
本模块的核心工作在于 Prompt Engineering——如何通过精心设计的 System Prompt 让大模型扮演好「临床药师」这一角色,并输出格式统一、内容可靠的审核报告。
几个关键的设计决策:
- 低 temperature (0.3):医疗场景需要确定性和一致性,不适合高随机性的创意输出。
- 结构化输出格式:在 Prompt 中约定
【审核结果】【风险等级】【详细分析】【建议措施】四段式格式,方便前端按段落解析和分色展示。
七、 AI 功能测试报告
在完成“用药安全审核”模块开发后,我们对整个项目的 AI 组件(包含情感陪伴与用药安全相关逻辑)进行了全面验证。
7.1 测试环境与配置校验
- 核心依赖: 验证了 Spring Boot 3.2.12、MyBatis-Plus 3.5.7 及 SpringDoc OpenAPI 2.6.0 的兼容性。
- 配置验证:
application.yml中 DeepSeek API 密钥、BaseURL 及模型名称(deepseek-chat)已正确配置。
7.2 组件验证状态
| 组件名称 | 验证项 | 状态 | 备注 |
|---|---|---|---|
| 控制器 (Controller) | 接口映射与参数校验 | ✅ 通过 | 包含标准 JSON 响应与 SSE 流式响应端点 |
| 服务层 (Service) | 业务逻辑与 Prompt 注入 | ✅ 通过 | 成功集成 DeepSeek API,支持异步线程池处理 |
| 提示词 (Prompts) | 角色设定与回复质量 | ✅ 通过 | 涵盖“暖心陪伴”与“专业药师/诊断”双模式 |
| 架构配置 | 依赖管理与数据库连接 | ✅ 通过 | PostgreSQL 驱动及验证启动器配置正确 |
7.3 核心 AI 功能表现
- 情感陪伴/医疗咨询:
- 流式响应 (SSE):
POST /api/companion/chat/stream能够实时返回文本流,提升用户体验。 - 多模式切换: 能够根据 User Prompt 在“温柔耐心”的陪伴模式与“专业严谨”的审核模式间切换。
- 流式响应 (SSE):
- 安全性与边界:
- 非医疗诊断声明: AI 在处理症状描述时,能正确引导用户就医,不违规提供处方建议。
- 参数校验: 使用 JSR-303 验证,当药物列表为空时能触发正确的 400 错误提示。
7.4 测试覆盖情况
- 自动化测试: 已创建
AiFunctionalityTest.java,涵盖控制器初始化、服务模拟行为及端点结构验证。 - 集成测试:
- Swagger UI: 通过
http://localhost:8080/elderlycare/swagger-ui.html完成交互式冒烟测试。 - Curl 验证: 模拟前端请求,验证了 API 在 30 秒超时时间内的响应稳定性。
- Swagger UI: 通过
7.5 运行先决条件
在生产或完整开发环境下运行前,请确保:
- 数据库就绪: 执行
sql/elder_guard_7tables_pgsql.sql初始化 PostgreSQL 数据库。 - API 额度: 确保 DeepSeek API 密钥具有充足积分且未过期。
- 连接性: 后端服务器需具备访问
api.deepseek.com的外网权限。
7.6 总体评估
结论:合格 该项目的 AI 架构设计合理,实现了从配置管理、Prompt 工程到流式输出的全链路闭环。针对老年人设计的“药师助手”与“情感陪伴”功能在逻辑上具有高度的一致性与专业性,具备上线运行的基础条件。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)