写在前面:由于实训课程使用的AI API截至本文发布时仍未下发,而开发进展较快,此处暂时使用了科大讯飞Maas的免费API。受大模型功能限制,图片识别功能暂未实现。待课程API下发后将发布修改内容,将其作为一篇新的博客。

一、提示词工程的设计哲学

1.1 核心目标:让AI成为专业健康分析师

提示词设计的本质是将业务规则转化为机器可理解的语言。在健康分析场景中,我们需要引导大模型:

  • 理解五个健康维度的数据结构
  • 遵循统一的评价标准
  • 生成格式规范的输出
  • 保持客观中立的分析态度

1.2 分层设计思想

提示词采用四层结构

角色定义

数据输入

规则约束

格式要求

角色定义:明确AI身份(专业健康分析师),建立分析基调;
数据输入:结构化呈现饮食、运动、睡眠、情绪、体重数据;
规则约束:定义评价体系、缺失数据处理原则;
格式要求:指定输出结构,确保可解析性。

1.3 关键设计原则

原则一:数据驱动
所有分析必须基于提供的数据,不得虚构信息。这通过在提示词中明确说明"基于以下数据"来实现。

原则二:客观中立
缺失记录不代表不健康,不对未记录的数据进行负面推断。

原则三:格式强制
通过代码块格式约束输出结构,便于后续解析和前端展示。

二、提示词工程的技术实现

2.1 动态提示词构建

根据用户实际数据动态生成提示词,而非使用固定模板:

// 核心构建逻辑
private String buildPrompt(Map<String, Object> healthData, String startDate, String endDate, String analysisNotes) {
    StringBuilder prompt = new StringBuilder();
    // 1. 角色定义和分析周期
    prompt.append("# 健康分析师\n\n");
    prompt.append("**分析周期**:").append(startDate).append(" ~ " + endDate).append("\n\n");
    
    // 2. 用户备注(如果有)
    if (analysisNotes != null && !analysisNotes.trim().isEmpty()) {
        prompt.append("**用户分析备注**:").append(analysisNotes).append("\n\n");
    }
    
    // 3. 重要说明(缺失数据处理原则)
    prompt.append("**重要说明**:\n");
    prompt.append("1. 没有记录的数据并不是不存在,而是用户没有记录\n");
    // ... 继续构建
    
    // 4. 各维度数据注入
    appendFoodData(prompt, healthData);
    appendWorkoutData(prompt, healthData);
    // ...
    
    // 5. 输出格式要求
    appendFormatRequirements(prompt);
    
    return prompt.toString();
}

2.2 健康评价体系的提示词实现

评价体系是提示词的核心,包含:

  • 五个评价维度:饮食健康、运动健康、睡眠质量、情绪状态、体重管理
  • 四级评价标准:优秀、良好、一般、需改善
  • 明确的评价依据:每个维度都有具体的评估指标

2.3 输出格式的强制约束

通过代码块格式强制输出结构:

## 格式规范

健康分析报告

健康分析

饮食

[详细描述]

健康评价

饮食健康:【评价等级】

评价依据:[…]

个性化健康建议

饮食

[具体建议]

改进方向

风险提示

[风险点]

免责声明

本报告仅基于提供的数据…

三、大模型API封装策略

3.1 统一接口设计

采用策略模式封装不同大模型提供商:

AIService接口

XFMaasServiceImpl

OpenAIImpl

OtherModelImpl

讯飞MaaS API

OpenAI API

其他模型API

当前实现优先对接讯飞MaaS API,预留扩展接口。

3.2 连接池与超时配置

针对AI API调用的特殊性,配置较长的超时时间:

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

3.3 异常分类处理

建立多维度异常处理机制

异常类型 HTTP状态码 处理策略
认证失败 401 提示用户检查API Key
参数错误 400 返回具体错误信息
请求频率超限 429 提示稍后重试
服务器错误 500 记录日志并提示用户
网络连接失败 - 提示检查网络

3.4 响应解析与健康等级提取

从AI响应中提取结构化信息:

// 从响应中提取健康等级
private String calculateHealthLevel(String analysis) {
    // 优先提取综合评价
    Pattern pattern = Pattern.compile("综合评价[::]?\\s*【?([优秀良好一般需改善]+)】?");
    Matcher matcher = pattern.matcher(analysis);
    
    if (matcher.find()) {
        return matcher.group(1);
    }
    
    // 备选方案:基于各维度评价计算综合等级
    // ...
    return "未评价";
}

四、当前技术进度

4.1 已完成功能

模块 状态 说明
提示词模板构建 支持五个维度数据注入
讯飞MaaS API对接 完整的请求封装和响应解析
异常处理机制 覆盖主要异常场景
健康等级提取 支持正则提取和计算两种方式

4.2 正在优化项

  1. 提示词优化:基于实际输出不断调整提示词结构
  2. 多模型支持:设计统一接口,支持切换不同大模型
  3. 请求重试机制:针对网络抖动增加自动重试
  4. 请求日志记录:完善API调用日志,便于问题排查

4.3 待开发项

  1. 提示词版本管理:支持不同版本提示词的切换和对比
  2. 模型选择策略:根据分析复杂度选择合适模型
  3. 流式输出支持:支持大模型的流式响应,提升用户体验
  4. 成本控制:监控API调用成本,设置调用限额

五、技术挑战与解决方案

5.1 输出格式不稳定

问题:大模型偶尔不按照指定格式输出

解决方案

  • 在提示词中反复强调格式要求
  • 添加格式校验逻辑,不符合要求则重新请求
  • 调整temperature参数,降低随机性

5.2 API调用成本控制

问题:大模型API调用成本较高

解决方案

  • 引入缓存机制,避免重复分析相同数据
  • 设置调用频率限制
  • 选择性价比更高的模型

5.3 响应时间优化

问题:大模型响应时间较长,影响用户体验

解决方案

  • 使用异步调用,不阻塞主线程
  • 提供分析进度提示
  • 预计算常用分析场景

5.4 图片识别困难

问题:大模型无法识别图片,影响功能实现

解决方案

  • 暂时预留接口,方便后续实现
  • 等待统一下发大模型API

六、总结

提示词工程和API封装是AI健康分析系统的核心技术环节。当前实现已具备完整的功能,但仍有优化空间:

短期目标:优化提示词结构,提升输出质量和稳定性;
中期目标:寻找有图片识别功能的大模型,以期实现扩展功能;
长期目标:探索提示词自动优化机制,实现智能化调优。

通过持续迭代和优化,我们正在构建一个稳定、高效、可扩展的AI分析引擎,为用户提供高质量的健康分析服务。

Logo

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

更多推荐