Skip to content

Latest commit

 

History

History
108 lines (108 loc) · 7.24 KB

前端后端技术栈.md

File metadata and controls

108 lines (108 loc) · 7.24 KB
# 菜谱助手技术栈与实现方案(AI结构化版)
## 一、 技术栈选型
针对Z世代用户的高颜值、强交互、多媒化需求,以及结构化菜谱的复杂逻辑,采用前后端分离与微服务架构。
### 1. 前端技术栈(APP/H5)
- **核心框架**:`React Native`(一套代码生成双端APP,同时支持H5渲染,社区活跃,适合动态交互)
- **状态管理**:`Zustand`(轻量级,适合高频烹饪步骤切换与计时器状态管理)
- **UI/样式**:`Tailwind CSS` (通过NativeWind实现) + `React Native Reanimated`(实现丝滑的步骤切换、进度条、微交互动画)
- **音视频处理**:`react-native-video`(步骤短视频播放)、`expo-av`(语音指令与倒计时播报)
- **图表可视化**:`react-native-svg` + `victory-native`(绘制能量环形图、营养素占比图)
### 2. 后端技术栈
- **核心框架**:`Java Spring Boot` + `Spring Cloud Alibaba`(微服务架构,保障高可用与易扩展)
- **数据存储**:`MySQL 8.0`(核心关系数据) + `Redis`(缓存热点菜谱、计时器状态、分布式锁) + `MongoDB`(存储非结构化数据如UGC评论、用户动态)
- **搜索引擎**:`Elasticsearch`(支持按食材、功效、人群等维度的复杂全文检索与标签聚合)
- **媒体处理**:`阿里云OSS` + `CDN`(短视频与图片分布式存储与加速)、`FFmpeg`(服务端视频抽帧生成动态图预览)
- **AI与大模型**:`Python FastAPI`(独立AI微服务,调用大模型实现智能食材替换、菜谱自由文本结构化解析)
---
## 二、 模块设计
系统采用微服务分层架构,核心拆分为以下5大服务中心:
1. **用户与画像服务**
   - 负责注册登录、JWT鉴权。
   - 管理用户健康档案(身高、体重、过敏史、饮食偏好)及Z世代标签(如“熬夜党”、“健身狂”)。
2. **菜谱结构化服务 - 核心**
   - 菜谱CRUD及“五步法”(准备/洗/切/煮/装盘)结构化存储。
   - 食材库与营养库管理,动态计算菜品总能量与宏量营养素。
3. **厨房引擎服务 - 高频**
   - 处理烹饪进行时的逻辑:步骤流转、倒计时管理、语音指令解析。
   - **厨房模式防误触机制**与屏幕常亮控制接口。
4. **智能搜索与推荐服务**
   - 基于ES的多维度检索(“找能减脂的鸡肉菜谱”)。
   - 基于用户画像的个性化Feed流推荐。
5. **社交与UGC服务**
   - 菜谱打分、作品墙(晒装盘)、步骤评论(针对某一步踩坑的反馈)。
   - 烹饪成就系统(徽章、连续打卡)。
---
## 三、 数据库表设计(核心表)
采用MySQL存储核心关系,保证数据一致性。
### 3.1 菜谱主表 (`recipe`)
| 字段名 | 类型 | 说明 |
| :--- | :--- | :--- |
| id | BIGINT | 主键 |
| title | VARCHAR(100) | 菜谱名称(如:宫保鸡丁) |
| cover_url | VARCHAR(255) | 封面图/视频URL |
| cuisine_type | TINYINT | 菜系(1川 2鲁 3粤...) |
| difficulty | TINYINT | 难度(1入门 2进阶 3大厨) |
| total_time | INT | 总耗时(分钟) |
| calories_per_serving| DECIMAL(6,2)| 单人份热量 |
| status | TINYINT | 状态(0下架 1上架) |
### 3.2 结构化步骤表 (`recipe_step`)
| 字段名 | 类型 | 说明 |
| :--- | :--- | :--- |
| id | BIGINT | 主键 |
| recipe_id | BIGINT | 关联菜谱ID |
| phase | ENUM | **核心枚举:PREPARE, WASH, CUT, COOK, PLATE** |
| step_index | INT | 阶段内排序序号 |
| action_title | VARCHAR(50) | 动作标题(如:切丁) |
| detail | TEXT | 详细图文描述 |
| media_url | VARCHAR(255) | 动图/短视频URL |
| timer_sec | INT | 计时秒数(0表示无需计时) |
| fire_power | VARCHAR(20) | 火候(大火/中火/小火,仅COOK阶段) |
### 3.3 食材与营养关联表 (`recipe_ingredient`)
| 字段名 | 类型 | 说明 |
| :--- | :--- | :--- |
| id | BIGINT | 主键 |
| recipe_id | BIGINT | 关联菜谱ID |
| ingredient_id| BIGINT | 关联基础食材库ID |
| amount | DECIMAL(6,2)| 用量 |
| unit | VARCHAR(10) | 单位(克/个/勺) |
| is_essential | TINYINT | 是否核心食材(0可选替换 1必须) |
### 3.4 人群与功效标签表 (`recipe_tag_relation`)
| 字段名 | 类型 | 说明 |
| :--- | :--- | :--- |
| recipe_id | BIGINT | 关联菜谱ID |
| tag_id | BIGINT | 标签ID(关联标签字典表,如“减脂”、“素食”、“儿童适宜”) |
| tag_type | TINYINT | 标签类型(1人群 2功效 3场景) |
---
## 四、 功能设计
### 4.1 AI菜谱结构化引擎
- **输入**:博主上传的图文/视频自由文本。
- **处理**:调用大模型,按照系统设定的`JSON Schema`,强制提取出“准备/洗/切/煮/装盘”五阶段,并映射食材至标准食材库。
- **输出**:生成前端可直接渲染的结构化数据,人工审核后入库。
### 4.2 动态热量与替换计算
- **计算逻辑**:根据`recipe_ingredient`表中各食材的用量,实时加和得出单份热量。
- **智能替换**:若用户标记“减脂”,系统将食谱中的“五花肉”映射为“鸡胸肉”,后端重新计算热量差值并返回新数值,前端显示“替换后减少XXX大卡”的动效。
### 4.3 厨房模式(沉浸式交互)
- **状态机管理**:[准备] -> [洗] -> [切] -> [煮] -> [装盘],状态不可逆跳跃,确保安全。
- **多任务计时器**:在[煮]阶段,支持同时开启多个倒计时(如:焯水3分钟+焖煮15分钟),后台服务通过Redis过期键推送完成事件。
---
## 五、 交互流程总览
以核心的**“烹饪一道菜”**为例,交互流程如下:
1. **发现与决策**
   - 用户打开APP -> 首页推荐信息流 -> 点击“低卡版宫保鸡丁”。
   - 进入**菜谱详情页**:顶部大图/视频,中部展示热量环形图(350kcal)及人群标签(✅减脂 ✅健身后 ❌严格控制钠),下部展示食材清单。
   - 点击“智能替换”,将花生米替换为黄瓜丁,热量动态刷新下降。
2. **进入厨房模式**
   - 点击【开始烹饪】 -> 弹出防误触提示及音量开启引导 -> 锁定屏幕旋转,进入横屏/大字沉浸模式。
3. **五步法流转过程**
   - **[前期准备]**:展示食材清单,用户点击“已备齐”。
   - **[洗]**:展示洗菜动图及注意事项(如:辣椒去籽防辣手),语音播报提示,左滑下一步。
   - **[切]**:展示切配刀法视频,用户可语音喊“下一步”切换。
   - **[煮](核心交互)**:
     - 步骤1:热锅倒油。火候指示灯显示【大火】。
     - 步骤2:下鸡丁滑炒。点击【开始计时 1分钟】。
     - 步骤3:倒碗汁。火候指示灯切换【中火】,自动触发【开始计时 3分钟】。
     - 计时结束:手机震动 + 语音播报“时间到,准备收汁”。
   - **[装盘]**:展示精美摆盘参考图。
4. **结束与社交裂变**
   - 烹饪完成 -> 弹出成就卡片(“完美掌握宫保鸡丁,消耗相当于慢跑30分钟的热量!”)。
   - 引导用户拍照打卡 -> 一键生成含自己照片与菜品能量标签的精美长图 -> 分享至社交平台或APP内社区。