基于 HelloAgents 框架开发智能减肥助理:从多智能体架构到 Streamlit 前端落地

在 AI 应用开发的浪潮下,基于智能体(Agent)的个性化助手系统成为了热门方向。此前接触到基于 HelloAgents 框架开发的智能编程导师项目后,我受到启发,结合健康管理领域的需求,开发了一款智能减肥助理系统—— 不仅复用了多智能体协同的核心架构,还通过 Streamlit 搭建了友好的前端界面,让个性化减肥指导触手可及。

项目背景:为什么做智能减肥助理?

博主最近也在减肥减脂,主要靠跑步,过程中发现很多减肥问题很难靠自己解决,于是基于 HelloAgents 多智能体框架,做了一个智能减肥助理,还加了 Streamlit 前端界面,用起来更直观。

功能特点

🎯 核心功能
个性化减肥规划:根据用户的身高、体重、体脂率、运动基础、饮食偏好,制定分阶段的减肥计划(含目标拆解、周期规划);
智能饮食推荐:结合每日热量需求,推荐适配口味、易获取的食材 / 餐单,支持热量计算、营养配比分析;
运动方案定制:根据用户体能、时间、场地(居家 / 健身房),推荐针对性运动,含动作指导、强度调整建议;
进度跟踪与反馈:支持用户记录每日饮食 / 运动 / 体重数据,智能体分析进度并动态调整方案,给出鼓励或改进建议。

🤖 多智能体架构设计

复用 HelloAgents 的 Agent-to-Agent(A2A)协同模式,构建了分工明确的智能体体系

  • MentorAgent(总导师):负责理解用户整体减脂需求,统筹调度所有子智能体,整合各模块输出。
  • DietPlanningAgent(饮食规划助手):根据用户的身体数据、饮食偏好与减脂目标,制定科学的个性化饮食方案。
  • DietRecordAgent(饮食记录助手):解析用户提交的饮食记录,统计每日热量摄入与营养成分,识别饮食行为模式。
  • ExercisePlanningAgent(运动规划助手):结合用户体能水平、运动习惯与减脂目标,定制适配的运动方案。
  • ExerciseDataAnomalyAgent(运动数据异常助手):识别运动强度不足、过度运动或数据偏差等异常情况,给出调整提示。
  • BodyDataTrendAgent(身体数据趋势助手):跟踪用户体重、体脂等关键指标的变化趋势,评估减脂进度。
  • ComplianceMotivationAgent(依从性激励助手):分析用户的执行情况,通过正向激励、个性化鼓励与行为引导,提升用户减脂计划的依从性。
  • HealthRiskWarnAgent(健康风险预警助手) :结合用户的身体数据、饮食与运动情况,识别潜在的健康风险,并给出安全提示。
  • SleepMetabolismAgent(睡眠与代谢助手):关联用户的睡眠情况与代谢水平,分析睡眠对减脂效率的影响。
  • SystemOptimizeAgent(系统优化助手):基于用户的长期数据反馈,动态优化其他智能体的输出策略,让方案随用户状态变化持续迭代。

下面是项目的整个目录

在这里插入图片描述

环境配置与安装

  1. 环境要求
    Python 3.8+
    HelloAgents 框架(Github链接
  2. 安装依赖
pip install hello-agents[all]>=0.2.7 streamlit jupyterlab python-dotenv
  1. 配置环境变量
    创建.env文件,配置 LLM 模型相关参数(这里使用的阿里百炼平台,链接:阿里百炼平台),注册账号得到API_key。
# LLM 模型配置
LLM_MODEL_ID=qwen-plus                                          # 可以自己选模型
LLM_API_KEY=your_api_key_here                                   # 配置自己的API_key
LLM_BASE_URL=https://api-inference.modelscope.cn/v1									
LLM_TIMEOUT=60

文件代码

# MentorAgent.py

from hello_agents import SimpleAgent, HelloAgentsLLM
from typing import Dict, Any

from src.agent.BodyDataTrendAgent import BodyDataTrendAgent
from src.agent.ComplianceMotivationAgent import ComplianceMotivationAgent
from src.agent.DietPlanningAgent import DietPlanningAgent
from src.agent.ExerciseDataAnomalyAgent import ExerciseDataAnomalyAgent
from src.agent.ExercisePlanningAgent import ExercisePlanningAgent
from src.agent.HealthRiskWarnAgent import HealthRiskWarnAgent
from src.agent.SleepMetabolismAgent import SleepMetabolismAgent
from src.agent.SystemOptimizeAgent import SystemOptimizeAgent

from src.tools.agent_tool import AgentTool

class TutorAgent(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.py

from hello_agents import SimpleAgent, HelloAgentsLLM


class BodyDataTrendAgent(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.py

from hello_agents import SimpleAgent, HelloAgentsLLM


class ComplianceMotivationAgent(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.py

from hello_agents import SimpleAgent, HelloAgentsLLM


class DietPlanningAgent(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.py

from hello_agents import SimpleAgent, HelloAgentsLLM


class DietRecordAgent(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.py

from hello_agents import SimpleAgent, HelloAgentsLLM


class ExerciseDataAnomalyAgent(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.py

from hello_agents import SimpleAgent, HelloAgentsLLM


class ExercisePlanningAgent(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.py

from hello_agents import SimpleAgent, HelloAgentsLLM


class HealthRiskWarnAgent(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.py

from hello_agents import SimpleAgent, HelloAgentsLLM


class SleepMetabolismAgent(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.py

from hello_agents import SimpleAgent, HelloAgentsLLM


class SystemOptimizeAgent(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 协议更简单的多智能体模式
"""
from hello_agents import SimpleAgent
from hello_agents.tools import Tool
from typing import Dict, Any

class AgentTool(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
    
    @property
    def name(self) -> str:
        return self._name
    
    @property
    def description(self) -> str:
        return self._description
    
    def get_parameters(self) -> list:
        """定义工具参数"""
        from hello_agents.tools.base import ToolParameter
        return [
            ToolParameter(
                name="query",
                type="string",
                description="发送给智能体的查询或指令",
                required=True
            )
        ]
    
    def run(self, parameters: Dict[str, Any]) -> str:
        """执行工具 - 直接调用被包装的 agent"""
        query = parameters.get('query', '')
        
        if not query:
            return "错误:需要提供 query 参数"
        
        try:
            # 直接调用 agent 的 run 方法
            return self.agent.run(query)
        except Exception as e:
            return f"调用 {self.name} 时出错: {str(e)}"

# code_runner.py


import io
import contextlib
from hello_agents.tools import Tool
from typing import Dict, Any

class CodeRunner(Tool):
    """
    安全执行 Python 代码并返回输出的工具。
    警告:此工具使用 exec(),在生产环境中不安全。
    对于真实产品,请使用 Docker 等沙箱环境。
    """
    
    def __init__(self):
        super().__init__(
            name="code_runner",
            description="执行 Python 代码并返回标准输出/错误。输入应为包含 'code' 键的字典。"
        )

    def get_parameters(self) -> Dict[str, Any]:
        return {
            "type": "object",
            "properties": {
                "code": {
                    "type": "string",
                    "description": "要执行的 Python 代码片段"
                }
            },
            "required": ["code"]
        }

    def run(self, parameters: Dict[str, Any]) -> str:
        code = parameters.get("code", "")
        if not code:
            return "错误:未提供代码。"

        # 捕获标准输出和标准错误
        stdout_capture = io.StringIO()
        stderr_capture = io.StringIO()

        try:
            with contextlib.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 = ""
            if output:
                result += f"输出:\n{output}\n"
            if errors:
                result += f"错误:\n{errors}\n"
            
            if not result:
                result = "代码执行成功,无输出。"
                
            return result

        except Exception as e:
            return f"运行时错误: {str(e)}"

# app.py

import time

import streamlit as st
from main import tutor

st.title("减肥助理")
st.divider()

if "agent" not in st.session_state:
	st.session_state["agent"] = tutor

if "messages" not in st.session_state:
	st.session_state["messages"] = []

for messages in st.session_state["messages"]:
	st.chat_message(messages["role"]).write(messages["content"])

prompt = st.chat_input("请输入您的问题...")

if prompt:
	st.chat_message("user").write(prompt)
	st.session_state["messages"].append({"role": "user", "content": prompt})

	response = []
	with st.spinner("思考中..."):
		result = st.session_state["agent"].run(prompt)


		def stream_response(result: str):
			"""
			流式输出助手回复
			:param result: 要输出的字符串
			"""
			msg = st.chat_message("assistant")
			holder = msg.empty()

			text = ""
			for c in result:
				text += c
				holder.write(text)
				time.sleep(0.01)


		stream_response(result)
		st.session_state["messages"].append({"role": "assistant", "content": result})

		st.rerun()

# main.py

import os
from dotenv import load_dotenv
from hello_agents import HelloAgentsLLM
from src.agent.MentorAgent import TutorAgent

# 加载环境变量
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 框架入手,结合自己感兴趣的领域,打造属于自己的智能助手!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐