HyperAIHyperAI

Command Palette

Search for a command to run...

构建多代理健康助手:使用LangGraph、Qwen和Streamlit提升你的体能、营养和心理健康

如何构建一个多智能体监督系统:LangGraph、Qwen与Streamlit的结合 智能体是能够感知环境并采取行动实现特定目标的自主实体。在这篇文章中,我们将探讨如何构建一个多智能体系统,当单一智能体无法处理复杂任务时,可以通过多个智能体协同工作来解决问题。我们具体构建的是一款AI健康助手系统,包括三个智能体:健身智能体、营养智能体和心理健康智能体。这些智能体将在监督智能体的协调下工作,以改善用户的健康状态。 监督架构 在系统的核心位置,监督智能体扮演着协调者的作用。它接收用户输入,识别合适的智能体来处理每个任务部分,并分配任务。例如,如果用户说:“我想变得更健康和吃得更健康”,监督智能体会将请求传递给健身智能体和营养智能体,然后收集它们的响应,向用户提供统一的反馈。 实施步骤 步骤1:安装 要本地使用Qwen,首先需要安装Ollama,一个允许在机器上直接运行大规模语言模型(LLM)的工具。 1. 下载并安装Ollama,选择与你的操作系统兼容的版本。 2. 验证安装是否成功:ollama -v 3. 拉取Qwen模型:ollama pull qwen2.5:14b 步骤2:设置API密钥 我们的系统依赖API-Ninjas和Spoonacular提供的外部API,获取健身和营养数据。 1. 注册这两个平台的免费账户,获取API密钥。 2. 将密钥存储在.env文件中,格式如下: EXERCISE_API_KEY=xxxxxxxx DIET_API_KEY=xxxxxxxxxxxx 步骤3:创建状态 为了管理多智能体系统的对话历史和任务传递,我们需要设置一个状态管理类。我们将使用LangGraph的MessagesState类来实现这一点。 步骤4:创建自定义工具 健身工具 通过API-Ninjas获取不同类型的锻炼数据,并生成个性化的健身计划。 ```python class FitnessData: def init(self): self.base_url = "https://api.api-ninjas.com/v1/exercises" self.api_key = os.getenv("EXERCISE_API_KEY") def fetch_exercises(self, type, muscle, difficulty): headers = {'X-Api-Key': self.api_key} params = {'type': type, 'muscle': muscle, 'difficulty': difficulty} try: response = requests.get(self.base_url, headers=headers, params=params) result = response.json() if not result: print(f"No exercises found for {muscle}") return result except requests.RequestException as e: print(f"Request failed: {e}") return [] 将这个工具注册为LangChain的自定义工具:python @tool def fitness_data_tool(query): """用此工具获取用户所需的健身计划。""" fitness_tool = FitnessData() result = fitness_tool.generate_workout_plan(query) return result ``` 营养工具 利用Spoonacular API生成符合用户饮食偏好的膳食计划,并提供每日营养成分的详细信息。 ```python class Dietitian: def init(self): self.base_url = "https://api.spoonacular.com" self.api_key = os.getenv("DIET_API_KEY") def fetch_meal(self, time_frame="day", diet="None"): url = f"{self.base_url}/mealplanner/generate" params = {"timeFrame": time_frame, "diet": diet, "apiKey": self.api_key} response = requests.get(url, params=params) if not response: print('Meal Plan not found') return response.json() def generate_meal_plan(self, query): meals_processed = [] meal_plan = self.fetch_meal(query) meals = meal_plan.get('meals') nutrients = meal_plan.get('nutrients') for i, meal in enumerate(meals): recipe_info = self.get_recipe_information(meal.get('id')) ingredients = [ingredient['original'] for ingredient in recipe_info.get('extendedIngredients')] meals_processed.append(f" Meal {i+1}: {meal.get('title')}") meals_processed.append(f"准备时间: {meal.get('readyInMinutes')}分钟") meals_processed.append(f"份量: {meal.get('servings')}份") meals_processed.append("食材:\n" + "\n".join(ingredients)) meals_processed.append("做法:\n" + recipe_info.get('instructions')) meals_processed.append("每天摄入的营养:\n" f"蛋白质: {nutrients.get('protein', 'N/A')}克\n" f"脂肪: {nutrients.get('fat', 'N/A')}克\n" f"碳水化合物: {nutrients.get('carbohydrates', 'N/A')}克") return meals_processed 注册为自定义工具:python @tool def diet_tool(query): """用此工具获取用户的饮食计划。""" dietitian_tool = Dietitian() result = dietitian_tool.generate_meal_plan(query) return result ``` 心理健康工具 定义心理健康智能体的任务,提供简单的心理健康建议或减压练习。 python def mental_health_node(state): prompt = PromptTemplate.from_template( """你是支持性的心理健康教练。任务是提供一条独特的心理健康建议或减压练习。建议要简单、温和且有用,避免重复。""" ) chain = prompt | llm response = chain.invoke(state) return Command( update={ "messages": [ AIMessage(content=f"这是你的健康建议:{response.content}", name="wellness") ] }, goto="supervisor", ) 步骤5:定义大型语言模型 使用Qwen2.5:14b模型作为智能体的“大脑”。 python llm = ChatOllama(model="qwen2.5:14b") memory = MemorySaver() 步骤6:创建智能体与节点 健身智能体:定义提示,使智能体只回答与健身相关的问题,并配置生成健身计划的节点。 营养智能体:定义提示,使智能体只回答与饮食相关的查询,并配置生成膳食计划的节点。 心理健康智能体:配置节点,根据自定义提示生成心理健康建议,并传递给监督智能体。 步骤7:构建多智能体工作流图 将各节点添加到工作流图中,设置监督节点为起点。 python builder = StateGraph(State) builder.add_edge(START, "supervisor") builder.add_node("supervisor", supervisor_node) builder.add_node("fitness", fitness_node) builder.add_node("dietitian", dietitian_node) builder.add_node("wellness", mental_health_node) graph = builder.compile(checkpointer=memory) 步骤8:测试多智能体系统 编写一个辅助函数解析输出,并测试系统对用户输入的响应。 ```python def parse_langgraph_output(stream): results = [] for key, value in stream.items(): if key == "supervisor": continue messages = value.get("messages", []) for msg in messages: if isinstance(msg, str): results.append((key, msg)) elif isinstance(msg, AIMessage): results.append((key, msg.content)) return results 用户输入 inputs = { "messages": [ HumanMessage(content="给我一些月度健康建议?") ], } for step in graph.stream(inputs): final_event = step response_message = parse_langgraph_output(final_event) for agent, content in response_message: print(f"智能体: {agent}\n{content}\n{'='*50}") ``` 行业评价与公司背景 多智能体监督系统在健康管理领域的应用具有巨大潜力,尤其是在个性化服务方面。Qwen2.5:14b模型的引入显著提升了系统的智能化水平,而LangGraph和Streamlit则提供了强大的技术支持。这种方案不仅提高了用户体验,还为开发者提供了一个灵活且可扩展的框架,适用于多种应用场景。Qwen是阿里云开发的大规模语言模型,广泛应用于自然语言处理任务;LangGraph和Streamlit则是开源工具,分别用于构建语言处理流程和创建互动式应用。通过这一组合,开发者可以高效地构建复杂的多智能体系统。

相关链接