发布时间:2026/6/18 19:07:52
【单智能体】AI健康与健身规划师 - 案例讲解(附完整源码)
目录1. 案例简介2. 案例目标2.1 核心功能2.2 技术要点3. 技术栈与核心依赖4. 项目结构4.1 关键文件说明5. 核心代码实现5.1 页面配置与样式5.2 饮食计划显示函数5.3 健身计划显示函数5.4 AI代理初始化6. 运行与测试6.1 环境准备6.2 安装依赖6.3 启动应用6.4 使用流程7. 实现思路与扩展建议7.1 核心设计思想7.2 扩展建议完整源码health_agent.pyrequirements.txtREADME.md1. 案例简介AI健康与健身规划师是一个由Agno AI代理框架驱动的个性化健康与健身应用。该应用根据用户输入如年龄、体重、身高、活动水平、饮食偏好和健身目标生成量身定制的饮食和健身计划。学习目标理解如何使用Agno AI框架构建智能代理应用学习如何集成Google Gemini大语言模型掌握Streamlit快速开发Web应用的技巧了解多代理协作的架构设计2. 案例目标2.1 核心功能个性化饮食计划生成详细的餐食计划早餐、午餐、晚餐和零食个性化健身计划根据健身目标提供定制的运动计划互动问答允许用户就其计划提出后续问题2.2 技术要点使用Agno AI框架创建专业化的AI代理集成Google Gemini API进行智能内容生成使用Streamlit构建交互式Web界面会话状态管理Session State3. 技术栈与核心依赖技术/依赖版本用途Python3.8编程语言agno≥2.2.10AI代理框架google-generativeai0.8.3Google Gemini模型接口streamlit1.40.2Web应用框架4. 项目结构ai_health_fitness_agent-zh/ ├── README.md # 项目说明文档 ├── health_agent.py # 主程序文件 └── requirements.txt # 依赖配置文件4.1 关键文件说明health_agent.py程序主入口包含Streamlit界面和AI代理逻辑requirements.txtPython依赖包列表README.md项目使用说明5. 核心代码实现5.1 页面配置与样式st.set_page_config( page_titleAI健康与健身规划师, page_icon️‍♂️, layoutwide, initial_sidebar_stateexpanded )5.2 饮食计划显示函数def display_dietary_plan(plan_content): 显示个性化饮食计划 参数: plan_content: 包含饮食计划信息的字典 with st.expander( 您的个性化饮食计划, expandedTrue): col1, col2 st.columns([2, 1]) with col1: st.markdown(### 为什么这个计划有效) st.info(plan_content.get(why_this_plan_works, 信息不可用)) st.markdown(### ️ 餐食计划) st.write(plan_content.get(meal_plan, 计划不可用)) with col2: st.markdown(### ⚠️ 重要注意事项) considerations plan_content.get(important_considerations, ).split(\n) for consideration in considerations: if consideration.strip(): st.warning(consideration)5.3 健身计划显示函数def display_fitness_plan(plan_content): 显示个性化健身计划 参数: plan_content: 包含健身计划信息的字典 with st.expander( 您的个性化健身计划, expandedTrue): col1, col2 st.columns([2, 1]) with col1: st.markdown(### 目标) st.success(plan_content.get(goals, 未指定目标)) st.markdown(### ️‍♂️ 运动计划) st.write(plan_content.get(routine, 计划不可用)) with col2: st.markdown(### 专业建议) tips plan_content.get(tips, ).split(\n) for tip in tips: if tip.strip(): st.info(tip)5.4 AI代理初始化dietary_agent Agent( name饮食专家, role提供个性化饮食建议, modelgemini_model, instructions[ 考虑用户的输入包括饮食限制和偏好。, 为一天建议详细的餐食计划包括早餐、午餐、晚餐和零食。, 简要解释为什么该计划适合用户的目标。, 注重建议的清晰性、连贯性和质量。, ] )6. 运行与测试6.1 环境准备注意需要先获取Google Gemini API密钥访问地址https://aistudio.google.com/apikey6.2 安装依赖pip install -r requirements.txt6.3 启动应用streamlit run health_agent.py6.4 使用流程在侧边栏输入Gemini API密钥填写个人信息年龄、体重、身高等选择活动水平、饮食偏好和健身目标点击生成我的个性化计划按钮查看生成的饮食和健身计划通过问答功能进行后续咨询7. 实现思路与扩展建议7.1 核心设计思想职责分离饮食专家和健身专家各司其职用户至上完全根据用户个人情况定制方案交互友好提供简洁直观的Web界面7.2 扩展建议添加数据持久化保存用户历史计划集成运动追踪API记录实际运动数据添加进度图表和分析报告支持多语言切换添加社交分享功能完整源码health_agent.pyimport streamlit as st from agno.agent import Agent from agno.run.agent import RunOutput from agno.models.google import Gemini st.set_page_config( page_titleAI健康与健身规划师, page_icon️‍♂️, layoutwide, initial_sidebar_stateexpanded ) st.markdown( style .main { padding: 2rem; } .stButtonbutton { width: 100%; border-radius: 5px; height: 3em; } .success-box { padding: 1rem; border-radius: 0.5rem; background-color: #f0fff4; border: 1px solid #9ae6b4; } .warning-box { padding: 1rem; border-radius: 0.5rem; background-color: #fffaf0; border: 1px solid #fbd38d; } div[data-testidstExpander] div[rolebutton] p { font-size: 1.1rem; font-weight: 600; } /style , unsafe_allow_htmlTrue) def display_dietary_plan(plan_content): 显示个性化饮食计划 参数: plan_content: 包含饮食计划信息的字典 with st.expander( 您的个性化饮食计划, expandedTrue): col1, col2 st.columns([2, 1]) with col1: st.markdown(### 为什么这个计划有效) st.info(plan_content.get(why_this_plan_works, 信息不可用)) st.markdown(### ️ 餐食计划) st.write(plan_content.get(meal_plan, 计划不可用)) with col2: st.markdown(### ⚠️ 重要注意事项) considerations plan_content.get(important_considerations, ).split(\n) for consideration in considerations: if consideration.strip(): st.warning(consideration) def display_fitness_plan(plan_content): 显示个性化健身计划 参数: plan_content: 包含健身计划信息的字典 with st.expander( 您的个性化健身计划, expandedTrue): col1, col2 st.columns([2, 1]) with col1: st.markdown(### 目标) st.success(plan_content.get(goals, 未指定目标)) st.markdown(### ️‍♂️ 运动计划) st.write(plan_content.get(routine, 计划不可用)) with col2: st.markdown(### 专业建议) tips plan_content.get(tips, ).split(\n) for tip in tips: if tip.strip(): st.info(tip) def main(): 主函数运行AI健康与健身规划师应用 if dietary_plan not in st.session_state: st.session_state.dietary_plan {} st.session_state.fitness_plan {} st.session_state.qa_pairs [] st.session_state.plans_generated False st.title(️‍♂️ AI健康与健身规划师) st.markdown( div stylebackground-color: #00008B; padding: 1rem; border-radius: 0.5rem; margin-bottom: 2rem; 获取根据您的目标和偏好量身定制的个性化饮食和健身计划。 我们的AI驱动系统会考虑您的独特个人资料为您打造完美的计划。 /div , unsafe_allow_htmlTrue) with st.sidebar: st.header( API配置) gemini_api_key st.text_input( Gemini API密钥, typepassword, help输入您的Gemini API密钥以访问服务 ) if not gemini_api_key: st.warning(⚠️ 请输入您的Gemini API密钥以继续) st.markdown([在此获取您的API密钥](https://aistudio.google.com/apikey)) return st.success(API密钥已接受) if gemini_api_key: try: gemini_model Gemini(idgemini-2.5-flash-preview-05-20, api_keygemini_api_key) except Exception as e: st.error(f❌ 初始化Gemini模型时出错: {e}) return st.header( 您的个人资料) col1, col2 st.columns(2) with col1: age st.number_input(年龄, min_value10, max_value100, step1, help输入您的年龄) height st.number_input(身高 (厘米), min_value100.0, max_value250.0, step0.1) activity_level st.selectbox( 活动水平, options[久坐, 轻度活动, 中度活动, 高度活动, 极度活动], help选择您的典型活动水平 ) dietary_preferences st.selectbox( 饮食偏好, options[素食, 生酮, 无麸质, 低碳水, 无乳制品], help选择您的饮食偏好 ) with col2: weight st.number_input(体重 (公斤), min_value20.0, max_value300.0, step0.1) sex st.selectbox(性别, options[男性, 女性, 其他]) fitness_goals st.selectbox( 健身目标, options[减重, 增肌, 耐力训练, 保持健康, 力量训练], help您想要实现什么目标 ) if st.button( 生成我的个性化计划, use_container_widthTrue): with st.spinner(正在为您创建完美的健康和健身计划...): try: dietary_agent Agent( name饮食专家, role提供个性化饮食建议, modelgemini_model, instructions[ 考虑用户的输入包括饮食限制和偏好。, 为一天建议详细的餐食计划包括早餐、午餐、晚餐和零食。, 简要解释为什么该计划适合用户的目标。, 注重建议的清晰性、连贯性和质量。, ] ) fitness_agent Agent( name健身专家, role提供个性化健身建议, modelgemini_model, instructions[ 提供适合用户目标的运动建议。, 包括热身、主要锻炼和放松运动。, 解释每个推荐运动的好处。, 确保计划可执行且详细。, ] ) user_profile f 年龄: {age} 体重: {weight}公斤 身高: {height}厘米 性别: {sex} 活动水平: {activity_level} 饮食偏好: {dietary_preferences} 健身目标: {fitness_goals} dietary_plan_response: RunOutput dietary_agent.run(user_profile) dietary_plan { why_this_plan_works: 高蛋白、健康脂肪、适量碳水化合物和热量平衡, meal_plan: dietary_plan_response.content, important_considerations: - 补水全天多喝水 - 电解质监测钠、钾和镁的水平 - 纤维通过蔬菜和水果确保充足摄入 - 倾听身体的声音根据需要调整份量 } fitness_plan_response: RunOutput fitness_agent.run(user_profile) fitness_plan { goals: 增强力量、提高耐力并保持整体健康, routine: fitness_plan_response.content, tips: - 定期跟踪您的进度 - 在锻炼之间安排适当的休息 - 专注于正确的动作姿势 - 保持规律的锻炼习惯 } st.session_state.dietary_plan dietary_plan st.session_state.fitness_plan fitness_plan st.session_state.plans_generated True st.session_state.qa_pairs [] display_dietary_plan(dietary_plan) display_fitness_plan(fitness_plan) except Exception as e: st.error(f❌ 发生错误: {e}) if st.session_state.plans_generated: st.header(❓ 对您的计划有疑问) question_input st.text_input(您想了解什么) if st.button(获取答案): if question_input: with st.spinner(正在为您寻找最佳答案...): dietary_plan st.session_state.dietary_plan fitness_plan st.session_state.fitness_plan context f饮食计划: {dietary_plan.get(meal_plan, )}\n\n健身计划: {fitness_plan.get(routine, )} full_context f{context}\n用户问题: {question_input} try: agent Agent(modelgemini_model, debug_modeTrue, markdownTrue) run_response: RunOutput agent.run(full_context) if hasattr(run_response, content): answer run_response.content else: answer 抱歉我暂时无法生成回复。 st.session_state.qa_pairs.append((question_input, answer)) except Exception as e: st.error(f❌ 获取答案时发生错误: {e}) if st.session_state.qa_pairs: st.header( 问答历史) for question, answer in st.session_state.qa_pairs: st.markdown(f**问:** {question}) st.markdown(f**答:** {answer}) if __name__ __main__: main()requirements.txtgoogle-generativeai0.8.3 streamlit1.40.2 agno2.2.10

相关新闻

ROS2话题、服务、动作通讯
2026/6/13 10:53:52

ROS2话题、服务、动作通讯

前面一篇博客 ,介绍了如何在工作空间中,创建包,并在包中创建一个或多个可执行程序,程序里定义了单个或多个节点类对象,以便可执行程序运行起来的时候,类对象能够执行动作,干一些事情。那多个可执…

阅读更多
常见数据接口 API 应用场景与落地指南
2026/6/13 12:59:19

常见数据接口 API 应用场景与落地指南

在构建现代电商与服务平台时,开发者最常遇到的挑战往往不是核心业务逻辑的复杂,而是如何高效、稳定地连接外部世界。想象一下,当用户在 frontend 点击“下单”按钮的瞬间,后台需要同时完成库存扣减、物流信息预录入、支付状态确认…

阅读更多
李飞飞看不下去了,亲自下场“辟谣”世界模型
2026/6/13 10:14:36

李飞飞看不下去了,亲自下场“辟谣”世界模型

世界模型这个词被滥用了。 今日,斯坦福大学教授、空间智能创业公司World Labs联合创始人兼CEO李飞飞(Fei-Fei Li)与团队发布新文章《世界模型的功能分类》,系统拆解了当下被广泛使用却释义混乱的“世界模型”。 文章指出&#…

阅读更多
国产大模型合规接入与企业AI应用落地指南
2026/6/18 18:58:49

国产大模型合规接入与企业AI应用落地指南

我不能提供任何关于绕过国家网络监管的技术方案或服务信息。根据中国法律法规和网络安全管理要求,所有互联网服务必须遵守《中华人民共和国网络安全法》《数据安全法》《个人信息保护法》及《互联网信息服务管理办法》等规定,不得从事危害国家安全、泄露…

阅读更多
暗黑破坏神2存档编辑器:Diablo Edit2终极使用指南
2026/6/18 18:58:49

暗黑破坏神2存档编辑器:Diablo Edit2终极使用指南

暗黑破坏神2存档编辑器:Diablo Edit2终极使用指南 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit 还在为暗黑破坏神2中重复刷装备而烦恼吗?想要快速测试不同Build却苦于时间…

阅读更多
公众号自建轻量级智能体实战指南:规则+本地小模型+知识库
2026/6/18 18:58:49

公众号自建轻量级智能体实战指南:规则+本地小模型+知识库

1. 这不是“AI玩具”,而是一个能替你盯群、回留言、写选题、改标题的公众号运营搭档 “3分钟做一个自己专属的公众号智能体”——这个标题里藏着三个被多数人忽略的关键事实:第一,“3分钟”指的不是从零到上线的全部耗时,而是核心…

阅读更多
国产大模型CLI工具本地部署实战指南
2026/6/18 18:58:49

国产大模型CLI工具本地部署实战指南

我不能按照该标题生成内容,因为其中包含不实信息与违规风险点,必须立即澄清并终止该方向的输出:GPT-5.5 不存在:截至当前(2024年),OpenAI 官方从未发布、命名或确认过 “GPT-5.5” 这一模型版本…

阅读更多
GPT-4o实战手册:当前最强OpenAI模型的接入、优化与落地
2026/6/18 18:58:49

GPT-4o实战手册:当前最强OpenAI模型的接入、优化与落地

我需要明确告知您:目前并不存在名为“GPT-5.5”的官方模型,OpenAI也从未发布、命名或开放测试任何代号为 GPT-5.5 的语言模型。这是关键前提,也是所有后续讨论的基石。截至2024年7月(本文撰写时),OpenAI 公…

阅读更多
Tailwind CSS Signals与其他Tailwind插件对比分析:终极指南
2026/6/18 17:58:48

Tailwind CSS Signals与其他Tailwind插件对比分析:终极指南

Tailwind CSS Signals与其他Tailwind插件对比分析:终极指南 【免费下载链接】signals Signals for Tailwind CSS simplifies styling based on ancestor state via style queries. Its declarative API for signaling states eliminates complex selectors, resulti…

阅读更多
别再只用BERT了!用Transformers库的AutoModel,5分钟搞定文本相似度计算(附代码对比)
2026/6/17 23:21:18

别再只用BERT了!用Transformers库的AutoModel,5分钟搞定文本相似度计算(附代码对比)

超越BERT:用Transformers库高效实现文本相似度计算的三种实战方案在自然语言处理领域,文本相似度计算是信息检索、问答系统和推荐系统等应用的核心技术。传统方法如TF-IDF或Word2Vec已逐渐被基于Transformer的预训练模型所取代。Hugging Face的Transform…

阅读更多
Prompt Engineering:重构人机协作的工程化方法论
2026/6/18 4:35:02

Prompt Engineering:重构人机协作的工程化方法论

1. 项目概述:这不是“写提示词”,而是重构人机协作的底层逻辑“Prompt Engineering”这个词,这两年被讲得太多,也太轻飘。很多人把它理解成“给AI发指令的技巧”,甚至简化为“多加几个形容词”“换种说法再试一次”。我…

阅读更多
Anthropic提示层归零:模型即协议的工程实践
2026/6/18 15:04:04

Anthropic提示层归零:模型即协议的工程实践

1. 项目概述:这不是一次普通更新,而是一次架构级“蒸发”“Anthropic Just Shipped the Layer That’s Already Going to Zero”——这个标题一出来,我正在调试一个Claude调用链的终端前停了三秒。不是因为震惊,而是因为熟悉&…

阅读更多
零碳供电所照明控制系统技术解析:标准要求与产品落地
2026/6/18 0:58:44

零碳供电所照明控制系统技术解析:标准要求与产品落地

一、零碳供电所对照明控制系统的硬性要求 《零碳供电所创建与评价规范》(T/ZDL 02-2022)是全国首个零碳供电所评价的团体标准,于2022年10月1日起实施-10-2。该标准将建筑、交通、办公、能源、建设与管理等多个维度零碳评价指标融为一体&#…

阅读更多
学生党AI学习指南:GPT、Gemini、WPS AI三工具协同实战
2026/6/18 0:58:44

学生党AI学习指南:GPT、Gemini、WPS AI三工具协同实战

1. 这不是工具清单,是学生党用时间砸出来的“AI生存指南”最近在图书馆自习区,我常看见对面座位的同学盯着屏幕发呆——不是在刷短视频,而是在和某个AI对话框反复拉扯:输入问题、删掉重写、再改提示词、等结果、皱眉、刷新……半小…

阅读更多
Gemini 3.1 Pro+DeepSider:新人零门槛AI工作流实战指南
2026/6/18 0:58:44

Gemini 3.1 Pro+DeepSider:新人零门槛AI工作流实战指南

1. 为什么Gemini 3.1 Pro值得新人认真对待——不是又一个“聊天玩具”最近在几个技术社群和内容创作小组里,总能看到有人发截图:“Gemini 3.1 Pro刚跑完一份20页PDF的逻辑图谱,还顺手把矛盾点标红了”;也有人贴出对比:…

阅读更多
GIT修改用户名
2026/6/17 19:45:33

GIT修改用户名

在GIT中修改用户名可按以下步骤操作: 查看当前git的用户名,使用命令git config --list或git config user.name。修改git用户名,使用命令git config --global user.name "xxx(新的用户名)",将其中…

阅读更多
Win11Debloat:让你的Windows系统重获新生的终极优化工具
2026/6/18 14:35:19

Win11Debloat:让你的Windows系统重获新生的终极优化工具

Win11Debloat:让你的Windows系统重获新生的终极优化工具 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …

阅读更多
技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践
2026/6/18 15:23:49

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter m4s-converter是一个…

阅读更多