文章目录
- 协议的本质区别:工具VS代理
- 多智能体架构
- A2A案例
协议的本质区别:工具VS代理
在AI技术快速发展的今天,两个关键协议正在重塑我们构建智能系统的方式,这两个协议代表了AI架构发展的不同维度,但它们共同指向一个未来:我们正从确定性编程转向自主协作系统。
- Agent-to-Agent协议(A2A)
- Model Context Protocol(MCP)
MCP:本质上是关于工具访问的协议。它定义了大语言模型如何与各种工具、数据和资源交互的标准方式,简单来说**,MCP让AI能够使用各种功能,就像程序员调用函数一样。**
A2A:则专注于代理协作。它建立了智能代理之间相互发现、交流和合作的方式,使得不同的Al系统能够像人类团队一样协同工作。
多智能体架构
LangChain体系中,
- LangChain主要集成了和大语言模型的交互能力。
- LangGraph主要实现复杂的流程调度。
将这两个能力结合起来,就可以实现一个多智能体架构(Multi-Agent Architecture),它不是让一个大模型“无所不能”,而是通过多个专精的Agent协作来完成更复杂的任务。
单智能体:
结构:
一个LLM+工具集合
LLM决定是否调用工具,自己完成所有逻辑
使用场景:
简单对话助手
单一领域(天气查询、SQL问答、知识库QA)
例子:
“查询北京天气” -> LLM调用get_weather()
“翻译一句话” -> LLM 调用translator()
案例:
from langchain.agentsimportcreate_agentfrom langchain.chat_modelsimportinit_chat_modelfrom langchain_core.messagesimportHumanMessagefrom lang_chain.configimportOPENAI_API_KEY# 单智能体 # 定义工具 defget_weather(city:str)->str:"""查询指定城市的天气情况。"""returnf'今天{city}的天气是晴天' # 定义大模型 llm=init_chat_model(model="deepseek-chat",model_provider="deepseek",api_key=OPENAI_API_KEY,base_url="https://api.deepseek.com")# 使用LangGraph创建Agentagent=create_agent(model=llm,# 添加模型 tools=[get_weather],# 添加工具)human_message=HumanMessage(content="今天北京的天气如何?")response=agent.invoke({"messages":[human_message]})print(response["messages"][-1].content)多智能体:
在LangGraph里,Agent就是一个可调用的节点,通常封装了一个LLM+工具调用逻辑。
多智能体架构 = 多个Agent节点组成一个图(Graph),它们通过消息传递、条件跳转(command/send)和记忆(Memory)协作。
对比:
- 单智能体:一个大模型,负责所有决策
- 多智能体:多个小模型/角色,分工明确,互相调用
好处:
- 解耦复杂任务:每个Agent只解决自己领域的问题。
- 可扩展:可以动态增加新Agent。
- 更可控:通过人类干预闭环(HITL)、时间回溯(Time Travel)管理执行流程。
六大典型架构:
- Network(网络):每个智能体都可以与其他任何智能体进行通信。任何智能体都可以决定下一步调用哪个其他智能体,类似“去中心化网络”
应用场景:
- 多视角协作 - 并行搜索信息 - 研究讨论类场景- Supervisor(主管):包含一个主管智能体,每个智能体都与一个主管智能体进行通信。主管智能体决定下一步应该调用哪个智能体。【为主】
应用场景:
- 企业助手(IT、HR、财务等不同领域) - 智能客服(分配给不同领域专家)- Supervisoras tools(主管as工具调用):主管架构的一种特殊情况。单个智能体可以被表示为工具。主管智能体使用一个支持工具调用的LLM来决定调用哪个智能体工具,以及传递给这些智能体的参数。
应用场景:
- 当一LLM核心,但可以调用领域专家 - 类似插件系统(copilot + 插件)- Hierarchical(层级式):包含多层的Supervisor架构,每一层都有自己的主管,类似于公司的组织架构(GM-总监-组长-员工)
应用场景:
- 大型任务拆解(项目管理、复杂管道任务) - AI公司/部门结构模拟- Custom(自定义):使用LangGraph提供的灵活的图结构和条件边,可以自定义各种执行流,比较灵活,使用的也最多。
应用场景:
- 高度定制的企业级AI应用 - 多步骤、多部门、多数据源场景A2A案例
案例1:supervisor(主管)
from langchain.agentsimportcreate_agentfrom langchain.chat_modelsimportinit_chat_modelfrom langchain_core.messagesimportAIMessage,HumanMessagefrom langgraph_supervisorimportcreate_supervisorfrom lang_chain.configimportOPENAI_API_KEY#1.初始化大语言模型 llm=init_chat_model(model="deepseek-chat",model_provider="deepseek",api_key=OPENAI_API_KEY,base_url="https://api.deepseek.com",)#2.定义工具 defbook_flight(from_airport:str,to_airport:str):"""预订从出发地到目的地的航班。""" return f'成功预定从{from_airport}到{to_airport}的航班' def book_hotel(hotel_name: str): """预订指定名称的酒店。"""returnf'成功预定{hotel_name}的住宿' #3.创建子agent flight_assistant=create_agent(model=llm,tools=[book_flight],name="flight_assistant")hotel_assistant=create_agent(model=llm,tools=[book_hotel],name="hotel_assistant",)#4.主agent:调度主管 supervisor=create_supervisor(agents=[flight_assistant,hotel_assistant],model=llm,prompt=("你是一个智能任务调度主管,负责调度多个智能助手完成用户请求。\n""工作流程:\n""1.分析用户需求提取任务\n""2.先调用工具flight_assistant完成航班预订任务\n""3.再调用工具hotel_assistant完成酒店预订任务\n""4.返回结果,向用户汇报结果\n""注意:""每个助手只能调用1次,不要重复内容""只能使用中文,不要输出任何原文"),).compile()if__name__=="__main__":print("智能旅行调度系统")# mock输入数据 input_data={"messages":[HumanMessage(content="我想从北京去上海出差,在希尔顿酒店预定一间标准间,价格不要超过500元")]}forchunk in supervisor.stream(input_data):foragent_name,output in chunk.items():ifoutput isNone:continueformsg in output.get("messages",[]):ifisinstance(msg,AIMessage)and msg.content:print(f"[{agent_name}]: {msg.content}")print("-"*50)案例2:handoff(交接)