基于 HelloAgents 框架开发智能减肥助理:从多智能体架构到 Streamlit 前端落地
基于 HelloAgents 框架开发智能减肥助理:从多智能体架构到 Streamlit 前端落地
在 AI 应用开发的浪潮下,基于智能体(Agent)的个性化助手系统成为了热门方向。此前接触到基于 HelloAgents 框架开发的智能编程导师项目后,我受到启发,结合健康管理领域的需求,开发了一款智能减肥助理系统—— 不仅复用了多智能体协同的核心架构,还通过 Streamlit 搭建了友好的前端界面,让个性化减肥指导触手可及。
项目背景:为什么做智能减肥助理?
博主最近也在减肥减脂,主要靠跑步,过程中发现很多减肥问题很难靠自己解决,于是基于 HelloAgents 多智能体框架,做了一个智能减肥助理,还加了 Streamlit 前端界面,用起来更直观。
功能特点
🎯核心功能
个性化减肥规划:根据用户的身高、体重、体脂率、运动基础、饮食偏好,制定分阶段的减肥计划(含目标拆解、周期规划);
智能饮食推荐:结合每日热量需求,推荐适配口味、易获取的食材 / 餐单,支持热量计算、营养配比分析;
运动方案定制:根据用户体能、时间、场地(居家 / 健身房),推荐针对性运动,含动作指导、强度调整建议;
进度跟踪与反馈:支持用户记录每日饮食 / 运动 / 体重数据,智能体分析进度并动态调整方案,给出鼓励或改进建议。
🤖多智能体架构设计
复用 HelloAgents 的 Agent-to-Agent(A2A)协同模式,构建了分工明确的智能体体系:
- MentorAgent(总导师):负责理解用户整体减脂需求,统筹调度所有子智能体,整合各模块输出。
- DietPlanningAgent(饮食规划助手):根据用户的身体数据、饮食偏好与减脂目标,制定科学的个性化饮食方案。
- DietRecordAgent(饮食记录助手):解析用户提交的饮食记录,统计每日热量摄入与营养成分,识别饮食行为模式。
- ExercisePlanningAgent(运动规划助手):结合用户体能水平、运动习惯与减脂目标,定制适配的运动方案。
- ExerciseDataAnomalyAgent(运动数据异常助手):识别运动强度不足、过度运动或数据偏差等异常情况,给出调整提示。
- BodyDataTrendAgent(身体数据趋势助手):跟踪用户体重、体脂等关键指标的变化趋势,评估减脂进度。
- ComplianceMotivationAgent(依从性激励助手):分析用户的执行情况,通过正向激励、个性化鼓励与行为引导,提升用户减脂计划的依从性。
- HealthRiskWarnAgent(健康风险预警助手):结合用户的身体数据、饮食与运动情况,识别潜在的健康风险,并给出安全提示。
- SleepMetabolismAgent(睡眠与代谢助手):关联用户的睡眠情况与代谢水平,分析睡眠对减脂效率的影响。
- SystemOptimizeAgent(系统优化助手):基于用户的长期数据反馈,动态优化其他智能体的输出策略,让方案随用户状态变化持续迭代。
下面是项目的整个目录
环境配置与安装
- 环境要求
Python 3.8+
HelloAgents 框架(Github链接) - 安装依赖
pip install hello-agents[all]>=0.2.7streamlit jupyterlab python-dotenv- 配置环境变量
创建.env文件,配置 LLM 模型相关参数(这里使用的阿里百炼平台,链接:阿里百炼平台),注册账号得到API_key。
# LLM 模型配置LLM_MODEL_ID=qwen-plus# 可以自己选模型LLM_API_KEY=your_api_key_here# 配置自己的API_keyLLM_BASE_URL=https://api-inference.modelscope.cn/v1 LLM_TIMEOUT=60文件代码
# MentorAgent.pyfromhello_agentsimportSimpleAgent,HelloAgentsLLMfromtypingimportDict,Anyfromsrc.agent.BodyDataTrendAgentimportBodyDataTrendAgentfromsrc.agent.ComplianceMotivationAgentimportComplianceMotivationAgentfromsrc.agent.DietPlanningAgentimportDietPlanningAgentfromsrc.agent.ExerciseDataAnomalyAgentimportExerciseDataAnomalyAgentfromsrc.agent.ExercisePlanningAgentimportExercisePlanningAgentfromsrc.agent.HealthRiskWarnAgentimportHealthRiskWarnAgentfromsrc.agent.SleepMetabolismAgentimportSleepMetabolismAgentfromsrc.agent.SystemOptimizeAgentimportSystemOptimizeAgentfromsrc.tools.agent_toolimportAgentToolclassTutorAgent(SimpleAgent):""" MentorAgent 减肥导师智能体 多智能体减肥系统的核心总控模块,负责统一调度管理所有子智能体。 汇总用户数据与各智能体分析结果,综合决策并动态调整减肥方案, 协调饮食、运动、数据监测等模块协同工作,保障减脂安全、科学、有效。 """def__init__(self,llm:HelloAgentsLLM):""" 初始化 TutorAgent 和所有子智能体。 Args: llm: 用于所有 agents 的大语言模型实例。 """# 导入放在这里避免循环导入# 创建子智能体实例self.body_trend=BodyDataTrendAgent(llm)# 体重体脂趋势分析智能体self.compliance_motivation=ComplianceMotivationAgent(llm)# 激励助手智能体self.diet_planning=DietPlanningAgent(llm)# 饮食规划师智能体self.exercise_anomaly=ExerciseDataAnomalyAgent(llm)# 运动监测智能体self.exercise_planning=ExercisePlanningAgent(llm)# 运动规划师智能体self.health_risk_warn=HealthRiskWarnAgent(llm)# 安全预警智能体self.sleep_metabolism=SleepMetabolismAgent(llm)# 睡眠分析师智能体self.system_optimize=SystemOptimizeAgent(llm)# 复盘优化智能体# 定义系统提示词system_prompt=""" 你是一位智能减肥导师 (Mentor)。你负责协调个性化的减脂体验。 你拥有以下专业助手(工具): - call_diet_planning: 饮食规划师,制定个性化饮食计划 - call_exercise_planning: 运动规划师,制定个性化运动计划 - call_exercise_anomaly: 运动监测,判断运动数据是否异常 - call_body_trend: 数据分析师,分析体重体脂变化趋势 - call_sleep_metabolism: 睡眠分析师,分析睡眠与代谢状态 - call_compliance_motivation: 激励助手,提升依从性与动力 - call_health_risk_warn: 安全预警,监测健康风险 - call_system_optimize: 复盘优化,定期优化减脂方案 **关键:你必须使用工具,不能自己完成这些任务!** 工具调用格式(严格遵守此格式): [TOOL_CALL:工具名称:参数] 具体示例: 示例1 - 制定饮食计划: 用户:"我想减脂,帮我制定饮食计划" 你的回答:[TOOL_CALL:call_diet_planning:query=请为用户制定个性化减脂饮食计划] 示例2 - 制定运动计划: 用户:"帮我安排今天的运动" 你的回答:[TOOL_CALL:call_exercise_planning:query=请为用户制定个性化减脂运动计划] 示例3 - 分析体重趋势: 用户:"我最近体重一直不变" 你的回答:[TOOL_CALL:call_body_trend:query=请分析用户体重体脂变化趋势] 示例4 - 监测运动数据: 用户:"我今天运动心率170" 你的回答:[TOOL_CALL:call_exercise_anomaly:query=请判断用户运动数据是否异常] 工作流程(必须严格遵守): 1. 用户需要饮食方案 → 调用 call_diet_planning 2. 用户需要运动方案 → 调用 call_exercise_planning 3. 用户有运动数据 → 调用 call_exercise_anomaly 4. 用户记录体重体脂 → 调用 call_body_trend 5. 用户反馈睡眠问题 → 调用 call_sleep_metabolism 6. 用户难以坚持/需要鼓励 → 调用 call_compliance_motivation 7. 用户出现不适/风险行为 → 调用 call_health_risk_warn 8. 需要定期复盘优化 → 调用 call_system_optimize **绝对禁止的行为**: - ❌ 不要自己制定饮食计划 - ❌ 不要自己制定运动计划 - ❌ 不要自己分析身体数据 - ❌ 不要自己判断运动是否异常 - ❌ 不要说"工具调用失败"然后自己完成任务 正确的行为: - ✅ 识别用户减脂需求 - ✅ 立即生成工具调用(格式:[TOOL_CALL:工具名:query=...]) - ✅ 等待工具返回结果 - ✅ 将结果友好地呈现给用户 """# 初始化父类super().__init__(name="Tutor",llm=llm,system_prompt=system_prompt)# 将子智能体包装为工具并注册self.add_tool(AgentTool(self.body_trend,name="call_body_trend",description="调用体重体脂趋势分析智能体,分析用户体重体脂变化趋势"))self.add_tool(AgentTool(self.compliance_motivation,name="call_compliance_motivation",description="调用激励助手智能体,提升依从性与动力"))self.add_tool(AgentTool(self.diet_planning,name="call_diet_planning",description="调用饮食规划师智能体,为用户制定个性化减脂饮食计划"))self.add_tool(AgentTool(self.exercise_anomaly,name="call_exercise_anomaly",description="调用运动监测智能体,判断运动数据是否异常"))self.add_tool(AgentTool(self.exercise_planning,name="call_exercise_planning",description="调用运动规划师智能体,为用户制定个性化减脂运动计划"))self.add_tool(AgentTool(self.health_risk_warn,name="call_health_risk_warn",description="调用安全预警智能体,监测健康风险"))self.add_tool(AgentTool(self.sleep_metabolism,name="call_sleep_metabolism",description="调用睡眠分析师智能体,分析睡眠与代谢状态"))self.add_tool(AgentTool(self.system_optimize,name="call_system_optimize",description="调用复盘优化智能体,定期优化减脂方案"))# BodyDataTrendAgent.pyfromhello_agentsimportSimpleAgent,HelloAgentsLLMclassBodyDataTrendAgent(SimpleAgent):""" 负责分析体重、体脂、围度等身体数据趋势的智能体。 """def__init__(self,llm:HelloAgentsLLM):""" 初始化 BodyDataTrendAgent。 Args: llm: 用于数据分析的大语言模型实例。 """system_prompt=""" 你是一位专业的身体数据趋势分析师。 你的目标是分析用户体重、体脂、围度等数据,判断减脂效果。 当分析数据时: 1. 接收用户每日体重、体脂、身体围度等记录。 2. 分析长期变化趋势,排除短期波动干扰。 3. 判断是否进入减脂平台期,识别异常变化。 4. 给出趋势解读、健康评估和优化建议。 5. 向导师智能体反馈效果,用于调整饮食与运动计划。 分析结果简洁专业,重点突出趋势与风险,便于系统决策。 """super().__init__(name="BodyDataTrend",llm=llm,system_prompt=system_prompt)# ComplianceMotivationAgent.pyfromhello_agentsimportSimpleAgent,HelloAgentsLLMclassComplianceMotivationAgent(SimpleAgent):""" 负责用户依从性管理与减脂激励的智能体。 """def__init__(self,llm:HelloAgentsLLM):""" 初始化 ComplianceMotivationAgent。 Args: llm: 用于激励与依从性管理的大语言模型实例。 """system_prompt=""" 你是减脂依从性与心理激励专家。 目标是提升用户坚持度,避免放弃与暴食。 工作内容: 1. 监测计划执行率,识别懈怠与放弃倾向。 2. 提供正向鼓励、情绪疏导与动力激发。 3. 对情绪性进食给出替代方案。 4. 帮助用户建立长期坚持的习惯。 5. 语言温和积极,富有说服力。 """super().__init__(name="ComplianceMotivation",llm=llm,system_prompt=system_prompt)# DietPlanningAgent.pyfromhello_agentsimportSimpleAgent,HelloAgentsLLMclassDietPlanningAgent(SimpleAgent):""" 负责制定个性化减肥饮食计划的智能体。 """def__init__(self,llm:HelloAgentsLLM):""" 初始化 DietPlanningAgent。 Args: llm: 用于生成饮食方案的大语言模型实例。 """system_prompt=""" 你是专业减脂饮食规划师。 你的目标是根据用户信息制定科学、可持续的饮食方案。 制定计划时: 1. 结合身高、体重、目标、饮食偏好与禁忌。 2. 控制热量缺口,保证蛋白质、膳食纤维与营养均衡。 3. 给出三餐结构、食材建议与饮食原则。 4. 避免极端节食,保证可执行性。 5. 输出清晰易懂,便于用户执行。 饮食方案健康、合理、贴合减脂需求。 """super().__init__(name="DietPlanning",llm=llm,system_prompt=system_prompt)# DietRecordAgent.pyfromhello_agentsimportSimpleAgent,HelloAgentsLLMclassDietRecordAgent(SimpleAgent):""" 负责饮食记录分析与热量评估的智能体。 """def__init__(self,llm:HelloAgentsLLM):""" 初始化 DietRecordAgent。 Args: llm: 用于饮食识别与评估的大语言模型实例。 """system_prompt=""" 你是饮食记录与营养评估专家。 目标是识别饮食内容、估算热量并评估合理性。 工作内容: 1. 分析用户饮食记录,识别食物种类与分量。 2. 估算热量、宏量营养素比例。 3. 判断是否高脂高糖高油,给出改进建议。 4. 对比计划饮食与实际摄入偏差。 5. 输出简洁明确,便于导师智能体调整计划。 """super().__init__(name="DietRecord",llm=llm,system_prompt=system_prompt)# ExerciseDataAnomalyAgent.pyfromhello_agentsimportSimpleAgent,HelloAgentsLLMclassExerciseDataAnomalyAgent(SimpleAgent):""" 负责监测运动数据异常与风险识别的智能体。 """def__init__(self,llm:HelloAgentsLLM):""" 初始化 ExerciseDataAnomalyAgent。 Args: llm: 用于异常分析的大语言模型实例。 """system_prompt=""" 你是运动数据监测与风险评估专家。 目标是识别运动数据异常,保障用户安全。 监测内容: 1. 心率、步数、运动时长、强度是否异常。 2. 判断是否过度运动、心率过高、负荷不当。 3. 识别风险行为并及时预警。 4. 向导师智能体反馈异常,调整运动计划。 5. 输出风险等级与处理建议。 """super().__init__(name="ExerciseDataAnomaly",llm=llm,system_prompt=system_prompt)# ExercisePlanningAgent.pyfromhello_agentsimportSimpleAgent,HelloAgentsLLMclassExercisePlanningAgent(SimpleAgent):""" 负责制定个性化减脂运动计划的智能体。 """def__init__(self,llm:HelloAgentsLLM):""" 初始化 ExercisePlanningAgent。 Args: llm: 用于生成运动方案的大语言模型实例。 """system_prompt=""" 你是专业减脂运动规划师。 目标是根据用户情况制定安全高效的运动计划。 制定计划时: 1. 结合用户体能、场地、时间与运动偏好。 2. 合理搭配有氧与力量训练,提升消耗与代谢。 3. 控制强度,避免受伤,循序渐进。 4. 给出动作、组数、频次与注意事项。 5. 计划清晰可执行,适合长期坚持。 """super().__init__(name="ExercisePlanning",llm=llm,system_prompt=system_prompt)# HealthRiskWarnAgent.pyfromhello_agentsimportSimpleAgent,HelloAgentsLLMclassHealthRiskWarnAgent(SimpleAgent):""" 负责减脂过程健康风险预警与安全保障的智能体。 """def__init__(self,llm:HelloAgentsLLM):""" 初始化 HealthRiskWarnAgent。 Args: llm: 用于健康风险评估的大语言模型实例。 """system_prompt=""" 你是减脂安全与健康风险预警专员。 目标是识别风险,保障用户身体健康。 预警内容: 1. 过度节食、营养不良、心率异常等风险。 2. 运动损伤、低血糖、疲劳过度等状况。 3. 对危险行为强制提醒并建议暂停。 4. 高优先级反馈给导师智能体调整计划。 5. 预警明确、严肃,保障安全第一。 """super().__init__(name="HealthRiskWarn",llm=llm,system_prompt=system_prompt)# SleepMetabolismAgent.pyfromhello_agentsimportSimpleAgent,HelloAgentsLLMclassSleepMetabolismAgent(SimpleAgent):""" 负责睡眠监测与代谢状态评估的智能体。 """def__init__(self,llm:HelloAgentsLLM):""" 初始化 SleepMetabolismAgent。 Args: llm: 用于睡眠与代谢分析的大语言模型实例。 """system_prompt=""" 你是睡眠与代谢健康分析师。 目标是评估睡眠对减脂与代谢的影响。 工作内容: 1. 分析睡眠时长、质量、作息规律。 2. 判断睡眠是否影响饥饿激素与代谢效率。 3. 给出睡眠改善建议以辅助减脂。 4. 联动饮食与运动计划进行适配调整。 5. 输出简洁专业,便于系统决策。 """super().__init__(name="SleepMetabolism",llm=llm,system_prompt=system_prompt)# SystemOptimizeAgent.pyfromhello_agentsimportSimpleAgent,HelloAgentsLLMclassSystemOptimizeAgent(SimpleAgent):""" 负责系统复盘与减脂策略迭代优化的智能体。 """def__init__(self,llm:HelloAgentsLLM):""" 初始化 SystemOptimizeAgent。 Args: llm: 用于复盘优化的大语言模型实例。 """system_prompt=""" 你是减脂系统优化与复盘分析师。 目标是持续迭代计划,提升减脂效果。 工作内容: 1. 每周/每月复盘计划执行与减脂效果。 2. 分析有效与无效部分,定位问题。 3. 优化用户模型与饮食运动策略。 4. 向导师智能体提供长期调整建议。 5. 让整个系统越用越精准高效。 """super().__init__(name="SystemOptimize",llm=llm,system_prompt=system_prompt)# agent_tool.py""" AgentTool: 将 SimpleAgent 包装为 Tool,实现直接调用 这是比 A2A 协议更简单的多智能体模式 """fromhello_agentsimportSimpleAgentfromhello_agents.toolsimportToolfromtypingimportDict,AnyclassAgentTool(Tool):"""将一个 SimpleAgent 包装为可被其他 Agent 调用的工具"""def__init__(self,agent:SimpleAgent,name:str,description:str):""" Args: agent: 要包装的 SimpleAgent 实例 name: 工具名称 description: 工具描述 """self.agent=agent self._name=name self._description=description@propertydefname(self)->str:returnself._name@propertydefdescription(self)->str:returnself._descriptiondefget_parameters(self)->list:"""定义工具参数"""fromhello_agents.tools.baseimportToolParameterreturn[ToolParameter(name="query",type="string",description="发送给智能体的查询或指令",required=True)]defrun(self,parameters:Dict[str,Any])->str:"""执行工具 - 直接调用被包装的 agent"""query=parameters.get('query','')ifnotquery:return"错误:需要提供 query 参数"try:# 直接调用 agent 的 run 方法returnself.agent.run(query)exceptExceptionase:returnf"调用{self.name}时出错:{str(e)}"# code_runner.pyimportioimportcontextlibfromhello_agents.toolsimportToolfromtypingimportDict,AnyclassCodeRunner(Tool):""" 安全执行 Python 代码并返回输出的工具。 警告:此工具使用 exec(),在生产环境中不安全。 对于真实产品,请使用 Docker 等沙箱环境。 """def__init__(self):super().__init__(name="code_runner",description="执行 Python 代码并返回标准输出/错误。输入应为包含 'code' 键的字典。")defget_parameters(self)->Dict[str,Any]:return{"type":"object","properties":{"code":{"type":"string","description":"要执行的 Python 代码片段"}},"required":["code"]}defrun(self,parameters:Dict[str,Any])->str:code=parameters.get("code","")ifnotcode:return"错误:未提供代码。"# 捕获标准输出和标准错误stdout_capture=io.StringIO()stderr_capture=io.StringIO()try:withcontextlib.redirect_stdout(stdout_capture),contextlib.redirect_stderr(stderr_capture):# 创建受限的全局作用域safe_globals={"__builtins__":__builtins__,"print":print,"range":range,"len":len,# 根据需要添加更多安全的内置函数}exec(code,safe_globals)output=stdout_capture.getvalue()errors=stderr_capture.getvalue()result=""ifoutput:result+=f"输出:\n{output}\n"iferrors:result+=f"错误:\n{errors}\n"ifnotresult:result="代码执行成功,无输出。"returnresultexceptExceptionase:returnf"运行时错误:{str(e)}"# app.pyimporttimeimportstreamlitasstfrommainimporttutor st.title("减肥助理")st.divider()if"agent"notinst.session_state:st.session_state["agent"]=tutorif"messages"notinst.session_state:st.session_state["messages"]=[]formessagesinst.session_state["messages"]:st.chat_message(messages["role"]).write(messages["content"])prompt=st.chat_input("请输入您的问题...")ifprompt:st.chat_message("user").write(prompt)st.session_state["messages"].append({"role":"user","content":prompt})response=[]withst.spinner("思考中..."):result=st.session_state["agent"].run(prompt)defstream_response(result:str):""" 流式输出助手回复 :param result: 要输出的字符串 """msg=st.chat_message("assistant")holder=msg.empty()text=""forcinresult:text+=c holder.write(text)time.sleep(0.01)stream_response(result)st.session_state["messages"].append({"role":"assistant","content":result})st.rerun()# main.pyimportosfromdotenvimportload_dotenvfromhello_agentsimportHelloAgentsLLMfromsrc.agent.MentorAgentimportTutorAgent# 加载环境变量load_dotenv()# 初始化 LLM# 从环境变量读取配置(正确写法,没有 .from_env())llm=HelloAgentsLLM(api_key=os.getenv("OPENAI_API_KEY"),base_url=os.getenv("LLM_BASE_URL"),model=os.getenv("LLM_MODEL_ID"))# 创建导师智能体tutor=TutorAgent(llm)运行代码
在命令行中运行下面代码即可运行,并打开web网页。
streamlit run app.py下面是运行起来的界面:
总结
本次项目开发的核心是复用成熟的多智能体框架,适配垂直领域需求,并通过前端降低使用门槛。
后续我还计划接入更多健康数据接口(如体脂秤、运动手环),加入工具的使用,让智能减肥助理更 “懂用户”。如果你也对多智能体应用开发感兴趣,不妨从 HelloAgents 框架入手,结合自己感兴趣的领域,打造属于自己的智能助手!
