宠物饮食计算器 App — HarmonyOS AI 应用开发技术博客
宠物饮食计算器 App — HarmonyOS AI 应用开发技术博客
一、项目背景与需求分析
1.1 行业背景
随着宠物经济的蓬勃发展,越来越多的宠物主人将宠物视为家庭成员,对宠物饮食健康的关注度持续提升。据《中国宠物行业白皮书》显示,中国宠物消费市场规模已超过 3000 亿元,其中宠物食品消费占比超过 50%。然而,很多宠物主人在喂养过程中存在误区:喂养量不科学、食物选择不当、忽视宠物个体差异等。
宠物饮食计算器正是为了解决这些问题而设计的。它利用 AI 技术,根据宠物的品种、体重、年龄和活动量,科学计算每日所需热量和喂食量,并推荐合适的食物和警示禁食清单。
1.2 需求分析
通过与宠物医生和多家宠物主人的深入交流,我们明确了以下核心需求:
功能需求:
- 输入宠物类型(猫/狗等)、品种、体重、月龄和活动量
- AI 计算每日所需热量(kcal)
- 计算推荐喂食量(克/天)
- 推荐适合的食物品牌和类型
- 列出禁食清单(对宠物有害的食物)
- 提供喂养注意事项
非功能需求:
- 计算结果科学准确,符合兽医营养学标准
- 界面简洁直观,宠物主人可轻松使用
- 支持多种宠物类型(猫、狗为主,扩展其他宠物)
- 数据安全,宠物信息不泄露
1.3 目标用户画像
- 新手宠物主人:缺乏宠物喂养经验,需要科学指导
- 多宠家庭:需要为不同宠物制定个性化饮食方案
- 宠物繁育者:需要精确控制种犬/种猫的营养摄入
- 宠物美容师/寄养者:需要为寄养宠物提供饮食参考
二、技术架构设计
2.1 整体架构概述
宠物饮食计算器 App 采用 Model-Service-Page 三层架构,与项目中其他 AI 应用保持一致的架构风格。这种一致性不仅降低了开发者的学习成本,也使得代码复用和跨应用协作变得更加容易。
2.2 架构分层详解
┌─────────────────────────────────────────────────────┐
│ Page 层 │
│ PetFoodPage (UI 组件 + 状态管理 + 交互逻辑) │
│ ┌─────────────────────────────────────────────────┐ │
│ │ @State inputData @State resultData │ │
│ │ @State showResult 生命周期管理 │ │
│ └─────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────┤
│ Service 层 │
│ PetFoodService (AI 推理 + 计算逻辑 + 知识库) │
│ ┌─────────────────────────────────────────────────┐ │
│ │ generateData(input) → PetFoodData │ │
│ │ 热量计算公式 AI 推荐 禁食清单查询 │ │
│ └─────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────┤
│ Model 层 │
│ PetFoodData (数据定义 + 类型约束 + 默认值) │
│ ┌─────────────────────────────────────────────────┐ │
│ │ pet_type breed weight_kg age_months │ │
│ │ activity daily_kcal feeding_amount │ │
│ │ recommended_foods forbidden note │ │
│ └─────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘
2.3 Model 层设计
PetFoodData 类包含了宠物饮食计算所需的所有数据字段:
export class PetFoodData {
pet_type: string = '' // 宠物类型(如 猫、狗)
breed: string = '' // 品种
weight_kg: number = 0 // 体重(公斤)
age_months: number = 0 // 月龄
activity: string = '' // 活动量(低/中/高)
daily_kcal: string = '' // 每日热量需求
feeding_amount: string = '' // 推荐喂食量
recommended_foods: string[] = [] // 推荐食物列表
forbidden: string[] = [] // 禁食清单
note: string = '' // 注意事项
}
与文本类字段不同,weight_kg 和 age_months 使用了 number 类型,适合进行数值计算。daily_kcal 和 feeding_amount 虽然是数值结果,但使用 string 类型存储,因为可能在结果中包含单位说明(如 “250 kcal/天”)。
2.4 Service 层设计
PetFoodService 中的 generateData 方法不仅包含 AI 推理,还涉及到基础的科学计算:
export class PetFoodService {
private model: PetFoodData
constructor() {
this.model = new PetFoodData()
}
generateData(input: Record<string, Object>): PetFoodData {
let result: PetFoodData = new PetFoodData()
// Mock data generation logic based on input
return result
}
}
在实际实现中,该方法会结合以下逻辑:
- 基础代谢率(BMR)计算:基于体重和品种的公式计算
- 活动量系数调整:根据活动量水平调整热量需求
- AI 推荐:利用大模型的知识库推荐适合的食物和警示禁食清单
2.5 Page 层设计
由于宠物饮食计算需要较多的输入参数,Page 层设计了 5 个输入字段:
@Entry
@Component
struct PetFoodPage {
@State inputData: Record<string, Object> = {}
@State resultData: PetFoodData | null = null
@State showResult: boolean = false
private service: PetFoodService = new PetFoodService()
}
三、AI 提示词工程原理
3.1 科学计算 + AI 推荐的混合模式
宠物饮食计算器采用了独特的"科学计算 + AI 推荐"混合模式。与纯 AI 生成不同,热量和喂食量这类基础数据更适合用科学公式计算,而食物推荐和禁食清单则适合利用 AI 的知识库能力。
3.2 基础热量计算公式
在 Service 层中,热量计算可以采用以下公式:
犬类静息能量需求(RER):
- RER = 70 × (体重kg)^0.75
- 根据活动量调整:低活动量 × 1.2,中活动量 × 1.5,高活动量 × 2.0
猫类静息能量需求(RER):
- RER = 70 × (体重kg)^0.75
- 根据活动量调整:低活动量 × 1.0,中活动量 × 1.2,高活动量 × 1.5
3.3 提示词模板设计
对于 AI 推荐部分,Prompt 设计如下:
你是一位专业的宠物营养师。请根据以下宠物信息提供饮食建议:
宠物信息:
- 类型:{pet_type}
- 品种:{breed}
- 体重:{weight_kg} kg
- 月龄:{age_months} 个月
- 活动量:{activity}
请提供:
1. 推荐食物:列出适合该宠物的食物类型和品牌
2. 禁食清单:列出对这类宠物有害的食物
3. 注意事项:喂养过程中的注意事项
3.4 知识库构建
为了确保禁食清单的准确性,我们构建了一个结构化的宠物食物安全知识库,涵盖:
- 对犬类有毒的食物(巧克力、葡萄、洋葱、大蒜等)
- 对猫类有毒的食物(洋葱、大蒜、生鸡蛋、牛奶等)
- 不同品种的饮食禁忌(如某些品种易患肥胖、尿路结石等)
四、核心功能实现详解
4.1 多字段输入管理
宠物饮食计算器有 5 个输入字段,是所有 8 个应用中输入字段最多的之一:
Text('宠物类型')
.fontSize(14)
.fontWeight(FontWeight.Bold)
TextInput({ placeholder: '请输入宠物类型' })
.onChange((val: string) => { this.inputData['pet_type'] = val })
Text('品种')
.fontSize(14)
.fontWeight(FontWeight.Bold)
TextInput({ placeholder: '请输入品种' })
.onChange((val: string) => { this.inputData['breed'] = val })
Text('体重(kg)')
.fontSize(14)
.fontWeight(FontWeight.Bold)
TextInput({ placeholder: '请输入体重(kg)' })
.onChange((val: string) => { this.inputData['weight_kg'] = val })
Text('月龄')
.fontSize(14)
.fontWeight(FontWeight.Bold)
TextInput({ placeholder: '请输入月龄' })
.onChange((val: string) => { this.inputData['age_months'] = val })
Text('活动量')
.fontSize(14)
.fontWeight(FontWeight.Bold)
TextInput({ placeholder: '请输入活动量' })
.onChange((val: string) => { this.inputData['activity'] = val })
4.2 数据流分析
用户输入宠物类型、品种、体重、月龄、活动量
→ inputData 状态更新(5 个字段)
→ 点击"AI 生成"按钮
→ service.generateData(inputData)
→ 解析输入参数
→ 科学计算:BMR × 活动量系数
→ AI 推理:食物推荐 + 禁食清单
→ 结果组装
→ 返回 PetFoodData
→ resultData 状态更新
→ 条件渲染展示结果
4.3 结果展示模块
结果展示区域在数据就绪后渲染:
if (this.showResult && this.resultData !== null) {
Text('生成结果')
.fontSize(18)
.fontWeight(FontWeight.Bold)
Text('宠物饮食')
.fontSize(14)
.fontColor($r('app.color.text_secondary'))
}
未来可以扩展为更详细的展示,包括:
- 热量需求卡片(大号数字显示)
- 喂食量进度条
- 推荐食物列表(带图标)
- 禁食清单(带警告图标)
五、用户体验优化
5.1 输入效率优化
5 个输入字段虽然提供了丰富的信息维度,但也增加了用户的输入负担。优化方案包括:
- 使用 Select 组件替代 TextInput: 宠物类型和活动量等字段可以使用下拉选择器,减少手动输入
- 智能默认值: 根据宠物类型自动填充常见的活动量级别
- 输入验证: 对体重和月龄等数值字段进行范围校验,防止输入不合理值
5.2 结果显示优化
信息分层展示: 将结果分为"基础数据"(热量、喂食量)、"推荐食物"和"禁食清单"三个区域,用户可以根据需要快速定位感兴趣的信息。
视觉强调: 使用不同的颜色和图标区分推荐和警告信息,如绿色表示推荐食物,红色表示禁食清单。
六、性能优化与最佳实践
6.1 数值计算优化
在 ArkTS 中,数值计算需要注意类型转换。从 TextInput 获取的输入值是 string 类型,在使用前需要转换为 number:
let weight: number = Number(input['weight_kg'])
let age: number = Number(input['age_months'])
6.2 Record 类型的使用
Record<string, Object> 类型在 ArkTS 中用于表示键值对映射。在 Model 层中,我们使用 Record<string, string> 来表示营养信息等结构化数据。这种类型在 ArkTS 中有严格的约束,不能像 JavaScript 中那样随意增删属性。
6.3 页面布局优化
使用 Scroll + Column 的组合实现可滚动的内容区域,确保在屏幕尺寸较小的设备上也能完整显示所有输入字段和结果。layoutWeight(1) 让 Scroll 区域自动填充剩余空间,实现响应式布局。
七、总结与展望
7.1 项目总结
宠物饮食计算器 App 展示了 AI 在宠物健康领域的应用价值。通过"科学计算 + AI 推荐"的混合模式,我们既保证了基础数据的准确性,又充分发挥了 AI 在知识推荐方面的优势。
项目亮点:
- 科学的热量计算公式与 AI 知识库的有机结合
- 多维度输入参数带来个性化的推荐结果
- 禁食清单功能帮助宠物主人避免喂养风险
- 一致的三层架构设计,便于维护和扩展
7.2 未来展望
品种识别: 集成 HarmonyOS 的 AI 图像识别能力,通过拍照识别宠物品种,自动填充品种信息。
饮食记录: 增加每日饮食记录功能,追踪宠物的实际进食量和热量摄入。
健康预警: 结合宠物体重变化趋势,自动预警潜在的肥胖或营养不良风险。
多宠物管理: 支持家庭中多只宠物的独立管理,方便多宠家庭使用。
7.3 技术启示
宠物饮食计算器的开发实践表明,AI 应用并非所有功能都需要依赖大模型。对于有明确数学公式的计算任务(如热量计算),使用传统的算法实现更加可靠和高效。AI 的优势在于处理非结构化知识(如食物推荐、禁食清单)和提供个性化建议。
这种"算法 + AI"的混合模式,在实际的 AI 应用开发中具有广泛的适用性。开发者应该根据具体需求,合理选择技术方案,而不是盲目地让 AI 处理所有事情。
更多推荐



所有评论(0)