第二次作业

这个作业属于哪个课程 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 美食推荐流程

  1. 用户输入"推荐早餐/午餐/晚餐"或"推荐美食"
  2. 系统识别推荐类型(分类推荐 vs 通用推荐)
  3. 从对应数据库中随机选择菜品
  4. 返回菜品名称、热量信息
  5. 显示在聊天界面

2.2.2 菜谱查询流程

  1. 用户输入"XXX怎么做"或"菜谱XXX"
  2. 系统提取菜品名称
  3. 在菜谱数据库中查找(90种菜品)
  4. 返回食材清单、详细步骤、用时、热量
  5. 格式化显示

2.2.3 营养分析流程

  1. 用户输入"详细营养XXX"或"XXX有哪些营养"
  2. 系统提取菜品名称
  3. 查询营养数据库(90种菜品)
  4. 计算健康评分(蛋白质25分+纤维25分+热量25分+脂肪25分)
  5. 生成个性化建议
  6. 返回完整营养信息

2.2.4 饮食记录流程

  1. 用户输入"记录吃了XXX"
  2. 系统识别菜品名称
  3. 从数据库获取准确热量
  4. 记录时间戳和日期
  5. 保存到LocalStorage
  6. 更新今日统计(总热量、用餐次数)
  7. 更新侧边栏显示

2.2.5 计划生成流程

  1. 用户输入"生成一周减脂/增肌计划"
  2. 系统识别目标(减脂1500卡/增肌2500卡/维持2000卡)
  3. 循环7天:
    • 从早餐数据库随机选择1种
    • 从午餐数据库随机选择1种
    • 从晚餐数据库随机选择1种
    • 计算每日总热量
  4. 格式化生成7天计划
  5. 保存计划到内存
  6. 返回完整计划

2.2.6 运动记录流程

  1. 用户输入"记录运动XXX XX分钟"
  2. 系统提取运动类型和时长
  3. 查询运动热量表(22种运动)
  4. 计算消耗热量 = 运动强度 × 时长
  5. 记录到数据库
  6. 计算今日净摄入 = 摄入 - 消耗
  7. 提供健康建议

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

功能说明:系统启动后,用户将看到现代化的渐变设计界面,包含聊天窗口、输入框、语音按钮和右侧统计面板。

QQ_1761193087025


4.2 查看所有菜品

触发方式

  • 输入文字:"菜品列表" / "所有菜品" / "全部菜品"
  • 点击界面右下角的"查看所有菜品"按钮

功能说明

  • 展示90种菜品的完整目录,按早餐、午餐、晚餐三类分组
  • 每类显示30种菜品名称
  • 自动统计并显示总菜品数量
  • 便于用户快速浏览系统支持的所有食物

示例输入菜品列表

系统响应

📋 菜品数据库(共90种)

🌅 早餐(30种):
豆浆油条、三明治、小笼包、燕麦粥、煎饼果子...

🌞 午餐(30种):
宫保鸡丁、红烧肉、糖醋里脊、鱼香肉丝、青椒肉丝...

🌙 晚餐(30种):
番茄炒蛋、麻婆豆腐、清蒸鱼、白灼虾、凉拌黄瓜...

QQ_1761193111108


4.3 智能美食推荐

触发方式

  • 通用推荐:"推荐美食" / "有什么好吃的"
  • 分类推荐:"推荐早餐" / "推荐午餐" / "推荐晚餐"

功能说明

  • 通用推荐:从90种菜品中随机推荐3种,适合不确定想吃什么的场景
  • 分类推荐:根据餐次(早中晚)从对应的30种菜品中精准推荐1种
  • 显示菜品名称、所属餐次、热量信息
  • 计算推荐菜品的总热量

示例输入推荐美食

系统响应

🍽️ 为您推荐3种美食:

1. 宫保鸡丁(午餐)- 450卡
2. 番茄炒蛋(晚餐)- 180卡  
3. 燕麦粥(早餐)- 150卡

💡 总热量:780卡

QQ_1761193153010


4.4 菜谱查询

触发方式

  • "XXX怎么做":如"番茄炒蛋怎么做"
  • "菜谱XXX":如"菜谱宫保鸡丁"

功能说明

  • 支持90种菜品的详细菜谱查询
  • 提供完整的食材清单(带用量)
  • 展示详细的制作步骤(分步骤编号)
  • 标注预计用时和热量信息
  • 帮助用户学习烹饪技巧

示例输入番茄炒蛋怎么做

系统响应

👨‍🍳 菜谱:番茄炒蛋

📝 食材:
• 番茄 2个
• 鸡蛋 3个
• 葱花 适量
• 盐 适量
• 糖 少许

🔪 步骤:
1. 番茄洗净切块,鸡蛋打散
2. 热锅下油,炒蛋至凝固盛出
3. 锅中加油炒番茄至软烂
4. 加入炒好的鸡蛋翻炒
5. 加盐、糖调味,撒葱花出锅

⏱️ 用时:15分钟
🔥 热量:180卡

QQ_1761193223996


4.5 营养分析

触发方式

  • 详细营养:"详细营养XXX" / "XXX的详细营养"
  • 简单查询:"XXX有哪些营养"

功能说明

  • 提供完整的营养成分分析(热量、蛋白质、脂肪、碳水化合物、纤维)
  • 计算健康评分(0-100分,基于多维度评分算法)
  • 生成个性化营养建议
  • 帮助用户科学管理饮食

示例输入宫保鸡丁有哪些营养

系统响应

🥗 营养分析:宫保鸡丁

📊 营养成分(每份):
• 热量:450卡
• 蛋白质:28g ⭐⭐⭐⭐⭐
• 脂肪:22g ⭐⭐⭐
• 碳水化合物:35g ⭐⭐⭐⭐
• 纤维:4g ⭐⭐⭐

💯 健康评分:82分

✅ 营养建议:
• 高蛋白:优质蛋白质来源,适合增肌
• 中等脂肪:注意油脂摄入
• 适量碳水:提供能量
• 建议搭配蔬菜和主食食用

QQ_1761193252691


4.6 饮食记录

触发方式

  • "记录吃了XXX":如"记录吃了宫保鸡丁"
  • "吃了XXX":如"吃了番茄炒蛋"

功能说明

  • 自动识别食物名称
  • 从数据库获取准确热量
  • 记录时间戳(日期 + 时间)
  • 实时更新今日统计(总热量、用餐次数)
  • 数据持久化保存到 LocalStorage
  • 右侧统计面板同步更新

示例输入记录吃了宫保鸡丁

系统响应

✅ 饮食记录成功!

🍽️ 食物:宫保鸡丁
🔥 热量:450卡
📅 时间:2025-10-23 12:30

📊 今日统计:
• 已摄入:450卡
• 用餐次数:1次

💡 距离目标还有1550卡(目标2000卡)

QQ_1761193277639


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卡

... (周三至周日)

💡 提示:计划已生成,坚持执行可达成目标!

QQ_1761193308370


4.8 运动记录

触发方式

  • "记录运动XXX XX分钟":如"记录运动跑步30分钟"
  • "XXX XX分钟":如"游泳1小时"
  • 支持多种时长表达:30分钟、1小时、半小时、一小时等

功能说明

  • 支持22种运动类型(有氧、柔韧、力量、球类)
  • 自动识别运动类型和时长
  • 根据运动强度计算消耗热量
  • 记录运动数据(类型、时长、热量、时间)
  • 计算今日净摄入 = 摄入热量 - 消耗热量
  • 提供智能健康建议

支持的运动类型

  • 有氧运动(12种):跑步、快走、散步、游泳、骑行、跳绳、爬楼梯、跳舞、健身操、爬山、徒步、滑冰
  • 柔韧运动(3种):瑜伽、普拉提、太极
  • 力量运动(2种):力量训练、拳击
  • 球类运动(5种):篮球、足球、羽毛球、网球、乒乓球

示例输入记录运动跑步30分钟

系统响应

✅ 运动记录成功!

🏃 运动项目:跑步(有氧)
⏱️ 运动时长:30分钟
🔥 消耗热量:300卡

📊 今日数据:
  摄入:1500卡
  消耗:300卡
  净摄入:1200卡

💡 健康建议:运动量适中,坚持规律运动有助于健康!

QQ_1761193331602


4.9 统计面板

功能说明

  • 位于界面右侧,实时显示用户数据
  • 动态更新,无需刷新页面

统计内容

  • 今日摄入:累计饮食热量
  • 今日消耗:累计运动热量
  • 净摄入:摄入 - 消耗
  • 用餐次数:今日记录的餐次
  • 运动次数:今日记录的运动次数

QQ_1761193331602


五、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.jsrecipes-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
小组成员:张博凇、杨垚、张铭浩、吴颖哲、李鸿洋、柯鸿斌、江文博、黄伟圣、翁小燚、李坤伟

posted @ 2025-10-23 13:11  Boshsama  阅读(26)  评论(0)    收藏  举报