首页 > DeepSeek > 最新文章

鸿蒙首个双AI引擎饮食App:豆包+DeepSeek如何协同工作

CSDN博客 2026-05-09 06:51:33 人看过

在这里插入图片描述

 HarmonyOS 6.0.2 原生 AI 饮食健康管家的技术系列第 1 篇,深入解析 AI 双引擎架构 的设计与实现。


一、为什么需要双 AI 引擎?

传统饮食 App 的痛点

用过  Keep 、薄荷健康、MyFitnessPal 的同学都知道,记录一顿饭有多痛苦:

打开 App → 搜索食物 → 在几十个结果里找 → 选一个最接近的 → 再搜下一个食物 → 重复 3-5 次

一顿饭记录时间:2-5 分钟

而且记录完之后呢?你只能看到一堆数字:

今日摄入:1450 kcal

蛋白质:45g

然后呢?碳水太高怎么办?蛋白质不够怎么补?App 告诉不了你。

我们的解法:双引擎分工

食刻引入了 两个 AI 引擎,各有专长:

豆包 doubao-seed-2-0-pro

擅长:多模态识别

文字描述 → 识别食物

拍照图片 → 识别食物

返回结构化营养数据

在这里插入图片描述

DeepSeek v4-pro

擅长:推理与对话

生成个性化饮食计划

分析健康数据给建议

体重趋势预测

智能报告生成


在这里插入图片描述

二、架构设计:统一抽象层

核心思路

两种模型通过统一的 DoubaoApiService 抽象层管理,各自独立配置 API Key、Endpoint 和 Model,互不干扰。

用户输入(文字/图片) │ ├── 食物识别场景 ──→ 豆包 doubao-seed-2-0-pro │ ├── identifyFood(text) │ └── identifyFoodFromImage(b64) │ └── 智能对话场景 ──→ DeepSeek deepseek-v4-pro ├── generateDietPlan(profile) ├── generateHealthAdvice(data) ├── WeightTrendPage └── SmartReportPage

关键代码:双请求方法

// DoubaoApiService.ets 核心结构 class DoubaoApiService {  // 豆包:食物识别(支持文字+图片)  async identifyFood(input: string | string[]): Promise<FoodResult> {    const isImage = Array.isArray(input);    const payload = isImage      ? this.buildImagePayload(input[0])   // 图片 Base64      : this.buildTextPayload(input);       // 文字描述    return this.doRequest(payload);         // → 豆包 API  }  // DeepSeek:智能对话(纯文本推理)  async generateDietPlan(profile: UserProfile): Promise<string> {    const messages = this.buildDietPlanMessages(profile);    return this.doDeepSeekRequest({          // → DeepSeek API      model: 'deepseek-v4-pro',      messages,      systemPrompt: DIET_PLAN_SYSTEM_PROMPT    });  } }

为什么不共用一个 API 方法?

维度豆包请求DeepSeek 请求
Endpointark.cn-beijing.volces.comapi.deepseek.com
鉴权Bearer Token (火山引擎)Bearer Token (DeepSeek)
请求格式自定义 JSON 结构OpenAI 兼容格式
响应解析提取 foodName/calories直接返回 Markdown 文本
超时设置10s(识别要快)30s(推理可以慢)

结论:两套方法的参数、解析逻辑完全不同,强行合并只会让代码更难维护。


三、AI 对话数据流:历史记录如何持久化?

问题场景

用户在「饮食计划」页面和 DeepSeek 对话了 10 轮,然后切到首页看热量环,再回来时 —— 对话历史还在吗?

答案:在的。 我们用 Preferences 本地持久化了每一轮对话。

完整数据流

DietPlanPage.aboutToAppear() ↓ loadHistory() ↓ Preferences.getSync('chat_diet_plan')     // 从本地磁盘读取 ↓ 恢复历史消息(含时间戳)                   // 渲染到 UI ── 用户发送新消息 ── DietPlanPage.send() ↓ DoubaoApiService.generateDietPlan(profile) ↓ doDeepSeekRequest({  model: 'deepseek-v4-pro',  messages: [...history, userMessage],    // 携带完整上下文 }) ↓ 返回 AI 生成计划 ↓ saveHistory() ↓ Preferences.putSync('chat_diet_plan', [...history, aiReply])  // 写回磁盘

每个 AI 场景独立存储

页面Preferences Key用途
DietPlanPagechat_diet_plan饮食计划对话
HealthAdvicePagechat_health_advice健康建议对话
WeightTrendPagechat_weight_trend体重趋势分析
SmartReportPagechat_smart_report智能报告生成

关键设计决策:为什么不存云端?

饮食数据属于高度隐私信息

用户不希望自己的饮食习惯被上传

本地存储 = 零网络延迟 = 切页瞬间恢复


四、实际效果:3 秒 vs 3 分钟

记录效率对比

**实测数据**:AI 文字/拍照识别 **3 秒**完成全部食物识别和营养估算,相比传统手动查库方式,**时间降低 40 倍**。

操作步骤传统方式 (Keep/薄荷)食刻 AI 方式
打开记录入口✅ 1s✅ 1s
输入/选择食物❌ 搜索+筛选 30-60s/个✅ 输入"鸡腿饭" 2s
营养计算✅ 自动✅ AI 自动返回
归类餐段❌ 手动选✅ AI 自动判断
一顿饭总耗时2-5 分钟≤ 10 秒

DeepSeek 的  数据驱动 建议

传统 App 的"建议"是模板化的通用文案

“建议您多吃蔬菜,减少油腻食物摄入”

食刻的 DeepSeek 会读取你近 7 天的真实数据

“您近 7 天碳水占比 62%(偏高),建议降至 50-55%。
可将晚餐米饭替换为糙米,或减少 1/3 份量。
当前蛋白质 22g/天(偏低),建议加餐鸡蛋或希腊酸奶。”

这就是"数据驱动"vs"模板化"的区别。


五、竞品全景对比

功能Keep薄荷健康MyFitnessPal食刻
AI 食物识别双引擎
AI 饮食计划DeepSeek
AI 健康分析数据驱动
桌面 Widget基础基础3 张卡片
3D 视觉效果2D2D2DNeumorphism


六、总结与下篇预告

核心要点回顾

双引擎不是炫技,而是场景驱动的工程选择:识别要快→豆包,推理要深→DeepSeek

统一抽象层 (DoubaoApiService) 让替换 AI 引擎只需改 3 处配置

Preferences 持久化保证离开再回来不丢失上下文

全量本地存储,饮食数据不出设备

下一篇:《纯 ArkUI 实现 7 层拟物 3D 环形进度图:零依赖的视觉革命》

我们将揭秘食刻首页那个令人印象深刻的 Neumorphism 环形进度图是如何用纯 ArkUI 组件手工打造出来的 —— 没有  Canvas 、没有 3D 引擎、没有第三方依赖,只有 7 层组件的创意叠加。


项目仓库:https://atomgit.com/VON-/cxs-demo1*

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章