langgraph创建监督者架构多智能体

        本文基于MCP创建监督者架构多智能体,首先基于langgraph_supervisor库中的create_supervisor创建监督者智能体,然后部分手搓实现监督者架构多智能体,最后再说明如何简化智能体之间交接时的数据传递。

     1.输出工具

        为了查看调用时对状态数据的更新,先定义个工具函数pretty_print_messages:

from langchain_core.messages import convert_to_messages

def pretty_print_message(message, indent=False):
    pretty_message = message.pretty_repr(html=True)
    if not indent:
        print(pretty_message)
        return

    indented = "\n".join("\t" + c for c in pretty_message.split("\n"))
    print(indented)


def pretty_print_messages(update, last_message=False):
    is_subgraph = False
    if isinstance(update, tuple):
        ns, update = update
        if len(ns) == 0:
            return

        graph_id = ns[-1].split(":")[0]
        print(f"Update from subgraph {graph_id}:")
        print("\n")
        is_subgraph = True

    for node_name, node_update in update.items():
        update_label = f"Update from node {node_name}:"
        if is_subgraph:
            update_label = "\t" + update_label

        print(update_label)
        print("\n")

        messages = convert_to_messages(node_update["messages"])
        if last_message:
            messages = messages[-1:]

        for m in messages:
            pretty_print_message(m, indent=is_subgraph)
        print("\n")

      2.搜索智能体

        基于langgraph中的MCP中的远程MCP服务定义搜索智能体,具体代码如下:

from langgraph.prebuilt import create_react_agent
from langchain_mcp_adapters.client import MultiServerMCPClient
from langchain_openai import ChatOpenAI

model = ChatOpenAI(
    model = 'qwen-plus',
    api_key = "sk-*",
    base_url = "https://dashscope.aliyuncs.com/compatible-mode/v1")

client1 = MultiServerMCPClient(
    {
        "search": {
            "url": "http://localhost:8000/mcp/",
            "transport": "streamable_http",
        }
    }
)
tools1 = await client1.get_tools()#调用远程服务获取工具集

search_agent = create_react_agent(#使用create_react_agent创建searct_agent智能体
    model=model,
    tools=tools1,
    prompt=(
        "你是一个搜索引擎智能体\n\n"
        "指令:\n"
        "-仅执行从互联网搜索相关人物,而不执行任何其他任务\n"
        "-完成搜索后,直接给监督者智能体返回应答\n"
        "-返回的应答中仅包括搜索结果,不能包含其他信息"
    ),
    name="search_agent",
)

        调用该智能体查询当前美国总统是谁:

async for chunk in  search_agent.astream({'messages':[{'role':'user', 'content':'美国现任总统是谁?'}]}):
    pretty_print_messages(chunk)

        输出如下:

Update from node agent:


================================== Ai Message ==================================
Name: search_agent
Tool Calls:
  search_internet (call_335ed5f613534499a6340b)
 Call ID: call_335ed5f613534499a6340b
  Args:
    query: 美国现任总统是谁


Update from node tools:


================================= Tool Message =================================
Name: search_internet

{
  "query": "美国现任总统是谁",
  "follow_up_questions": null,
  "answer": null,
  "images": [],
  "results": [
    {
      "url": "https://zh.wikipedia.org/zh-hans/%E7%BE%8E%E5%9B%BD%E6%80%BB%E7%BB%9F",
      "title": "美国总统- 维基百科,自由的百科全书",
      "content": "现任(第47任)美国总统是唐纳德·特朗普,于2025年1月20日上任。 自首任总统华盛顿就职以来,美国在230余年间共产生了47任总统,其中仅第44任总统贝拉克·奥巴马拥有一半非裔血",
      "score": 0.98513,
      "raw_content": null
    },
    {
      "url": "https://baike.baidu.com/item/%E7%BE%8E%E5%9B%BD%E6%80%BB%E7%BB%9F/521627",
      "title": "美国总统_百度百科",
      "content": "| 16 | 亚伯拉罕·林肯 | 亚伯拉罕·林肯 | 1861年3月4日-1865年4月15日 任内逝世 | 共和党 | 19、20 | | 25 | 威廉·麦金莱 | 威廉·麦金莱 | 1897年3月4日-1901年9月14日 任内逝世 | 共和党 | 28、29 | | 26 | 西奥多·罗斯福 | 西奥多·罗斯福 | 1901年9月14日 继任 -1909年3月4日 | 共和党 | 29、30 | | 30 | 卡尔文·柯立芝 | 卡尔文·柯立芝 | 1923年8月2日 继任 -1929年3月4日 | 共和党 | 34、35 | | 32 | 富兰克林·罗斯福 | 富兰克林·罗斯福 | 1933年3月4日-1945年4月12日 任内逝世 | 民主党 | 37、38、  39、40 | | 34 | 德怀特·艾森豪威尔 | 德怀特·艾森豪威尔 | 1953年1月20日-1961年1月20日 | 共和党 | 42、43 | | 36 | 林登·约翰逊 | 林登·约翰逊 | 1963年11月22日 继任 -1969年1月20日 | 民主党 | 44、45 | | 40 | 罗纳德·里根 | 罗纳德·里根 | 1981年1月20日-1989年1月20日 | 共和党 | 49、50 |",
      "score": 0.98396,
      "raw_content": null
    }
  ],
  "response_time": 1.76,
  "request_id": "dabc5fa9-588e-4590-b34b-738ee458c59b"
}


Update from node agent:


================================== Ai Message ==================================
Name: search_agent

美国现任总统是唐纳德·特朗普,于2025年1月20日上任。


 

      3.计算器智能体

        基于langgraph中的MCP中的本地MCP服务创建计算器智能体,具体代码如下:

client2 = MultiServerMCPClient(
    {
        "math": {
            "command": "python",
            "args": ["./math_server.py"],
            "transport": "stdio",
        },
    }
)
tools2 = await client2.get_tools()

math_agent = create_react_agent(#使用create_react_agent创建math_agent智能体
    model=model,
    tools=tools2,
    prompt=(
        "你是一个简单的计算器.\n\n"
        "指令:\n"
        "- 仅执行数学计算相关人物\n"
        "- 完成计算人物后,直接给监督者智能体返回应答\n"
        "- 返回的应答中仅包括计算结果,不能包含其他信息."
    ),
    name="math_agent",
)

  

        调用计算器智能体计算(5+2)*3,具体代码如下:

async for chunk in  math_agent.astream({'messages':[{'role':'user', 'content':'what is result of (5+2)*3?'}]}):
    pretty_print_messages(chunk)

        运行结果如下:

Update from node agent:


================================== Ai Message ==================================
Name: math_agent
Tool Calls:
  add (call_01a7c9dc2e1f42df8c9cda)
 Call ID: call_01a7c9dc2e1f42df8c9cda
  Args:
    a: 5
    b: 2


Update from node tools:


================================= Tool Message =================================
Name: add

7


Update from node agent:


================================== Ai Message ==================================
Name: math_agent
Tool Calls:
  multiply (call_9a711b40236c4bf9a5ab03)
 Call ID: call_9a711b40236c4bf9a5ab03
  Args:
    a: 7
    b: 3


Update from node tools:


================================= Tool Message =================================
Name: multiply

21


Update from node agent:


================================== Ai Message ==================================
Name: math_agent

21


 

    4.基于组件构建监督者架构多智能体

        使用anggraph-supervisor库直接创建监督者并与前面两个智能体共同构建成监督体架构的多智能体,具体代码如下:

from langgraph_supervisor import create_supervisor
from langchain.chat_models import init_chat_model

supervisor = create_supervisor(
    model=model,
    agents=[search_agent, math_agent],#智能专业智能体
    prompt=(
        "你是一个监督者智能体并且管理两个专业智能体:\n"
        "- search agent 搜索引擎智能体. 把网络搜索相关任务分配给该智能体\n"
        "- math agent 计算器智能体. 把数学计算相关人物分配给该智能体\n"
        "  每次仅指派一个智能体,不需要进行并行调用两个智能体.\n"
        "你自己不需要做任何其他的事情."
    ),

    #从专业智能体返回监督者时是否增加(AIMessage, ToolMessage) 到对话历史中
    add_handoff_back_messages=True,
    output_mode="full_history",
).compile()

        调用该多智能体,具体代码如下:

async for chunk in  supervisor.astream({'messages':[{'role':'user', 'content':'美国现任总统是谁?'}]}):
    pretty_print_messages(chunk)

        运行结果如:

Update from node supervisor:


================================ Human Message =================================

美国现任总统是谁?
================================== Ai Message ==================================
Name: supervisor
Tool Calls:
  transfer_to_search_agent (call_8507aabbae624729a0ba4f)
 Call ID: call_8507aabbae624729a0ba4f
  Args:
================================= Tool Message =================================
Name: transfer_to_search_agent

Successfully transferred to search_agent


Update from node search_agent:


================================ Human Message =================================

美国现任总统是谁?
================================== Ai Message ==================================
Name: supervisor
Tool Calls:
  transfer_to_search_agent (call_8507aabbae624729a0ba4f)
 Call ID: call_8507aabbae624729a0ba4f
  Args:
================================= Tool Message =================================
Name: transfer_to_search_agent

Successfully transferred to search_agent
================================== Ai Message ==================================
Name: search_agent
Tool Calls:
  search_internet (call_a3cf7e7ff079439ea43497)
 Call ID: call_a3cf7e7ff079439ea43497
  Args:
    query: 美国现任总统
================================= Tool Message =================================
Name: search_internet

{
  "query": "美国现任总统",
  "follow_up_questions": null,
  "answer": null,
  "images": [],
  "results": [
    {
      "url": "https://zh.wikipedia.org/zh-hans/%E7%BE%8E%E5%9B%BD%E6%80%BB%E7%BB%9F",
      "title": "美国总统- 维基百科,自由的百科全书",
      "content": "现任(第47任)美国总统是唐纳德·特朗普,于2025年1月20日上任。 自首任总统华盛顿就职以来,美国在230余年间共产生了47任总统,其中仅第44任总统贝拉克·奥巴马拥有一半非裔血",
      "score": 0.86767644,
      "raw_content": null
    },
    {
      "url": "https://baike.baidu.com/item/%E5%94%90%E7%BA%B3%E5%BE%B7%C2%B7%E7%89%B9%E6%9C%97%E6%99%AE/9916449",
      "title": "唐纳德·特朗普_百度百科",
      "content": "美国优先 惠特尼·库明斯 惠特尼·库明斯(Whitney Cummings),1982年9月4日出出生,演员、编剧、制片人,代表作品有《滑稽六人组》。 :   Donald John Trump 别    名 性    别 学    位 学    历 (The Kew Forest School) (The Trump Organization) (Trump Tower) 》。 (Trump University) (The Jeffersons) 》。 此外,他还开办了自己的电台节目《Trumped!》。 .2025-06-20 .2025-06-21 .界面新闻 .2025-06-22 .2025-06-23 .界面新闻 .2025-06-24 .财联社 .2025-06-24 .2025-06-24 .2025-06-25 .2025-06-25 .2025-06-25 .2025-06-25 .央视新闻-百家号 .界面新闻 .2025-06-25 .央视新闻 .2025-06-25 .财联社-百家号 .2025-06-26 .2025-06-25 .2025-06-26 * 869这场北约峰会:一个“国际玩笑”火了 美国优先 欧洲议题遭无视 .2025-06-27 .界面新闻 .界面新闻 .界面新闻 .界面新闻 .央视新闻 .财联社 . 界面新闻 .央视新闻 .央视新闻 .界面新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 * 939特朗普:8月1日起对加拿大进口商品征收35%关税 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 * 957特朗普官宣:与印尼达成贸易协议将对其征收19%关税 .财联社 .界面新闻 * 968特朗普否认致信爱泼斯坦 .界面新闻 .界面新闻 * 970特朗普否认致信爱泼斯坦 称《华尔街日报》刊登“伪造信件” .界面新闻 .央视新闻 .央视新闻 .央视新闻 . 澎湃新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .财联社 .界面新闻 .央视新闻 .央视新闻 .财联社 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .界面新闻-百家号",
      "score": 0.5689194,
      "raw_content": null
    }
  ],
  "response_time": 0.0,
  "request_id": "11f469c4-fad4-473e-b07d-b41bfbe93f16"
}
================================== Ai Message ==================================
Name: search_agent

美国现任总统是唐纳德·特朗普,于2025年1月20日就任第47任总统。


Update from node supervisor:


================================ Human Message =================================

美国现任总统是谁?
================================== Ai Message ==================================
Name: supervisor
Tool Calls:
  transfer_to_search_agent (call_8507aabbae624729a0ba4f)
 Call ID: call_8507aabbae624729a0ba4f
  Args:
================================= Tool Message =================================
Name: transfer_to_search_agent

Successfully transferred to search_agent
================================== Ai Message ==================================
Name: search_agent
Tool Calls:
  search_internet (call_a3cf7e7ff079439ea43497)
 Call ID: call_a3cf7e7ff079439ea43497
  Args:
    query: 美国现任总统
================================= Tool Message =================================
Name: search_internet

{
  "query": "美国现任总统",
  "follow_up_questions": null,
  "answer": null,
  "images": [],
  "results": [
    {
      "url": "https://zh.wikipedia.org/zh-hans/%E7%BE%8E%E5%9B%BD%E6%80%BB%E7%BB%9F",
      "title": "美国总统- 维基百科,自由的百科全书",
      "content": "现任(第47任)美国总统是唐纳德·特朗普,于2025年1月20日上任。 自首任总统华盛顿就职以来,美国在230余年间共产生了47任总统,其中仅第44任总统贝拉克·奥巴马拥有一半非裔血",
      "score": 0.86767644,
      "raw_content": null
    },
    {
      "url": "https://baike.baidu.com/item/%E5%94%90%E7%BA%B3%E5%BE%B7%C2%B7%E7%89%B9%E6%9C%97%E6%99%AE/9916449",
      "title": "唐纳德·特朗普_百度百科",
      "content": "美国优先 惠特尼·库明斯 惠特尼·库明斯(Whitney Cummings),1982年9月4日出出生,演员、编剧、制片人,代表作品有《滑稽六人组》。 :   Donald John Trump 别    名 性    别 学    位 学    历 (The Kew Forest School) (The Trump Organization) (Trump Tower) 》。 (Trump University) (The Jeffersons) 》。 此外,他还开办了自己的电台节目《Trumped!》。 .2025-06-20 .2025-06-21 .界面新闻 .2025-06-22 .2025-06-23 .界面新闻 .2025-06-24 .财联社 .2025-06-24 .2025-06-24 .2025-06-25 .2025-06-25 .2025-06-25 .2025-06-25 .央视新闻-百家号 .界面新闻 .2025-06-25 .央视新闻 .2025-06-25 .财联社-百家号 .2025-06-26 .2025-06-25 .2025-06-26 * 869这场北约峰会:一个“国际玩笑”火了 美国优先 欧洲议题遭无视 .2025-06-27 .界面新闻 .界面新闻 .界面新闻 .界面新闻 .央视新闻 .财联社 . 界面新闻 .央视新闻 .央视新闻 .界面新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 * 939特朗普:8月1日起对加拿大进口商品征收35%关税 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 * 957特朗普官宣:与印尼达成贸易协议将对其征收19%关税 .财联社 .界面新闻 * 968特朗普否认致信爱泼斯坦 .界面新闻 .界面新闻 * 970特朗普否认致信爱泼斯坦 称《华尔街日报》刊登“伪造信件” .界面新闻 .央视新闻 .央视新闻 .央视新闻 . 澎湃新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .财联社 .界面新闻 .央视新闻 .央视新闻 .财联社 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .界面新闻-百家号",
      "score": 0.5689194,
      "raw_content": null
    }
  ],
  "response_time": 0.0,
  "request_id": "11f469c4-fad4-473e-b07d-b41bfbe93f16"
}
================================== Ai Message ==================================
Name: search_agent

美国现任总统是唐纳德·特朗普,于2025年1月20日就任第47任总统。
================================== Ai Message ==================================
Name: supervisor

美国现任总统是唐纳德·特朗普,他于2025年1月20日就职,成为美国第47任总统。

 

     5.部分手搓实现监督者架构多智能体

        部分手搓包括两个工作,第一是通过增加工具实现智能体之间的跳转,第二是需要使用三个智能体创建图。

      5.1创建跳转工具

        为了实现从监督者智能体跳转到专业智能体,专门给监督者智能体挂载两个工具,分别执行跳转到两个专业智能体的操作。以下代码首先定义create_handoff_tool方法,该方法作为一个工具工厂,可根据传入的参数生成目的地不同的工具。

from typing import Annotated
from langchain_core.tools import tool, InjectedToolCallId
from langgraph.prebuilt import InjectedState
from langgraph.graph import StateGraph, START, MessagesState
from langgraph.types import Command

#create_handoff_tool用于生成跳转到下一节点的工具
def create_handoff_tool(*, agent_name: str, description: str | None = None):
    name = f"jump_to_{agent_name}"
    description = description or f"Ask {agent_name} for help."

    @tool(name, description=description)#使用@tool注解
    def handoff_tool(
        state: Annotated[MessagesState, InjectedState],
        tool_call_id: Annotated[str, InjectedToolCallId],
    ) -> Command:
        tool_message = {
            "role": "tool",
            "content": f"Successfully jumped to {agent_name}",
            "name": name,
            "tool_call_id": tool_call_id,
        }
        return Command(
            goto=agent_name,  

            """

            update数据用于更新历史数据。

            跳转时携带更新后的历史数据

            """
            update={"messages": state["messages"] + [tool_message]},  
            graph=Command.PARENT,  #需要指定在父图中跳转,而不是智能体内部跳转
        )

    return handoff_tool

#创建跳转到搜索智能体的工具
jump_to_search_agent_tool = create_handoff_tool(
    agent_name="search_agent",
    description="jump to a search agent.",
)

#创建跳转到计算器智能体的工具

jump_to_math_agent_tool = create_handoff_tool(
    agent_name="math_agent",
    description="jump to a math agent.",

      5.2创建监督者智能体

        使用create_react_agent创建监督者智能体,具体代码如下:

supervisor_agent = create_react_agent(
    model=model,

    #绑定前面生成的两个跳转工具
    tools=[jump_to_search_agent_tool, jump_to_math_agent_tool],
    prompt=(
        "你是一个监督者智能体并且管理两个专业智能体:\n"
        "- search agent 搜索引擎智能体. 把网络搜索相关任务分配给该智能体\n"
        "- math agent 计算器智能体. 把数学计算相关人物分配给该智能体\n"
        "  每次仅指派一个智能体,不需要进行并行调用两个智能体.\n"
        "你自己不需要做任何其他的事情."
    ),
    name="supervisor",
)

      5.3组合多智能体

        基于图构建监督者架构多智能体,具体代码如下:

from langgraph.graph import END
from typing import Annotated
from typing_extensions import TypedDict
from langgraph.graph.message import add_messages

class State(TypedDict):
    messages: Annotated[list, add_messages]
# Define the multi-agent supervisor graph
supervisor = (
    StateGraph(State)
    .add_node(supervisor_agent, destinations=("search_agent", "math_agent", END))
    .add_node(search_agent)
    .add_node(math_agent)
    .add_edge(START, "supervisor")
    .add_edge("search_agent", "supervisor")
    .add_edge("math_agent", "supervisor")
    .compile()
)

        调用该多智能体:

async for chunk in  supervisor.astream({'messages':[{'role':'user', 'content':'美国现任总统是谁?'}]}):
    pretty_print_messages(chunk)

        输出如下:

Update from node supervisor:


================================ Human Message =================================

美国现任总统是谁?
================================== Ai Message ==================================
Name: supervisor
Tool Calls:
  jump_to_search_agent (call_ecea04692747405aa78fc1)
 Call ID: call_ecea04692747405aa78fc1
  Args:
================================= Tool Message =================================
Name: jump_to_search_agent

Successfully jumped to search_agent


Update from node search_agent:


================================ Human Message =================================

美国现任总统是谁?
================================== Ai Message ==================================
Name: supervisor
Tool Calls:
  jump_to_search_agent (call_ecea04692747405aa78fc1)
 Call ID: call_ecea04692747405aa78fc1
  Args:
================================= Tool Message =================================
Name: jump_to_search_agent

Successfully jumped to search_agent
================================== Ai Message ==================================
Name: search_agent
Tool Calls:
  search_internet (call_b9f2a210d781442bbeb321)
 Call ID: call_b9f2a210d781442bbeb321
  Args:
    query: 美国现任总统是谁
================================= Tool Message =================================
Name: search_internet

{
  "query": "美国现任总统是谁",
  "follow_up_questions": null,
  "answer": null,
  "images": [],
  "results": [
    {
      "url": "https://zh.wikipedia.org/zh-hans/%E7%BE%8E%E5%9B%BD%E6%80%BB%E7%BB%9F",
      "title": "美国总统- 维基百科,自由的百科全书",
      "content": "现任(第47任)美国总统是唐纳德·特朗普,于2025年1月20日上任。 自首任总统华盛顿就职以来,美国在230余年间共产生了47任总统,其中仅第44任总统贝拉克·奥巴马拥有一半非裔血",
      "score": 0.87807417,
      "raw_content": null
    },
    {
      "url": "https://baike.baidu.com/item/%E5%94%90%E7%BA%B3%E5%BE%B7%C2%B7%E7%89%B9%E6%9C%97%E6%99%AE/9916449",
      "title": "唐纳德·特朗普_百度百科",
      "content": "美国优先 惠特尼·库明斯 惠特尼·库明斯(Whitney Cummings),1982年9月4日出出生,演员、编剧、制片人,代表作品有《滑稽六人组》。 :   Donald John Trump 别    名 性    别 学    位 学    历 (The Kew Forest School) (The Trump Organization) (Trump Tower) 》。 (Trump University) (The Jeffersons) 》。 此外,他还开办了自己的电台节目《Trumped!》。 .2025-06-20 .2025-06-21 .界面新闻 .2025-06-22 .2025-06-23 .界面新闻 .2025-06-24 .财联社 .2025-06-24 .2025-06-24 .2025-06-25 .2025-06-25 .2025-06-25 .2025-06-25 .央视新闻-百家号 .界面新闻 .2025-06-25 .央视新闻 .2025-06-25 .财联社-百家号 .2025-06-26 .2025-06-25 .2025-06-26 * 869这场北约峰会:一个“国际玩笑”火了 美国优先 欧洲议题遭无视 .2025-06-27 .界面新闻 .界面新闻 .界面新闻 .界面新闻 .央视新闻 .财联社 . 界面新闻 .央视新闻 .央视新闻 .界面新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 * 939特朗普:8月1日起对加拿大进口商品征收35%关税 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 * 957特朗普官宣:与印尼达成贸易协议将对其征收19%关税 .财联社 .界面新闻 * 968特朗普否认致信爱泼斯坦 .界面新闻 .界面新闻 * 970特朗普否认致信爱泼斯坦 称《华尔街日报》刊登“伪造信件” .界面新闻 .央视新闻 .央视新闻 .央视新闻 . 澎湃新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .财联社 .界面新闻 .央视新闻 .央视新闻 .财联社 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .界面新闻-百家号",
      "score": 0.55998856,
      "raw_content": null
    }
  ],
  "response_time": 0.0,
  "request_id": "f9923510-4a52-4ba3-b3b4-b400f5c61290"
}
================================== Ai Message ==================================
Name: search_agent

美国现任总统是唐纳德·特朗普,于2025年1月20日就任第47任美国总统。


Update from node supervisor:


================================ Human Message =================================

美国现任总统是谁?
================================== Ai Message ==================================
Name: supervisor
Tool Calls:
  jump_to_search_agent (call_ecea04692747405aa78fc1)
 Call ID: call_ecea04692747405aa78fc1
  Args:
================================= Tool Message =================================
Name: jump_to_search_agent

Successfully jumped to search_agent
================================== Ai Message ==================================
Name: search_agent
Tool Calls:
  search_internet (call_b9f2a210d781442bbeb321)
 Call ID: call_b9f2a210d781442bbeb321
  Args:
    query: 美国现任总统是谁
================================= Tool Message =================================
Name: search_internet

{
  "query": "美国现任总统是谁",
  "follow_up_questions": null,
  "answer": null,
  "images": [],
  "results": [
    {
      "url": "https://zh.wikipedia.org/zh-hans/%E7%BE%8E%E5%9B%BD%E6%80%BB%E7%BB%9F",
      "title": "美国总统- 维基百科,自由的百科全书",
      "content": "现任(第47任)美国总统是唐纳德·特朗普,于2025年1月20日上任。 自首任总统华盛顿就职以来,美国在230余年间共产生了47任总统,其中仅第44任总统贝拉克·奥巴马拥有一半非裔血",
      "score": 0.87807417,
      "raw_content": null
    },
    {
      "url": "https://baike.baidu.com/item/%E5%94%90%E7%BA%B3%E5%BE%B7%C2%B7%E7%89%B9%E6%9C%97%E6%99%AE/9916449",
      "title": "唐纳德·特朗普_百度百科",
      "content": "美国优先 惠特尼·库明斯 惠特尼·库明斯(Whitney Cummings),1982年9月4日出出生,演员、编剧、制片人,代表作品有《滑稽六人组》。 :   Donald John Trump 别    名 性    别 学    位 学    历 (The Kew Forest School) (The Trump Organization) (Trump Tower) 》。 (Trump University) (The Jeffersons) 》。 此外,他还开办了自己的电台节目《Trumped!》。 .2025-06-20 .2025-06-21 .界面新闻 .2025-06-22 .2025-06-23 .界面新闻 .2025-06-24 .财联社 .2025-06-24 .2025-06-24 .2025-06-25 .2025-06-25 .2025-06-25 .2025-06-25 .央视新闻-百家号 .界面新闻 .2025-06-25 .央视新闻 .2025-06-25 .财联社-百家号 .2025-06-26 .2025-06-25 .2025-06-26 * 869这场北约峰会:一个“国际玩笑”火了 美国优先 欧洲议题遭无视 .2025-06-27 .界面新闻 .界面新闻 .界面新闻 .界面新闻 .央视新闻 .财联社 . 界面新闻 .央视新闻 .央视新闻 .界面新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 * 939特朗普:8月1日起对加拿大进口商品征收35%关税 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 * 957特朗普官宣:与印尼达成贸易协议将对其征收19%关税 .财联社 .界面新闻 * 968特朗普否认致信爱泼斯坦 .界面新闻 .界面新闻 * 970特朗普否认致信爱泼斯坦 称《华尔街日报》刊登“伪造信件” .界面新闻 .央视新闻 .央视新闻 .央视新闻 . 澎湃新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .财联社 .界面新闻 .央视新闻 .央视新闻 .财联社 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .界面新闻-百家号",
      "score": 0.55998856,
      "raw_content": null
    }
  ],
  "response_time": 0.0,
  "request_id": "f9923510-4a52-4ba3-b3b4-b400f5c61290"
}
================================== Ai Message ==================================
Name: search_agent

美国现任总统是唐纳德·特朗普,于2025年1月20日就任第47任美国总统。
================================== Ai Message ==================================
Name: supervisor

美国现任总统是唐纳德·特朗普,他于2025年1月20日就任第47任美国总统。

 

      6.简化交接数据

        在基于组件构建监督者架构多智能体时,调用create_supervisor时的参数 add_handoff_back_messages设置为True,手搓时调用Command交接时的update={**state, "messages": state["messages"] + [tool_message]}中的第二参数,目的都是在监督者跳转到专业智能体时携带所有的历史对话数据,实际上很多情况下不是必须的,比如调用搜索智能体时,仅需要告诉搜索智能体需要搜索的问题即可,从而可以减少令牌的消耗,如何实现呢?可以在监督者智能体内借助大模型确定交接到下一智能体时数据。

        6.1优化工具工厂

         在工具方法中,在Command中使用Send直接传递数据到目的节点。

from langgraph.types import Send


def create_task_description_handoff_tool(
    *, agent_name: str, description: str | None = None
):
    name = f"transfer_to_{agent_name}"
    description = description or f"Ask {agent_name} for help."

    @tool(name, description=description)
    def handoff_tool(
       #监督者调用工具时传入
        task_description: Annotated[
            str,
            "Description of what the next agent should do, including all of the relevant context.",
        ],
        # 下一个智能体将忽略state的内容
        state: Annotated[MessagesState, InjectedState],
    ) -> Command:
        task_description_message = {"role": "user", "content": task_description}
        agent_input = {"messages": [task_description_message]}
        return Command(

           #进入下一个智能体时仅传入task_description_message
            goto=[Send(agent_name, agent_input)],
            graph=Command.PARENT,
        )

    return handoff_tool

      6.2创建跳转工具

        从优化后的工具工厂生成两个工具,分别用于跳转到两个专家智能体,具体代码如下:‘

assign_to_search_agent_with_description = create_task_description_handoff_tool(
    agent_name="search_agent",
    description="jump  to a searche agent.",
)

assign_to_math_agent_with_description = create_task_description_handoff_tool(
    agent_name="math_agent",
    description="jump to a math agent.",
)

      6.3创建监督者智能体

        创建监督者智能体,绑定前一步创建的两个工具,具体代码如下:

supervisor_agent_with_description = create_react_agent(
    model=model,
    tools=[
        jump_to_search_agent_with_description,
        jump_to_math_agent_with_description,
    ],
    prompt=(
        "你是一个监督者智能体并且管理两个专业智能体:\n"
        "- search agent 搜索引擎智能体. 把网络搜索相关任务分配给该智能体\n"
        "- math agent 计算器智能体. 把数学计算相关人物分配给该智能体\n"
        "  每次仅指派一个智能体,不需要进行并行调用两个智能体.\n"
        "你自己不需要做任何其他的事情."
    ),
    name="supervisor",
)

      6.4组合多智能体

        使用图组合创建监督者架构多智能体,具体代码如下:

supervisor_with_description = (
    StateGraph(MessagesState)
    .add_node(
        supervisor_agent_with_description, destinations=("search_agent", "math_agent")
    )
    .add_node(search_agent)
    .add_node(math_agent)
    .add_edge(START, "supervisor")
    .add_edge("search_agent", "supervisor")
    .add_edge("math_agent", "supervisor")
    .compile()

        调用该多智能体:

async for chunk in  supervisor_with_description.astream(
    {'messages':[{'role':'user', 'content':'美国现任总统是谁?'}]},
    subgraphs=True,
):
    pretty_print_messages(chunk, last_message=True)

        输出结果如下:

Update from subgraph supervisor:


    Update from node agent:


    ================================== Ai Message ==================================
    Name: supervisor
    Tool Calls:
      transfer_to_search_agent (call_8fdd714a6ecb43e68a1fe8)
     Call ID: call_8fdd714a6ecb43e68a1fe8
      Args:
        task_description: 查询美国现任总统是谁


Update from subgraph search_agent:


    Update from node agent:


    ================================== Ai Message ==================================
    Name: search_agent
    Tool Calls:
      search_internet (call_6710f84b6e1b4a119609af)
     Call ID: call_6710f84b6e1b4a119609af
      Args:
        query: 美国现任总统是谁


Update from subgraph search_agent:


    Update from node tools:


    ================================= Tool Message =================================
    Name: search_internet
    
    {
      "query": "美国现任总统是谁",
      "follow_up_questions": null,
      "answer": null,
      "images": [],
      "results": [
        {
          "url": "https://zh.wikipedia.org/zh-hans/%E7%BE%8E%E5%9B%BD%E6%80%BB%E7%BB%9F",
          "title": "美国总统- 维基百科,自由的百科全书",
          "content": "现任(第47任)美国总统是唐纳德·特朗普,于2025年1月20日上任。 自首任总统华盛顿就职以来,美国在230余年间共产生了47任总统,其中仅第44任总统贝拉克·奥巴马拥有一半非裔血",
          "score": 0.87807417,
          "raw_content": null
        },
        {
          "url": "https://baike.baidu.com/item/%E5%94%90%E7%BA%B3%E5%BE%B7%C2%B7%E7%89%B9%E6%9C%97%E6%99%AE/9916449",
          "title": "唐纳德·特朗普_百度百科",
          "content": "美国优先 惠特尼·库明斯 惠特尼·库明斯(Whitney Cummings),1982年9月4日出出生,演员、编剧、制片人,代表作品有《滑稽六人组》。 :   Donald John Trump 别    名 性    别 学    位 学    历 (The Kew Forest School) (The Trump Organization) (Trump Tower) 》。 (Trump University) (The Jeffersons) 》。 此外,他还开办了自己的电台节目《Trumped!》。 .2025-06-20 .2025-06-21 .界面新闻 .2025-06-22 .2025-06-23 .界面新闻 .2025-06-24 .财联社 .2025-06-24 .2025-06-24 .2025-06-25 .2025-06-25 .2025-06-25 .2025-06-25 .央视新闻-百家号 .界面新闻 .2025-06-25 .央视新闻 .2025-06-25 .财联社-百家号 .2025-06-26 .2025-06-25 .2025-06-26 * 869这场北约峰会:一个“国际玩笑”火了 美国优先 欧洲议题遭无视 .2025-06-27 .界面新闻 .界面新闻 .界面新闻 .界面新闻 .央视新闻 .财联社 . 界面新闻 .央视新闻 .央视新闻 .界面新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 * 939特朗普:8月1日起对加拿大进口商品征收35%关税 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 * 957特朗普官宣:与印尼达成贸易协议将对其征收19%关税 .财联社 .界面新闻 * 968特朗普否认致信爱泼斯坦 .界面新闻 .界面新闻 * 970特朗普否认致信爱泼斯坦 称《华尔街日报》刊登“伪造信件” .界面新闻 .央视新闻 .央视新闻 .央视新闻 . 澎湃新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .财联社 .界面新闻 .央视新闻 .央视新闻 .财联社 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .央视新闻 .界面新闻-百家号",
          "score": 0.55998856,
          "raw_content": null
        }
      ],
      "response_time": 0.0,
      "request_id": "f2972da7-1327-47c9-9a15-92e87c9a4b99"
    }


Update from subgraph search_agent:


    Update from node agent:


    ================================== Ai Message ==================================
    Name: search_agent
    
    美国现任总统是唐纳德·特朗普,于2025年1月20日就任第47任美国总统。


Update from subgraph supervisor:


    Update from node agent:


    ================================== Ai Message ==================================
    Name: supervisor
    
    美国现任总统是唐纳德·特朗普,他于2025年1月20日就任第47任美国总统。

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值