第二次作业
| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering/ |
|---|---|
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering/homework/13559 |
| 这个作业的目标 | 构建一个能说会做的智能体 |
| 学号 | 102301312 张铭浩 102301314 张博凇 102301318 杨垚 102301321 吴颖哲 102301330 李坤伟 102301331 李鸿洋 102301332 柯鸿斌 102301333 江文博 102301334 黄伟圣 112301521 翁小燚 |
🍔 AI智能体实践作业 - 美食智能助手
小组信息
-
小组成员:
- 102301312 张铭浩
- 102301314 张博凇
- 102301318 杨垚
- 102301321 吴颖哲
- 102301330 李坤伟
- 102301331 李鸿洋
- 102301332 柯鸿斌
- 102301333 江文博
- 102301334 黄伟圣
- 112301521 翁小燚
-
提交日期:2025年10月22日
-
GitHub仓库:[https://github.com/Boshsama/IG-theshyBigHorseHead]
一、需求描述
1.1 项目背景
随着人工智能技术的发展,AI智能体(Agent)已成为人工智能应用的重要方向。智能体不仅能通过自然语言与用户交互,还能执行具体任务、调用工具和处理数据。在健康饮食领域,人们普遍面临以下问题:
- 信息过载:网上美食信息众多,难以快速决策
- 营养不均:缺乏对食物营养成分的了解
- 记录困难:饮食记录繁琐,难以坚持
- 计划缺失:缺少科学的饮食计划指导
基于以上痛点,我们决定构建一个垂直于饮食健康领域的AI智能助手。
1.2 功能定位
美食智能助手是一个集成了自然语言对话、数据管理、智能推荐、营养分析等功能的智能体系统,旨在帮助用户:
- 智能推荐:根据时间和需求推荐合适的美食
- 营养管理:提供详细的营养分析和健康评分
- 饮食记录:自动识别食物并记录热量
- 计划生成:根据目标(减脂/增肌/维持)生成一周饮食计划
- 运动联动:记录运动消耗,计算净摄入热量
- 语音交互:支持语音输入和输出,提升用户体验
1.3 核心特性
✅ 能说(自然语言交互)
- 支持多轮对话
- 理解用户意图
- 自然语言问答
- 语音识别与播报
✅ 会做(任务执行能力)
- 查询菜品数据库(90种菜品)
- 生成饮食计划
- 记录和统计数据
- 计算营养和热量
- 提供个性化建议
二、业务流程描述
2.1 整体架构流程
用户通过文字或语音输入需求后,系统进行意图识别与解析,将请求路由分发到具体功能模块(美食推荐、菜谱查询、营养分析、饮食记录、计划生成、运动记录等),各模块调用相应的数据库和算法生成结果,最终以文字或语音形式返回用户。
2.2 核心业务流程
2.2.1 美食推荐流程
- 用户输入"推荐早餐/午餐/晚餐"或"推荐美食"
- 系统识别推荐类型(分类推荐 vs 通用推荐)
- 从对应数据库中随机选择菜品
- 返回菜品名称、热量信息
- 显示在聊天界面
2.2.2 菜谱查询流程
- 用户输入"XXX怎么做"或"菜谱XXX"
- 系统提取菜品名称
- 在菜谱数据库中查找(90种菜品)
- 返回食材清单、详细步骤、用时、热量
- 格式化显示
2.2.3 营养分析流程
- 用户输入"详细营养XXX"或"XXX有哪些营养"
- 系统提取菜品名称
- 查询营养数据库(90种菜品)
- 计算健康评分(蛋白质25分+纤维25分+热量25分+脂肪25分)
- 生成个性化建议
- 返回完整营养信息
2.2.4 饮食记录流程
- 用户输入"记录吃了XXX"
- 系统识别菜品名称
- 从数据库获取准确热量
- 记录时间戳和日期
- 保存到LocalStorage
- 更新今日统计(总热量、用餐次数)
- 更新侧边栏显示
2.2.5 计划生成流程
- 用户输入"生成一周减脂/增肌计划"
- 系统识别目标(减脂1500卡/增肌2500卡/维持2000卡)
- 循环7天:
- 从早餐数据库随机选择1种
- 从午餐数据库随机选择1种
- 从晚餐数据库随机选择1种
- 计算每日总热量
- 格式化生成7天计划
- 保存计划到内存
- 返回完整计划
2.2.6 运动记录流程
- 用户输入"记录运动XXX XX分钟"
- 系统提取运动类型和时长
- 查询运动热量表(22种运动)
- 计算消耗热量 = 运动强度 × 时长
- 记录到数据库
- 计算今日净摄入 = 摄入 - 消耗
- 提供健康建议
2.3 数据流转
系统采用分层架构:前端UI层(food-index.html)负责界面展示,UI交互层(ui.js)处理用户交互,Agent核心层(agent.js)实现业务逻辑,数据存储层(LocalStorage)持久化数据,外部API层(可选)提供AI能力。各层之间通过标准接口进行双向通信。
三、实现说明
3.1 技术栈
- 前端框架:原生HTML5 + CSS3 + JavaScript (ES6+)
- 语音技术:Web Speech API
- 数据存储:LocalStorage
- AI接口:RESTful API(支持OpenAI、DeepSeek、智谱AI、通义千问)
- 架构模式:模块化设计 + MVC模式
3.2 MCP框架应用
虽然我们的项目使用了原生JavaScript实现,但在设计理念上充分借鉴了Model Context Protocol (MCP)框架的核心思想:
3.2.1 MCP核心概念在项目中的体现
1. Context管理:Agent核心类维护多种上下文,包括对话历史、饮食记录、运动记录、对话轮次和今日热量统计,确保智能体具备"记忆"能力。
2. Tool调用机制:实现了类似MCP的工具调用模式,通过意图识别将用户输入路由到对应的工具函数(推荐、菜谱、营养、记录、计划、运动等),每个工具负责特定功能。
3. Protocol通信:采用统一的消息格式实现组件间通信,返回对象包含响应文本和动作类型及数据,确保各模块协同工作。
4. 资源管理
类似MCP的资源概念,我们管理了多种数据资源:
- 菜品数据库(90种)
- 菜谱数据库(90种)
- 营养数据库(90种)
- 运动数据库(22种)
3.2.2 与传统MCP框架的对比
| 特性 | 传统MCP框架 | 我们的实现 |
|---|---|---|
| Context管理 | ✅ | ✅(conversationHistory等) |
| Tool调用 | ✅ | ✅(多个专用函数) |
| 资源管理 | ✅ | ✅(数据库模块) |
| 异步处理 | ✅ | ✅(async/await) |
| 扩展性 | ✅ | ✅(模块化设计) |
3.3 核心模块实现
Agent核心类(agent.js):定义FoodAgent类,初始化时创建饮食记录、运动记录、对话历史等数组。主处理函数processMessage负责接收用户输入,根据配置选择本地处理或AI处理模式,并保存对话上下文。
UI交互层(ui.js):实现sendMessage函数处理用户输入,调用Agent处理消息,显示加载状态,更新聊天界面和统计信息。
语音模块(voice.js):使用Web Speech API实现语音识别功能,设置中文语言环境,将识别结果填充到输入框。
3.4 数据库设计
菜品推荐数据库:采用分类存储结构,包含breakfast、lunch、dinner三个数组,每个数组存储30种菜品对象,包含菜品名称和热量信息。
营养数据库:以菜品名称为键的对象结构,存储每种菜品的详细营养信息(热量、蛋白质、脂肪、碳水化合物、纤维),共90种菜品。
3.5 核心算法
健康评分算法:采用多维度评分体系,蛋白质、纤维、热量、脂肪各占25分,根据营养成分计算0-100分的健康评分。
智能推荐算法:识别用户意图,若为通用推荐则从90种菜品中随机选择3种,若为分类推荐则从指定餐次的30种菜品中选择1种,避免重复推荐。
四、功能展示
4.1 系统启动
启动方式:
- 方式一:双击"启动服务器.bat"文件,浏览器会自动打开应用页面
- 方式二:在项目目录下运行命令
python -m http.server 8000,然后访问 http://localhost:8000/food-index.html
功能说明:系统启动后,用户将看到现代化的渐变设计界面,包含聊天窗口、输入框、语音按钮和右侧统计面板。

4.2 查看所有菜品
触发方式:
- 输入文字:"菜品列表" / "所有菜品" / "全部菜品"
- 点击界面右下角的"查看所有菜品"按钮
功能说明:
- 展示90种菜品的完整目录,按早餐、午餐、晚餐三类分组
- 每类显示30种菜品名称
- 自动统计并显示总菜品数量
- 便于用户快速浏览系统支持的所有食物
示例输入:菜品列表
系统响应:
📋 菜品数据库(共90种)
🌅 早餐(30种):
豆浆油条、三明治、小笼包、燕麦粥、煎饼果子...
🌞 午餐(30种):
宫保鸡丁、红烧肉、糖醋里脊、鱼香肉丝、青椒肉丝...
🌙 晚餐(30种):
番茄炒蛋、麻婆豆腐、清蒸鱼、白灼虾、凉拌黄瓜...

4.3 智能美食推荐
触发方式:
- 通用推荐:"推荐美食" / "有什么好吃的"
- 分类推荐:"推荐早餐" / "推荐午餐" / "推荐晚餐"
功能说明:
- 通用推荐:从90种菜品中随机推荐3种,适合不确定想吃什么的场景
- 分类推荐:根据餐次(早中晚)从对应的30种菜品中精准推荐1种
- 显示菜品名称、所属餐次、热量信息
- 计算推荐菜品的总热量
示例输入:推荐美食
系统响应:
🍽️ 为您推荐3种美食:
1. 宫保鸡丁(午餐)- 450卡
2. 番茄炒蛋(晚餐)- 180卡
3. 燕麦粥(早餐)- 150卡
💡 总热量:780卡

4.4 菜谱查询
触发方式:
- "XXX怎么做":如"番茄炒蛋怎么做"
- "菜谱XXX":如"菜谱宫保鸡丁"
功能说明:
- 支持90种菜品的详细菜谱查询
- 提供完整的食材清单(带用量)
- 展示详细的制作步骤(分步骤编号)
- 标注预计用时和热量信息
- 帮助用户学习烹饪技巧
示例输入:番茄炒蛋怎么做
系统响应:
👨🍳 菜谱:番茄炒蛋
📝 食材:
• 番茄 2个
• 鸡蛋 3个
• 葱花 适量
• 盐 适量
• 糖 少许
🔪 步骤:
1. 番茄洗净切块,鸡蛋打散
2. 热锅下油,炒蛋至凝固盛出
3. 锅中加油炒番茄至软烂
4. 加入炒好的鸡蛋翻炒
5. 加盐、糖调味,撒葱花出锅
⏱️ 用时:15分钟
🔥 热量:180卡

4.5 营养分析
触发方式:
- 详细营养:"详细营养XXX" / "XXX的详细营养"
- 简单查询:"XXX有哪些营养"
功能说明:
- 提供完整的营养成分分析(热量、蛋白质、脂肪、碳水化合物、纤维)
- 计算健康评分(0-100分,基于多维度评分算法)
- 生成个性化营养建议
- 帮助用户科学管理饮食
示例输入:宫保鸡丁有哪些营养
系统响应:
🥗 营养分析:宫保鸡丁
📊 营养成分(每份):
• 热量:450卡
• 蛋白质:28g ⭐⭐⭐⭐⭐
• 脂肪:22g ⭐⭐⭐
• 碳水化合物:35g ⭐⭐⭐⭐
• 纤维:4g ⭐⭐⭐
💯 健康评分:82分
✅ 营养建议:
• 高蛋白:优质蛋白质来源,适合增肌
• 中等脂肪:注意油脂摄入
• 适量碳水:提供能量
• 建议搭配蔬菜和主食食用

4.6 饮食记录
触发方式:
- "记录吃了XXX":如"记录吃了宫保鸡丁"
- "吃了XXX":如"吃了番茄炒蛋"
功能说明:
- 自动识别食物名称
- 从数据库获取准确热量
- 记录时间戳(日期 + 时间)
- 实时更新今日统计(总热量、用餐次数)
- 数据持久化保存到 LocalStorage
- 右侧统计面板同步更新
示例输入:记录吃了宫保鸡丁
系统响应:
✅ 饮食记录成功!
🍽️ 食物:宫保鸡丁
🔥 热量:450卡
📅 时间:2025-10-23 12:30
📊 今日统计:
• 已摄入:450卡
• 用餐次数:1次
💡 距离目标还有1550卡(目标2000卡)

4.7 一周饮食计划
触发方式:
- "生成一周减脂计划"(目标:1500卡/天)
- "生成一周增肌计划"(目标:2500卡/天)
- "生成一周饮食计划" / "一周计划"(目标:2000卡/天,维持体重)
功能说明:
- 根据用户目标(减脂/增肌/维持)智能生成7天完整饮食计划
- 每天自动配置早中晚三餐
- 从对应数据库随机选择菜品,保证多样性
- 计算每日总热量,确保符合目标
- 提供营养均衡建议
示例输入:生成一周减脂计划
系统响应:
📅 一周减脂计划(每日目标:1500卡)
🗓️ 周一(2025-10-23):
🌅 早餐:燕麦粥(150卡)
🌞 午餐:番茄炒蛋(180卡) + 米饭(250卡)
🌙 晚餐:清蒸鱼(200卡)+ 凉拌黄瓜(60卡)
📊 当日总热量:840卡
🗓️ 周二(2025-10-24):
🌅 早餐:全麦面包(240卡)
🌞 午餐:青椒肉丝(350卡) + 米饭(250卡)
🌙 晚餐:麻婆豆腐(280卡)+ 米饭(200卡)
📊 当日总热量:1320卡
... (周三至周日)
💡 提示:计划已生成,坚持执行可达成目标!

4.8 运动记录
触发方式:
- "记录运动XXX XX分钟":如"记录运动跑步30分钟"
- "XXX XX分钟":如"游泳1小时"
- 支持多种时长表达:30分钟、1小时、半小时、一小时等
功能说明:
- 支持22种运动类型(有氧、柔韧、力量、球类)
- 自动识别运动类型和时长
- 根据运动强度计算消耗热量
- 记录运动数据(类型、时长、热量、时间)
- 计算今日净摄入 = 摄入热量 - 消耗热量
- 提供智能健康建议
支持的运动类型:
- 有氧运动(12种):跑步、快走、散步、游泳、骑行、跳绳、爬楼梯、跳舞、健身操、爬山、徒步、滑冰
- 柔韧运动(3种):瑜伽、普拉提、太极
- 力量运动(2种):力量训练、拳击
- 球类运动(5种):篮球、足球、羽毛球、网球、乒乓球
示例输入:记录运动跑步30分钟
系统响应:
✅ 运动记录成功!
🏃 运动项目:跑步(有氧)
⏱️ 运动时长:30分钟
🔥 消耗热量:300卡
📊 今日数据:
摄入:1500卡
消耗:300卡
净摄入:1200卡
💡 健康建议:运动量适中,坚持规律运动有助于健康!

4.9 统计面板
功能说明:
- 位于界面右侧,实时显示用户数据
- 动态更新,无需刷新页面
统计内容:
- 今日摄入:累计饮食热量
- 今日消耗:累计运动热量
- 净摄入:摄入 - 消耗
- 用餐次数:今日记录的餐次
- 运动次数:今日记录的运动次数

五、GitHub链接
项目仓库:https://github.com/Boshsama/IG-theshyBigHorseHead/tree/main/第二次作业
仓库结构:包含主页面(food-index.html)、Agent核心(agent.js)、UI交互(ui.js)、语音功能(voice.js)、API配置(config.js)、项目说明(README.md)和本报告(作业报告.md)。
六、小组分工
| 角色类型 | 姓名 | 学号 | 担任角色 | 主要职责 |
|---|---|---|---|---|
| 核心架构组 | 张博凇 | 102301314 | Agent架构主设计师 | • MCP框架思想应用与实现 • Agent核心类设计(agent.js) • 意图识别与路由分发逻辑 • 多轮对话上下文管理机制 |
| 杨垚 | 102301318 | 数据库架构师 | • 数据库结构设计与实现 • 90种菜品数据库构建 • 90种营养数据库扩展 • 数据持久化方案设计 |
|
| 张铭浩 | 102301312 | 核心算法工程师 | • 健康评分算法设计 • 智能推荐算法实现 • 一周计划生成算法 • 统一消息处理协议 |
|
| 前端UI组 | 吴颖哲 | 102301321 | UI设计师兼前端主开发 | • 用户界面视觉设计 • 页面布局与交互流程 • 响应式设计适配 • 设计规范制定 |
| 李鸿洋 | 102301331 | 前端交互开发 | • UI交互逻辑实现(ui.js) • 侧边栏统计功能开发 • 动画效果实现 • 用户体验优化 |
|
| 柯鸿斌 | 102301332 | 前端组件开发 | • 主页面结构实现(food-index.html) • 组件化开发 • 浏览器兼容性处理 • "查看所有菜品"功能实现 |
|
| 功能扩展组 | 江文博 | 102301333 | 语音功能开发 | • 语音识别功能实现(voice.js) • Web Speech API集成 • 语音播报功能 • 多模态交互设计 |
| 黄伟圣 | 102301334 | API集成工程师 | • API接口集成(config.js) • 多AI提供商支持 • 接口文档编写 • API调试与优化 |
|
| 翁小燚 | 112301521 | 数据扩展工程师 | • 菜谱数据扩展(90种) • 营养数据扩展(90种) • 数据质量控制 • 数据文件模块化(recipes-data-1.js、recipes-data-2.js) |
|
| 测试文档组 | 李坤伟 | 102301330 | 测试与文档工程师 | • 功能测试与Bug修复 • 项目文档编写(README.md、功能说明.md) • 作业报告撰写 • GitHub仓库管理 |
主要产出物
核心架构组交付物:
agent.js- Agent核心逻辑(约720行)- 90种菜品分类数据库(早餐30种、午餐30种、晚餐30种)
- 90种完整营养数据库
- MCP协议兼容的消息处理机制
前端UI组交付物:
food-index.html- 主页面(约460行)ui.js- UI交互逻辑(约320行)- 现代化渐变设计系统
- 响应式布局适配方案
功能扩展组交付物:
voice.js- 语音模块(约200行)config.js- API配置管理recipes-data-1.js和recipes-data-2.js- 数据文件(共约600行)- 健康评分算法与一周计划生成算法
测试文档组交付物:
- 完整项目文档(README.md、功能说明.md、作业报告.md)
- 测试用例与Bug报告
- 使用示例与演示文档
七、小组成员心得
核心架构组(张博凇、杨垚、张铭浩)
通过本次开发,我们深入理解了MCP框架的核心理念,实现了完整的上下文管理机制,让智能体具备了"记忆"能力。在数据库设计方面,从最初的9种菜品扩展到90种的过程中,我们认识到数据质量对系统性能的重要性,采用分类存储和多维度数据的方案既保证了完整性也提升了效率。这个项目让我们掌握了JavaScript异步编程、模块化设计、智能路由分发等技术,更重要的是学会了如何设计一个真正"能说会做"的智能体系统。
前端UI组(吴颖哲、李鸿洋、柯鸿斌)
本次项目让我们深刻理解了"以用户为中心"的设计理念,采用现代化渐变设计和响应式布局,每个细节都经过反复打磨。在开发过程中,我们使用CSS Grid和Flexbox实现了桌面端和移动端的适配,通过模块化的UI组件设计提高了代码的复用性和维护效率。"查看所有菜品"功能从文字触发优化为醒目按钮就是一个典型案例,用户的可发现性得到了大幅提升。这个项目让我们掌握了现代Web前端开发技术栈,建立了完整的前端工程化思维。
功能扩展组(江文博、黄伟圣、翁小燚)
我们负责的功能扩展工作涵盖了语音交互、API集成和数据扩展三个方面。基于Web Speech API实现了双向语音功能,解决了浏览器兼容性问题,让用户可以解放双手进行交互。在API集成方面,成功集成了OpenAI、DeepSeek、智谱AI、通义千问等多个提供商,设计了统一的配置接口,在实践中也发现DeepSeek特别适合学生项目使用。数据扩展工作中,我们完成了90种菜品的菜谱和营养数据整理,采用模块化文件管理方案提高了维护效率。这个过程让我们掌握了API集成、数据处理与算法设计等技能,也深刻理解了功能创新对产品价值的重要性。
测试文档组(李坤伟)
作为测试文档组,我的工作贯穿了整个项目周期。在测试方面,设计了覆盖8个核心功能的完整测试用例,通过严格测试发现并协助修复了菜品识别、热量统计、语音识别等关键Bug,确保了系统的稳定性。在文档编写方面,完成了超过2万字的技术文档,将复杂的技术实现转化为易读的内容。通过组织同学试用系统收集用户反馈,很多改进建议都来自真实用户的使用体验,比如将"菜谱番茄炒蛋"优化为"番茄炒蛋怎么做",增加"查看所有菜品"按钮等。通过GitHub进行版本控制和协作,学会了分支管理、提交规范等软件工程实践,这个过程让我深刻理解了质量保障在项目中的重要作用。
八、项目总结
8.1 核心成果
本项目成功构建了一个美食智能助手系统,实现了8个核心功能,包括菜品查看、智能推荐、菜谱查询、营养分析、饮食记录、一周计划、运动记录等。系统内置90种菜品的完整数据(含菜谱、营养、热量),支持22种运动类型,能够根据用户目标生成个性化饮食计划。
在技术实现上,我们借鉴MCP框架思想,实现了模块化架构设计。系统支持语音交互、多AI提供商集成、数据持久化存储,采用现代化响应式UI设计,能够适配不同设备。整个项目代码清晰,功能完整,达到了"能说会做"的智能体标准。
8.2 团队协作总结
采用模块化分工:
- 核心架构组(3人):Agent核心 + 数据库设计
- 前端UI组(3人):界面设计 + 交互实现
- 功能扩展组(3人):语音功能 + API集成
- 测试文档组(1人):测试 + 文档编写
通过GitHub版本控制,建立了规范的开发流程:需求分析 → 设计评审 → 编码实现 → 测试验证 → 文档整理。
8.3 学习收获
技术能力:
- 掌握AI智能体设计与实现
- 理解MCP框架核心思想
- 提升JavaScript全栈开发能力
- 积累语音识别、API集成实战经验
团队协作:
- 模块化分工、并行开发
- GitHub协作、版本管理
- 文档编写、技术表达
产品思维:
- 用户需求分析、功能设计
- 数据透明化、体验优化
- 持续迭代、质量保障
提交日期:2025年10月22日
项目版本:v1.0.0
小组成员:张博凇、杨垚、张铭浩、吴颖哲、李鸿洋、柯鸿斌、江文博、黄伟圣、翁小燚、李坤伟
浙公网安备 33010602011771号