一、整体流程架构

AI分析报告生成是一个多阶段协作的复杂流程,涉及数据聚合、提示词工程、大模型调用、响应解析等多个环节。整个流程可以分为六个核心阶段,形成一个完整的闭环。

API调用层

数据聚合层

用户请求

参数验证

数据聚合

提示词构建

大模型
API调用

响应解析与
健康等级计算

结果返回

是否保存?

持久化
存储

流程结束

饮食
数据

运动
数据

睡眠
数据

情绪
数据

体重
数据

构建
请求体

设置
请求头

发送
请求

处理
响应

二、请求入口与参数验证

请求首先进入 AiHealthAnalysisController,这是整个流程的入口。控制器层负责接收HTTP请求、进行初步参数验证,并将业务逻辑委托给Service层处理。

参数验证是第一道防线,需要确保关键参数的完整性:

// 核心验证逻辑(简化)
if (username == null || username.trim().isEmpty()) {
    throw new IllegalArgumentException("用户名不能为空");
}
if (aiApiUrl == null || aiApiUrl.trim().isEmpty()) {
    throw new IllegalStateException("AI API URL未配置");
}

技术思考:参数验证采用分层策略,Controller层处理基础格式验证,Service层处理业务规则验证,这种职责分离确保了代码的可维护性。

三、数据聚合阶段:多维度健康数据的融合

数据聚合是整个流程中最关键的阶段之一,需要从五个不同的业务模块获取数据:

数据维度 对应的SummaryService 数据内容
饮食 FoodRecordSummaryService 饮食记录、热量摄入、食物种类
运动 WorkoutSummaryService 运动记录、消耗热量、运动类型
睡眠 SleepRecordSummaryService 睡眠时长、睡眠质量、入睡时间
情绪 MoodRecordSummaryService 情绪分布、积极/消极情绪占比
体重 WeightRecordSummaryService 体重变化、BMI范围

数据聚合的核心逻辑展示了依赖注入的优势:

Map<String, Object> healthData = new HashMap<>();
healthData.put("food", foodRecordSummaryService.getFoodRecordSummary(username, startDate, endDate));
healthData.put("mood", moodRecordSummaryService.getMoodRecordSummary(username, startDate, endDate));
healthData.put("sleep", sleepRecordSummaryService.getSleepRecordSummary(username, startDate, endDate));
healthData.put("weight", weightRecordSummaryService.getWeightRecordSummary(username, startDate, endDate));
healthData.put("workout", workoutSummaryService.getWorkoutSummary(username, startDate, endDate));

技术进度:当前已完成五个维度的数据聚合,下一步计划引入缓存机制,减少重复查询,提升聚合效率。

四、提示词构建:结构化输入的艺术

提示词构建是生成高质量AI回复的核心。当前实现采用了结构化的四层提示词架构:

角色定义

数据输入

规则约束

格式要求

4.1 角色定义层

明确AI的身份定位:“你是一位专业健康分析师”,这确保了AI回复的专业性和权威性。

4.2 数据输入层

将聚合的健康数据格式化后输入,包括:

  • 分析周期范围
  • 用户特殊备注(如病史、健康目标)
  • 各维度详细数据记录

4.3 规则约束层

这是确保输出质量的关键,包含四条核心规则:

  1. 没有记录的数据≠不存在,不扣分原则
  2. 基于现有数据合理分析
  3. 保持客观中立态度
  4. 结合用户备注个性化分析

4.4 格式要求层

定义严格的输出格式模板,确保AI返回结构化数据,便于后续解析。

技术难点:如何在保证格式严格性的同时保持AI回复的灵活性,这需要在提示词中平衡约束与自由度。

五、大模型API调用:跨系统通信的实现

API调用阶段涉及多个技术要点:

5.1 请求配置

SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
factory.setConnectTimeout(120000); // 连接超时120秒
factory.setReadTimeout(120000);    // 读取超时120秒
RestTemplate restTemplate = new RestTemplate(factory);

设置较长的超时时间是考虑到健康分析需要处理较多数据,大模型生成时间可能较长。

5.2 安全认证

采用Bearer Token认证方式:

headers.set("Authorization", "Bearer " + aiApiKey);

5.3 异常处理策略

针对不同HTTP状态码采取差异化处理:

状态码 处理策略 用户提示
401 API key认证失败 请检查API key是否正确
400 请求参数错误 参数格式验证
429 请求频率超限 稍后重试
500 服务器错误 稍后重试

技术进度:当前实现了基础的异常处理,下一步计划引入重试机制和熔断保护,提升系统稳定性。

六、响应解析与健康等级计算

6.1 响应解析流程

// 从响应中提取内容
List<Map<String, Object>> choices = (List<Map<String, Object>>) response.get("choices");
Map<String, Object> choice = choices.get(0);
Map<String, Object> messageObj = (Map<String, Object>) choice.get("message");
String content = (String) messageObj.get("content");

采用逐层解析策略,每一步都进行空值检查,避免NullPointerException。

6.2 健康等级提取

健康等级提取采用双策略方案:

// 策略一:直接提取综合评价
Pattern pattern = Pattern.compile("综合评价[::]?\\s*【?([优秀良好一般需改善]+)】?");
Matcher matcher = pattern.matcher(analysis);
if (matcher.find()) {
    return matcher.group(1);
}

// 策略二:基于各维度评价计算综合等级
Map<String, Integer> levelScores = new HashMap<>();
levelScores.put("优秀", 4);
levelScores.put("良好", 3);
levelScores.put("一般", 2);
levelScores.put("需改善", 1);
// ... 计算平均分并四舍五入

技术亮点:双策略机制保证了即使AI输出格式略有偏差,也能正确提取健康等级,提升了系统的健壮性。

七、数据持久化:分析记录的管理

分析记录的存储涉及多个业务需求:

HEALTH_ANALYSIS_RECORDS

Long

id

PK

String

username

String

startDate

String

endDate

String

analysisContent

String

healthLevel

Date

createdAt

boolean

favorited

String

notes

7.1 存储优化策略

  • 使用LONGTEXT类型存储分析内容,支持大文本
  • 建立复合索引优化查询性能
  • 支持收藏功能,便于用户管理重要报告

7.2 记录管理功能

功能 实现方式 技术要点
批量删除 deleteAllById(ids) 利用JPA批量操作优化性能
收藏状态切换 原子更新操作 避免并发问题
按健康等级查询 索引优化查询 idx_analysis_username

八、技术难点与解决方案

8.1 数据一致性问题

问题:多个SummaryService调用可能部分失败
方案:采用非事务性聚合,允许部分数据缺失,通过提示词规则约束AI处理缺失数据

8.2 API调用超时问题

问题:大模型响应时间不确定
方案:设置较长超时时间(120秒),后续计划引入异步处理

8.3 响应格式不一致问题

问题:AI输出格式可能不符合预期
方案:采用正则表达式提取关键信息,建立容错机制

8.4 用户数据隐私问题

问题:健康数据属于敏感信息
方案:传输加密、存储加密、最小化数据传递

九、当前技术进度与未来规划

9.1 已完成功能

  • ✅ 多维度健康数据聚合
  • ✅ 结构化提示词工程
  • ✅ 大模型API封装与调用
  • ✅ 健康等级自动提取
  • ✅ 分析记录CRUD操作
  • ✅ 基础异常处理

9.2 待优化项

优先级 优化项 预期收益
引入缓存机制 提升数据聚合效率
异步处理机制 降低请求响应时间
重试与熔断 提升系统稳定性
多模型支持 增强灵活性
结果缓存 减少重复调用成本

十、总结

AI分析报告生成流程是一个典型的"数据-模型-洞察"闭环系统。通过分层架构设计,实现了数据聚合、提示词工程、API调用、响应解析的解耦。当前实现已经具备完整的功能,但在性能优化和系统稳定性方面仍有提升空间。未来将重点关注异步处理、缓存策略和多模型支持,构建更加健壮和高效的智能健康分析引擎。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐