本文基于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)
returnindented = "\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:
returngraph_id = ns[-1].split(":")[0]
print(f"Update from subgraph {graph_id}:")
print("\n")
is_subgraph = Truefor node_name, node_update in update.items():
update_label = f"Update from node {node_name}:"
if is_subgraph:
update_label = "\t" + update_labelprint(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 ChatOpenAImodel = 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: add7
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: multiply21
Update from node agent:
================================== Ai Message ==================================
Name: math_agent21
4.基于组件构建监督者架构多智能体
使用anggraph-supervisor库直接创建监督者并与前面两个智能体共同构建成监督体架构的多智能体,具体代码如下:
from langgraph_supervisor import create_supervisor
from langchain.chat_models import init_chat_modelsupervisor = 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_agentSuccessfully 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_agentSuccessfully 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_agentSuccessfully 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_messagesclass 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_agentSuccessfully 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_agentSuccessfully 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_agentSuccessfully 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任美国总统。
1430

被折叠的 条评论
为什么被折叠?



