当一个任务太复杂单个 Agent 难以胜任时你可以创建多个各司其职的 Agent让它们像团队一样协作。为什么需要多 Agent单个 Agent 的问题system_prompt 太长会导致模型注意力分散工具太多会增加模型选择工具的出错概率不同类型的任务需要不同的专业知识和行为风格多 Agent 的方案每个 Agent 专注于一个领域通过协作完成复杂任务。方式 1子 Agent 作为工具将 Agent 编译成 CompiledStateGraph然后作为一个工具注册给父 Agent实例from dotenv import load_dotenvload_dotenv()from langchain.tools import toolfrom langchain.agents import create_agentfrom langchain.chat_models import init_chat_modelfrom langchain.messages import HumanMessagemodel init_chat_model(deepseek:deepseek-v4-flash, temperature0)# 子 Agent 1天气专家tooldef get_weather(city: str) - str:查询天气data {杭州: 晴25°C, 北京: 多云18°C}return data.get(city, f{city}: 数据暂缺)weather_agent create_agent(modelmodel,tools[get_weather],nameweather_expert, # 名字用于标识和日志system_prompt你是天气专家专门回答天气相关问题。回答要简洁。,)# 子 Agent 2计算专家tooldef calculate(expression: str) - str:计算数学表达式result eval(expression, {__builtins__: {}}, {})return f{expression} {result}math_agent create_agent(modelmodel,tools[calculate],namemath_expert,system_prompt你是数学专家专门进行数学计算。回答要简洁。,)# 父 Agent协调者# 将子 Agent 作为工具注册tooldef ask_weather_expert(question: str) - str:向天气专家咨询天气相关问题。Args:question: 关于天气的问题result weather_agent.invoke({messages: [HumanMessage(contentquestion)]})return result[messages][-1].contenttooldef ask_math_expert(question: str) - str:向数学专家咨询数学计算问题。Args:question: 数学计算问题result math_agent.invoke({messages: [HumanMessage(contentquestion)]})return result[messages][-1].contentcoordinator create_agent(modelmodel,tools[ask_weather_expert, ask_math_expert],system_prompt你是协调助手。根据用户问题选择合适的专家- 天气相关问题 → 使用 ask_weather_expert- 数学计算问题 → 使用 ask_math_expert- 如果同时涉及多个领域依次咨询各个专家,)# 测试复合问题result coordinator.invoke({messages: [HumanMessage(content杭州今天天气怎么样如果温度是 25 度换算成华氏度是多少公式华氏度 摄氏度 × 9/5 32)]})print(result[messages][-1].content)运行结果根据天气专家的查询杭州今天晴天气温25°C。 换算成华氏度25 × 9/5 32 77°F。 所以杭州今天25°C相当于77°F天气晴好。方式 2用 name 参数区分 Agent当你将子 Agent 作为工具嵌入时设置 name 参数有助于追踪消息来源实例# name 参数的作用# 1. 编译后的图中使用该名称# 2. 作为子图节点嵌入父图时使用该名称# 3. 所有 AI 消息被标记为该名称agent create_agent(modelmodel,tools[...],namecustomer_service, # 给 Agent 命名)方式 3Middleware 实现 Agent 路由更复杂的多 Agent 场景可以通过 Middleware 实现动态路由实例from langchain.agents.middleware import before_model# 定义不同专家使用的工具集general_tools [tool_a, tool_b]admin_tools [tool_c, tool_d]before_modeldef route_by_user_role(state, runtime):根据用户角色动态切换可用工具context runtime.contextif context is None:return Noneuser_role context.get(user_role, user)# 不同角色看到不同的工具if user_role admin:available_tools general_tools admin_toolselse:available_tools general_tools# 注意before_model 不能直接修改 tools# 需要配合 wrap_model_call 或 request.override 来实现return None多 Agent 架构模式模式结构适用场景协调者模式一个父 Agent → 多个子 Agent 工具任务类型明确可分类接力模式Agent A 的输出 → Agent B 的输入流水线式处理生成→审核→润色辩论模式多个 Agent 并行输出 → 汇总决策需要多角度分析的问题多 Agent 系统增加了复杂度和 Token 消耗。不要为了多 Agent而多 Agent——先用单个 Agent 良好设计的 system_prompt 和 Middleware 解决问题。只有当确实需要领域隔离或独立上下文时才引入多 Agent。