feat: 新增饮食记录和分析功能

- 创建饮食记录相关的数据库模型、DTO和API接口,支持用户手动添加和AI视觉识别记录饮食。
- 实现饮食分析服务,提供营养分析和健康建议,优化AI教练服务以集成饮食分析功能。
- 更新用户控制器,添加饮食记录的增删查改接口,增强用户饮食管理体验。
- 提供详细的API使用指南和数据库创建脚本,确保功能的完整性和可用性。
This commit is contained in:
richarjiang
2025-08-18 16:27:01 +08:00
parent 3d36ee90f0
commit 485ba1f67c
19 changed files with 2031 additions and 52 deletions

View File

@@ -0,0 +1,165 @@
# 饮食记录功能实现总结
## 功能概述
根据您的需求,我已经参照现有体重记录的实现,完整地实现了饮食记录功能。该功能包括:
1. **数据库模型** - 完整的饮食记录数据结构
2. **API接口** - RESTful API支持增删查改操作
3. **AI视觉识别** - 优化的图片分析和自动记录
4. **营养分析** - 基于最近饮食记录的健康建议
5. **AI教练集成** - 智能对话中的饮食指导
## 实现的文件清单
### 数据库模型
- `src/users/models/user-diet-history.model.ts` - 饮食记录数据模型
### DTO 结构
- `src/users/dto/diet-record.dto.ts` - 完整的请求/响应数据传输对象
### 服务层
- `src/users/users.service.ts` - 新增饮食记录相关方法:
- `addDietRecord()` - 添加饮食记录
- `addDietRecordByVision()` - 通过AI视觉识别添加记录
- `getDietHistory()` - 获取饮食历史记录
- `updateDietRecord()` - 更新饮食记录
- `deleteDietRecord()` - 删除饮食记录
- `getRecentNutritionSummary()` - 获取营养汇总
### 控制器层
- `src/users/users.controller.ts` - 新增API端点
- `POST /users/diet-records` - 添加饮食记录
- `GET /users/diet-records` - 获取饮食记录列表
- `PUT /users/diet-records/:id` - 更新饮食记录
- `DELETE /users/diet-records/:id` - 删除饮食记录
- `GET /users/nutrition-summary` - 获取营养分析
### AI教练服务增强
- `src/ai-coach/ai-coach.service.ts` - 新增功能:
- `analyzeDietImageEnhanced()` - 增强版饮食图片分析
- `buildUserNutritionContext()` - 构建用户营养上下文
- `buildEnhancedDietAnalysisPrompt()` - 增强版分析提示
- 支持 `#记饮食` 指令和自动记录
### 配置文件
- `src/users/users.module.ts` - 注册新的数据模型
### 文档
- `docs/diet-records-table-create.sql` - 数据库表创建脚本
- `docs/diet-records-api-guide.md` - API使用指南
## 核心功能特性
### 1. 智能视觉识别
- **结构化数据返回** - AI分析结果以JSON格式返回包含完整营养信息
- **自动餐次判断** - 根据当前时间智能推断餐次类型
- **置信度评估** - 只有置信度足够高才自动记录到数据库
- **营养成分估算** - 自动计算热量、蛋白质、碳水、脂肪等
### 2. 个性化营养分析
- **历史记录整合** - 结合用户最近10顿饮食记录
- **趋势分析** - 分析热量摄入、营养均衡等趋势
- **智能建议** - 基于个人饮食习惯提供针对性建议
- **营养评分** - 0-100分的综合营养评价
### 3. 完整的数据结构
参照健康管理应用的最佳实践,包含:
- 基础信息:食物名称、餐次、份量、时间
- 营养成分:热量、三大营养素、膳食纤维、钠含量等
- 扩展字段图片URL、AI分析结果、用户备注
- 数据来源手动输入、AI识别、其他
### 4. AI教练智能对话
- **指令识别** - 支持 `#记饮食``#饮食` 等指令
- **上下文感知** - 自动提供用户饮食历史上下文
- **个性化回复** - 基于用户饮食记录给出专业建议
- **健康指导** - 综合最近饮食情况提供改善建议
## 技术实现亮点
### 1. 数据安全与性能
- 使用数据库事务确保数据一致性
- 合理的索引设计优化查询性能
- 软删除机制保护用户数据
- 活动日志记录用户操作
### 2. 错误处理与验证
- 完整的数据验证规则
- 合理的错误提示信息
- 容错机制和降级处理
- 详细的日志记录
### 3. API设计规范
- RESTful API设计原则
- 完整的Swagger文档注解
- 统一的响应格式
- 分页查询支持
### 4. AI集成优化
- 结构化的AI输出格式
- 智能的数据验证和清洗
- 用户体验优化(自动记录)
- 个性化的营养分析
## 使用示例
### 1. 手动添加饮食记录
```bash
curl -X POST /users/diet-records \
-H "Authorization: Bearer <token>" \
-d '{
"mealType": "lunch",
"foodName": "鸡胸肉沙拉",
"estimatedCalories": 280,
"proteinGrams": 35.0
}'
```
### 2. AI拍照记录饮食
用户发送:`#记饮食` + 食物图片
系统自动:分析图片 → 提取数据 → 保存记录 → 提供建议
### 3. 获取营养分析
```bash
curl -X GET /users/nutrition-summary?mealCount=10 \
-H "Authorization: Bearer <token>"
```
## 部署说明
1. **数据库表创建**
```bash
mysql -u username -p database_name < docs/diet-records-table-create.sql
```
2. **环境变量配置**
确保AI模型相关的环境变量已正确配置
- `DASHSCOPE_API_KEY`
- `DASHSCOPE_BASE_URL`
- `DASHSCOPE_VISION_MODEL`
3. **应用重启**
```bash
npm run build
npm run start:prod
```
## 扩展建议
基于当前实现,未来可以考虑以下扩展:
1. **营养数据库集成** - 接入专业的食物营养数据库
2. **饮食目标设定** - 允许用户设定个性化的营养目标
3. **社交分享功能** - 用户可以分享饮食记录和成就
4. **更精确的AI识别** - 使用更专业的食物识别模型
5. **营养师咨询** - 集成专业营养师在线咨询服务
## 测试建议
1. **功能测试** - 测试所有API端点的正常功能
2. **AI识别测试** - 使用各种食物图片测试识别准确性
3. **性能测试** - 测试大量数据情况下的查询性能
4. **集成测试** - 测试与AI教练对话的完整流程
该实现完全按照您的要求,参照体重记录的实现模式,提供了完整、智能、用户友好的饮食记录功能。