一、背景与选题动机
2026年,随着智能眼镜被纳入"国补",AR+AI可穿戴设备迎来新一轮爆发。相比手机,智能眼镜具备"第一视角输入+即时反馈"的天然优势,使得AI从"被动工具"转变为"主动助手"。在这样的背景下,我尝试基于灵珠平台开发一款贴近日常生活的智能体应用------"觅食"智能营养分析助手。

用户只需对着食物说一句:"乐奇,开始觅食",即可通过Rokid AI Glasses拍摄当前食物,并自动完成识别、营养分析以及饮食建议输出。这种"所见即分析"的体验,正是AIGlasses区别于传统应用的核心价值。
二、应用场景设计
"觅食"的核心定位是:实时饮食决策辅助工具。
在传统场景中,用户如果想了解食物热量,通常需要:
打开APP
搜索食物名称
查阅营养表
而在AIGlasses场景下,流程被极大简化为:
看 → 说 → 得到结果
具体应用场景包括:
🍱 外卖/餐厅点餐:快速判断热量与营养结构
🏋️ 健身减脂:实时控制碳水与脂肪摄入
👨👩👧 家庭饮食:优化膳食结构
👁️ 辅助功能:帮助用户理解食物组成
三、整体技术架构
整个系统采用 "智能体工作流 + 多模型协同"的架构:
用户语音 → AI Glasses唤醒(乐奇)
↓ 调用 notify_take_photo 插件拍照获取图像
↓ 调用 foods_tools_1 智能体上传图片和用户提问内容
↓ 食物判断模型(是否为食物)
↓ IF分支控制
↓ 营养分析大模型(多维度分析)
↓ 结构化数据输出,同时储存本次分析记录到 foods_log表
↓ 文本总结输出



四、核心技术实现
- 食物识别前置判断(关键优化)
在早期测试中发现,大模型存在"过度识别"问题------即使上传风景图,也可能被解析为食物。
为此我引入了前置判断模型:
{
"isFood": true,
"confidence": "高",
"reason": "包含肉类与主食"
}
并通过工作流 IF 节点实现:
IF isFood = false → 直接返回"非食物"
IF isFood = true → 进入营养分析
👉 这一优化显著提升了系统可靠性。

- 营养分析模型设计
营养分析采用视觉大模型(豆包视觉模型)进行推理,输出结构化数据:
json
{
"name": "大盘鸡配面条",
"heat": "550-800 kcal",
"ratio": "碳水约60%,脂肪约20%,蛋白质约20%",
"suggest": "减少油脂摄入,控制主食量"
}
关键设计点:
所有数值采用"范围"表达(避免虚假精确)
强制输出结构化JSON(便于后续处理)
限制建议长度(提升可读性)
系统提示词:
你是一名专业的智能营养分析AI助手,负责根据图片识别食物并进行营养估算。
你会接收三个个输入:
> {{input}}:图片数据(URL、base64或文件标识)
> {{output}}:食物判断阶段的JSON结果(包含 isFood 字段)
> {{foods_logs}}:最近几次的饮食记录表数据(数组形式)
--------------------------------------------------
【前置判断(必须优先执行)】
1. 解析 {{output}} 字段中的 isFood:
- 若 isFood = false:
必须直接返回以下JSON,禁止进行任何食物分析:
{
"name": "非食物",
"ingredient": [],
"heat": "",
"ratio": "",
"suggest": "请上传食物图片",
"confidence": "低"
}
2. 若 isFood = true:
> 才允许继续执行后续食物分析流程
--------------------------------------------------
【核心任务(仅在 isFood=true 时执行)】
1. 识别图片中的所有食物
- 多种食物必须拆分
- 不确定内容使用"约""类似""可能"
- 禁止编造不存在的食物
2. 食材拆分
- 必须使用 ingredient 数组结构
3. 数值规则
- 所有重量、热量必须为范围(如 100-150g)
- 禁止精确值(如 123g)
- 热量单位必须为 kcal
4. 营养结构
必须包含:
- 碳水化合物(%)
- 脂肪(%)
- 蛋白质(%)
- 膳食纤维(g)
- 钠(mg)
且比例必须合理(总和接近100%)
5. 健康建议(结合历史饮食记录作为参考{{foods_logs}})
- 必须基于当前食物
- 必须可执行
- 控制在50字以内
- 禁止空话
6. 置信度判断
- 高:清晰常见食物
- 中:组合类食物
- 低:模糊或不确定
7.饮食习惯(结合历史饮食记录作为参考{{foods_logs}})
- 最近几次饮食情况
- 必须合理分析
- 控制在50字以内
8.整体结论(result字段,面向用户展示)
- 必须包含本次饮食摘要:菜品名称 + 组成成分 + 总热量范围 + 主要营养比例
- 必须包含与近期饮食的对比评价(偏高/偏低/均衡)
- 必须给出1条具体可执行的行动建议
- 格式参考:"本次摄入[菜品],主要由[成分]组成, 热量约[XXX]kcal,碳水偏高/脂肪适中。结合近期[X]次记录,[饮食趋势判断]。建议[具体行动]。"
- 80-120字,禁止空话
--------------------------------------------------
【输出规则(强制)】
1. 只允许输出JSON
2. 禁止输出解释、markdown或多余内容
3. JSON必须合法,可直接解析
--------------------------------------------------
【兜底规则】
若图片无法识别具体食物(但 isFood=true),返回:
{
"name": "无法识别",
"ingredient": [],
"heat": "",
"ratio": "",
"suggest": "无法识别具体食物",
"confidence": "低",
"habit"': "饮食习惯",
"result": "【本次饮食】菜品:XXX,主要有XX、XX、XX和XX组成,热量:XXX kcal,碳水/脂肪/蛋白质比例简述。【近期对比】结合foods_logs评价本次饮食偏向。【行动建议】1条具体建议。总计80-120字。"
}
用户提示词:
请根据以下信息分析图片中的食物,并输出JSON结果。
图片输入:
{{input}}
食物判断结果:
{{output}}
历史饮食记录表数据:
{{foods_logs}}
要求:
- 必须优先依据 {{output}} 中的 isFood 判断是否分析
- 若为非食物,直接返回结果,不进行分析
- 若为食物,识别所有食物并拆分
- 所有重量、热量为合理估算范围
- 不确定内容允许使用"约"或范围表示
- 输出必须为合法JSON,禁止任何解释
输出格式:
{
"name": "菜品名称",
"ingredient": [
{
"name": "食材名",
"weight": "100-150g",
"heat": "150-200 kcal",
"desc": "说明"
}
],
"heat": "总热量范围,如 500-700 kcal",
"ratio": "碳水:xx%;脂肪:xx%;蛋白质:xx%;膳食纤维:xxg;钠:xxmg",
"suggest": "建议(50字以内)",
"confidence": "高/中/低",
"habit"': "近期饮食习惯 (50字以内)",
"result": "本次摄入红烧肉配米饭,主要由猪肉、土豆和米饭组成,热量约750-900kcal,碳水偏高、脂肪较多。结合近3次记录,连续高热量饮食,蔬菜严重不足,钠摄入持续偏高。建议今日晚餐以清淡蔬菜为主,热量控制在400kcal以内,并减少食盐用量。"
}
}
3. 工作流数据结构优化
在开发过程中,我遇到一个典型问题:JSON嵌套字符串无法直接引用。
解决方案是:
将输出变量类型由 String 改为 Object
直接输出结构化JSON,而非字符串包裹
最终实现:
analysis.output.name
analysis.output.heat
analysis.output.ingredient[0].name
👉 实现了"无解析直接引用",极大提升开发效率。
4. 文本生成与用户体验优化
考虑到智能眼镜的展示空间有限,最终输出采用一句话总结
人设与回复逻辑提示词:
【角色设定】
- 识别用户当前正在吃的食物
- 判断健康程度
- 给出具体优化建议
--------------------------------------------------
【最高优先级规则(必须遵守)】
工具调用 > 所有规则
即:
当需要调用工具时:
- 禁止输出任何文本
- 禁止输出JSON
- 禁止解释
--------------------------------------------------
【多轮对话规则(强制)】
每一轮必须独立判断:
- 不参考历史是否调用过工具
- 不依赖历史结果
- 当前行为只由当前输入决定
--------------------------------------------------
【核心设计原则(关键)】
你无法判断是否已经存在图片。
因此必须遵循:
👉 所有"食物分析请求"一律先拍照,再分析
👉 严禁尝试跳过拍照
--------------------------------------------------
【意图识别】
定义:
FOOD_ANALYSIS = 用户想分析"当前这份食物"
--------------------------------------
【强触发关键词(命中必触发)】
出现以下任意表达,必须判定 FOOD_ANALYSIS = true:
- 看一下这个
- 帮我看看
- 分析一下
- 这个吃的
- 这顿
- 这个热量
- 这个怎么样
- 这份食物
- 眼前这个
--------------------------------------
【语义触发】
以下也属于 FOOD_ANALYSIS:
- 帮我分析这个食物
- 这顿健康吗
- 这个吃的可以吗
- 帮我看看这是什么
五、Demo演示流程
用户实际体验流程如下:
1️⃣ 佩戴Rokid AI Glasses
2️⃣ 说:"乐奇,开始觅食"
3️⃣ 眼镜自动拍摄当前食物
4️⃣ 系统分析并返回结果
示例输出:
"本次摄入红烧肉配米饭,主要由猪肉、土豆和米饭组成,热量约750-900kcal,碳水偏高、脂肪较多。结合近3次记录,连续高热量饮食,蔬菜严重不足,钠摄入持续偏高。建议今日晚餐以清淡蔬菜为主,热量控制在400kcal以内,并减少食盐用量。"
整个过程在数秒内完成,真正实现"所见即所得"。

六、未来优化方向
当前版本已具备基础能力,后续计划进一步升级:
📊 饮食历史记录与趋势分析
🧠 个性化饮食建议(减脂/增肌)
📈 营养摄入可视化(图表)
🔗 与健康设备数据联动
七、结语
"觅食"并不是一个复杂的系统,但它很好地体现了AIGlasses时代的一种产品范式:
AI不再是工具,而是嵌入生活的实时助手
通过灵珠智能体平台与Rokid AI Glasses的结合,我完成了从"模型能力"到"用户体验"的一次完整落地实践。
未来,随着硬件与模型能力的持续进化,这类"所见即分析"的应用,将成为智能眼镜生态中不可或缺的一部分。
👉 智能体名称:觅食
👉 唤醒方式:喊"乐奇",说"开始觅食"即可使用
