从零构建多智能体协作系统:基于LangChain的A2A通信实战指南
最近在尝试构建一个多智能体系统时发现让不同的AI Agent协同工作是个不小的挑战。单个Agent能力有限而让它们相互通信、传递信息、协作完成任务才能发挥出更大的价值。网上关于Agent间通信A2A的资料要么过于理论化要么就是框架复杂对新手不太友好。本文将从一个极简的Demo入手手把手带你理解Agent2AgentA2A通信的核心概念与实现方式。无论你是刚接触AI Agent开发还是想为现有系统添加多Agent协作能力这篇从零到一的实战指南都能让你快速上手并提供一个可直接复用的代码模板。1. 背景与核心概念为什么需要Agent间通信在深入代码之前我们有必要厘清几个核心概念。这能帮助你理解我们到底在解决什么问题。什么是AI Agent简单来说AI Agent智能体是一个能够感知环境、进行决策并执行行动以实现特定目标的软件实体。它通常由一个大语言模型LLM驱动具备规划、工具调用、记忆等能力。一个翻译Agent可以帮你翻译文本一个数据分析Agent可以帮你处理表格。那么什么是Agent2AgentA2A通信当单个Agent无法独立完成一个复杂任务时我们就需要多个Agent各司其职共同协作。A2A通信就是指这些独立Agent之间进行信息交换、任务传递和状态同步的机制。它就像是一个软件开发团队产品经理Agent A将需求传递给后端工程师Agent B后端工程师完成开发后再通知前端工程师Agent C进行联调。A2A解决了什么问题能力解耦与复用将复杂系统拆分为多个单一职责的Agent每个Agent可以独立开发、测试和复用。例如一个专门负责SQL生成的Agent可以被多个数据分析场景调用。处理复杂工作流对于涉及多个步骤和决策点的任务如调研、规划、写作、审核可以通过A2A构建一个自动化流水线。提升系统可靠性单个Agent可能出错或遇到知识盲区。通过A2A其他Agent可以对其进行校验、补充或接管提高整体任务的鲁棒性。常见的A2A通信模式请求-响应式Agent A 向 Agent B 发送一个明确的请求并等待其返回结果。这是最常见的方式类似函数调用。发布-订阅式多个Agent订阅某个“主题”或“事件”。当有Agent发布了相关消息所有订阅者都会收到。适合广播通知或事件驱动场景。黑板模式所有Agent共享一个公共的“黑板”存储区。Agent可以将中间结果写在黑板上其他Agent从中读取所需信息进行处理。适合协作式问题求解。我们的Demo将聚焦于最直观的请求-响应式通信通过一个简单的“任务协调者”与“任务执行者”的例子来展开。2. 环境准备与版本说明为了确保Demo能够顺利运行我们需要搭建一个基础的Python开发环境并安装必要的库。本文的示例将使用LangChain和OpenAI的API因为它们生态成熟易于上手。核心环境与工具操作系统Windows 10/11, macOS, 或 Linux (Ubuntu 20.04) 均可。Python版本 3.8。推荐使用 3.9 或 3.10 以获得最佳兼容性。包管理工具pip。代码编辑器VS Code, PyCharm 或任何你熟悉的编辑器。LLM服务你需要一个OpenAI API Key。如果没有可以去OpenAI官网注册获取。本文示例使用gpt-3.5-turbo模型成本较低适合实验。创建项目与安装依赖首先创建一个新的项目目录并在其中初始化虚拟环境这能有效隔离项目依赖。# 创建项目目录并进入 mkdir a2a_demo cd a2a_demo # 创建虚拟环境 (以venv为例) python -m venv venv # 激活虚拟环境 # Windows: venv\Scripts\activate # macOS/Linux: source venv/bin/activate激活虚拟环境后命令行提示符前通常会显示(venv)。接下来安装核心依赖pip install langchain langchain-openai python-dotenvlangchain: 提供了构建Agent所需的核心框架和工具。langchain-openai: LangChain官方维护的OpenAI集成包用于调用GPT模型。python-dotenv: 用于从.env文件加载环境变量如API Key避免将敏感信息硬编码在代码中。项目结构预览完成后的简易项目结构如下所示a2a_demo/ ├── .env # 存储环境变量API Key ├── simple_a2a.py # 主程序实现基础A2A通信 ├── orchestrated_a2a.py # 进阶程序实现带协调者的A2A └── README.md # 项目说明可选配置API Key在项目根目录下创建.env文件并填入你的OpenAI API Key。# .env 文件内容 OPENAI_API_KEY你的实际API密钥重要提示请务必将.env文件添加到.gitignore中切勿提交到版本控制系统以免密钥泄露。3. 核心原理与架构拆解在动手编码前我们先从高层视角看看我们将要构建的A2A系统是如何工作的。理解这个流程能让你在写每一行代码时都知道其目的。我们将实现一个两层架构协调者Agent (Coordinator Agent)负责接收用户的最初指令理解整体任务并将其分解成子任务。然后它需要决定将哪个子任务派发给哪个执行者Agent并管理它们之间的交互顺序。执行者Agent (Worker Agent)负责执行具体的、专业化的子任务。例如一个负责网络搜索一个负责代码编写一个负责文本总结。它们接收来自协调者的指令执行后返回结果。通信流程请求-响应用户输入 | v 协调者Agent (分析、规划、分解) | v 协调者 - 执行者A (发送任务请求) | v 执行者A - 协调者 (返回结果) | v 协调者 - 执行者B (发送下一个任务请求可能依赖A的结果) | v 执行者B - 协调者 (返回结果) | v 协调者 - 用户 (汇总并返回最终结果)LangChain中的实现关键点在LangChain中一个Agent通常由以下几部分组成LLM大脑负责理解和生成。Tools手脚是Agent可以调用的具体函数如搜索、计算、查询数据库。AgentExecutor运行引擎它驱动LLM根据当前对话历史和可用工具进行思考决定是调用工具还是直接回复用户。要实现A2A核心就在于让一个Agent协调者能够把另一个Agent执行者或其工具当作自己的“工具”来调用。这可以通过Tool类的封装来实现。我们将把一个执行者Agent的调用逻辑包装成一个Tool这样协调者Agent就能像使用普通搜索工具一样“使用”另一个Agent。4. 完整实战案例一基础A2A通信我们先从一个最简单的例子开始创建两个独立的Agent并让其中一个直接调用另一个。这个例子不涉及复杂的任务分解旨在让你熟悉Agent作为Tool的基本封装方法。假设我们有两个Agent翻译Agent专门将中文翻译成英文。总结Agent专门总结英文文本。我们的目标是让用户输入一段中文先由翻译Agent翻译然后由总结Agent对翻译后的英文进行总结最后输出中文总结。4.1 创建基础Agent工具函数首先我们分别创建翻译和总结这两个功能函数。在实际的LangChain Agent中它们会被封装成Tool。# simple_a2a.py import os from langchain_openai import ChatOpenAI from langchain.agents import Tool, AgentExecutor, create_react_agent from langchain.prompts import PromptTemplate from langchain.schema import SystemMessage from dotenv import load_dotenv # 加载环境变量中的API Key load_dotenv() # 初始化LLM我们使用gpt-3.5-turbo llm ChatOpenAI(modelgpt-3.5-turbo, temperature0) # 1. 定义翻译工具函数 def translate_chinese_to_english(text: str) - str: 将中文文本翻译成英文。 prompt f请将以下中文内容翻译成英文只返回英文翻译结果不要添加任何解释\n\n{text} response llm.invoke(prompt) return response.content # 2. 定义总结工具函数 def summarize_english_text(text: str) - str: 总结英文文本。 prompt f请用一句英文简要总结以下文本的主要内容只返回总结结果\n\n{text} response llm.invoke(prompt) return response.content # 3. 将函数封装成LangChain Tool translate_tool Tool( nameChineseToEnglishTranslator, functranslate_chinese_to_english, description将中文翻译成英文。输入是中文文本输出是英文文本。 ) summarize_tool Tool( nameEnglishTextSummarizer, funcsummarize_english_text, description总结英文文本。输入是英文文本输出是一句英文总结。 )4.2 创建协调者Agent并集成工具现在我们创建一个协调者Agent并将上面两个工具提供给它。这个协调者Agent将根据用户的需求自行决定调用哪个工具、按什么顺序调用。# simple_a2a.py (续) # 4. 为协调者Agent准备工具列表 tools [translate_tool, summarize_tool] # 5. 创建协调者Agent的提示词模板 # ReAct框架的提示词会引导Agent进行“思考-行动-观察”的循环 coordinator_prompt PromptTemplate.from_template( 你是一个任务协调员。你可以使用以下工具 {tools} 请根据用户的需求决定是否需要使用工具以及使用哪个工具。 你的思考过程应该清晰。如果你需要连续使用多个工具请逐步进行。 每次使用工具时必须严格按照工具的description来提供输入。 用户需求{input} 开始首先分析一下用户的需求是什么以及我应该怎么做。 ) # 6. 使用create_react_agent创建Agent coordinator_agent create_react_agent(llm, tools, coordinator_prompt) # 7. 创建Agent执行器 agent_executor AgentExecutor(agentcoordinator_agent, toolstools, verboseTrue, handle_parsing_errorsTrue) # 8. 测试运行 if __name__ __main__: # 用户输入一段中文 user_input 人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。 print(用户输入, user_input) print(\n--- 协调者Agent开始执行 ---\n) result agent_executor.invoke({input: user_input}) print(\n--- 最终输出 ---\n) print(result[output])4.3 运行与结果分析在终端运行这个脚本python simple_a2a.py你会看到类似以下的详细输出verboseTrue会打印思考过程用户输入 人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。 --- 协调者Agent开始执行 --- 进入新的AgentExecutor链... 思考用户给了一段关于人工智能的中文描述。需求可能是想让我处理这段文本。工具里有一个翻译工具和一个总结工具。这段文字是中文而总结工具只处理英文。所以我应该先把它翻译成英文然后再总结。 行动使用工具 ChineseToEnglishTranslator 行动输入人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。 观察Artificial intelligence is a new technical science that studies and develops theories, methods, technologies, and application systems for simulating, extending, and expanding human intelligence. Research in this field includes robotics, speech recognition, image recognition, natural language processing, and expert systems. 思考我已经得到了英文翻译。现在可以使用总结工具对这段英文进行总结了。 行动使用工具 EnglishTextSummarizer 行动输入Artificial intelligence is a new technical science that studies and develops theories, methods, technologies, and application systems for simulating, extending, and expanding human intelligence. Research in this field includes robotics, speech recognition, image recognition, natural language processing, and expert systems. 观察Artificial intelligence is a field of study focused on creating systems that mimic human intelligence, encompassing areas like robotics and language processing. 思考我已经完成了翻译和总结。现在可以给用户最终答案了。 行动最终答案The original Chinese text describes artificial intelligence as a technical science for simulating human intelligence, covering areas such as robotics and NLP. I have translated it to English and summarized it as: “Artificial intelligence is a field of study focused on creating systems that mimic human intelligence, encompassing areas like robotics and language processing.” --- 最终输出 --- The original Chinese text describes artificial intelligence as a technical science for simulating human intelligence, covering areas such as robotics and NLP. I have translated it to English and summarized it as: “Artificial intelligence is a field of study focused on creating systems that mimic human intelligence, encompassing areas like robotics and language processing.”代码解析与A2A体现在这个例子中我们并没有显式地创建两个Agent对象然后让它们对话。相反我们创建了一个“超级”Agent协调者并赋予了它两个能力Tools。协调者内部的LLM通过ReAct框架自行规划依次调用了这两个工具。这本质上是一种“垂直A2A”即协调者直接驱动了底层功能的执行链。然而这还不是真正的“Agent间”通信因为翻译和总结只是简单的函数。接下来我们将把它们升级为具有独立思维和工具的完整Agent。5. 完整实战案例二真正的多Agent协作系统现在我们来构建一个更贴近真实场景的系统。我们将创建两个完全独立的、功能更强的Agent并引入一个明确的协调者来管理它们之间的通信。场景设计假设我们要开发一个“技术博客助手系统”。研究员Agent擅长使用网络搜索工具查找最新的技术资讯。作家Agent擅长根据提供的材料撰写结构清晰、语言流畅的技术博客草稿。协调者Agent接收用户指令如“写一篇关于LangChain最新特性的博客”先命令研究员Agent去搜索资料再将搜索结果交给作家Agent进行创作。5.1 创建独立的执行者Agent首先我们创建研究员和作家这两个执行者Agent。每个Agent都有自己的LLM、工具和提示词。# orchestrated_a2a.py import os from langchain_openai import ChatOpenAI from langchain.agents import Tool, AgentExecutor, create_react_agent from langchain.prompts import PromptTemplate from langchain_community.utilities import DuckDuckGoSearchAPIWrapper from dotenv import load_dotenv load_dotenv() llm ChatOpenAI(modelgpt-3.5-turbo, temperature0.7) # 温度稍高更有创造性 # --- 1. 创建研究员Agent --- print(正在创建研究员Agent...) # 研究员使用一个真实的搜索工具这里用DuckDuckGo作为示例需安装 langchain-community search DuckDuckGoSearchAPIWrapper() def search_online(query: str) - str: 在互联网上搜索信息。 return search.run(query) search_tool Tool( nameWebSearch, funcsearch_online, description用于在互联网上搜索最新信息。输入是一个搜索查询字符串。 ) researcher_prompt PromptTemplate.from_template( 你是一位技术研究员擅长寻找和整理网络信息。 你的任务是根据用户给出的主题或问题使用WebSearch工具查找相关、准确、最新的信息。 搜索时请使用具体、明确的关键词。 将搜索到的信息清晰、有条理地整理好并注明关键信息来源如果工具返回了链接。 直接返回整理后的信息不要添加“根据搜索”等前缀。 用户查询{input} 开始工作 ) researcher_agent create_react_agent(llm, [search_tool], researcher_prompt) researcher_executor AgentExecutor(agentresearcher_agent, tools[search_tool], verboseFalse, handle_parsing_errorsTrue) # --- 2. 创建作家Agent --- print(正在创建作家Agent...) # 作家没有外部工具但拥有强大的写作能力 writer_prompt PromptTemplate.from_template( 你是一位资深技术博客作家文风清晰易懂逻辑严谨。 你的任务是根据用户提供的技术资料和主题撰写一篇技术博客的草稿。 要求 1. 标题吸引人。 2. 包含引言、核心内容可分点、总结。 3. 语言技术性强但不晦涩。 4. 适当使用加粗用**文字**表示强调重点。 5. 字数在500字左右。 直接返回博客草稿不要谈论写作过程。 写作主题和资料 {input} 开始创作 ) # 作家Agent不需要工具直接使用LLM writer_agent create_react_agent(llm, [], writer_prompt) # 工具列表为空 writer_executor AgentExecutor(agentwriter_agent, tools[], verboseFalse, handle_parsing_errorsTrue) print(执行者Agent创建完毕)5.2 将执行者Agent封装为协调者的工具这是实现A2A通信的关键一步。我们需要创建两个特殊的Tool它们的func函数内部会去调用对应的执行者Agent。# orchestrated_a2a.py (续) # --- 3. 将执行者Agent封装成Tool供协调者使用 --- def call_researcher(query: str) - str: 调用研究员Agent进行网络搜索。输入是一个研究主题或问题输出是整理好的信息。 print(f[协调者] 调用研究员Agent查询: {query[:50]}...) result researcher_executor.invoke({input: query}) return result[output] def call_writer(material: str) - str: 调用作家Agent撰写博客草稿。输入是主题和资料输出是博客草稿。 print(f[协调者] 调用作家Agent材料长度: {len(material)} 字符) result writer_executor.invoke({input: material}) return result[output] # 封装成Tool researcher_tool_for_coordinator Tool( nameResearcher, funccall_researcher, description当你需要获取某个技术主题的最新网络信息时使用此工具。输入是一个明确的研究主题或问题。 ) writer_tool_for_coordinator Tool( nameWriter, funccall_writer, description当你拥有足够的技术资料需要将其转化为一篇结构化的技术博客草稿时使用此工具。输入是博客主题和相关的技术资料文本。 )5.3 创建协调者Agent并运行工作流最后创建协调者Agent它将使用我们刚刚封装好的两个“超级工具”。# orchestrated_a2a.py (续) # --- 4. 创建协调者Agent --- print(\n正在创建协调者Agent...) coordinator_tools [researcher_tool_for_coordinator, writer_tool_for_coordinator] coordinator_prompt PromptTemplate.from_template( 你是“技术博客助手系统”的总协调员。你的目标是高效、准确地完成用户的技术博客创作请求。 你可以指挥两位专家 1. Researcher他可以搜索互联网为你收集最新、最相关的技术资料。 2. Writer他是一位优秀的作家可以根据你提供的资料撰写高质量的技术博客草稿。 你的工作流程应该是 1. 分析用户请求明确博客主题和需要搜索的关键点。 2. 调用Researcher工具命令他去搜索与主题相关的关键信息。 3. 收到研究员返回的资料后对其进行审核和整理确保资料可用。 4. 调用Writer工具将博客主题和整理好的资料交给他命令他撰写博客草稿。 5. 将作家返回的最终草稿呈现给用户。 请严格遵循这个流程。每次调用工具时请给出清晰、具体的指令。 用户请求{input} 现在开始分析并执行 ) coordinator_agent create_react_agent(llm, coordinator_tools, coordinator_prompt) coordinator_executor AgentExecutor(agentcoordinator_agent, toolscoordinator_tools, verboseTrue, handle_parsing_errorsTrue) # --- 5. 运行完整A2A工作流 --- if __name__ __main__: user_request 请帮我写一篇关于‘AI Agent在2024年的主要发展趋势’的技术博客。 print(f\n用户请求{user_request}) print(*50) final_result coordinator_executor.invoke({input: user_request}) print(\n *50) print(【系统最终输出】) print(*50) print(final_result[output])5.4 运行与深度解析运行python orchestrated_a2a.py。由于涉及网络搜索执行时间可能稍长。你会看到清晰的层级调用日志协调者启动分析用户请求决定先调用研究员。研究员Agent工作协调者调用ResearcherTool该Tool内部启动researcher_executor研究员Agent开始思考并使用WebSearch工具进行搜索最后整理信息返回。协调者处理结果协调者收到搜索资料进行审核整理。作家Agent工作协调者调用WriterTool该Tool内部启动writer_executor作家Agent根据主题和资料开始创作。协调者返回最终结果协调者将作家生成的博客草稿返回给用户。这才是真正的A2A通信在这个例子中研究员Agent和作家Agent是独立的、自治的实体。它们拥有自己的LLM、提示词和决策逻辑尽管作家没有工具。协调者Agent并不关心研究员内部是如何搜索的也不关心作家是如何组织语言的。它只通过定义好的“工具”接口call_researcher和call_writer函数与它们交互。信息流在三个Agent之间传递用户 - 协调者 - 研究员 - 协调者 - 作家 - 协调者 - 用户。这种架构的优点是高内聚、低耦合。你可以轻易地替换研究员Agent的搜索工具或者为作家Agent增加一个“语法检查”工具而协调者和其他Agent的代码完全不需要改动。6. 常见问题与排查思路在实现A2A系统时你可能会遇到一些典型问题。下表列出了常见问题及其解决方法问题现象可能原因排查与解决思路Agent陷入循环不停调用同一个工具1. 提示词Prompt未明确终止条件。2. Tool的description描述不清导致LLM误解其功能。3. LLM的temperature过低缺乏随机性。1. 在协调者Prompt中强调工作流程和最终目标例如“完成所有步骤后直接给出最终答案”。2. 仔细检查Tool的description确保输入输出描述准确无歧义。3. 适当调高temperature如0.2-0.8让LLM有一定灵活性。Agent错误解析工具输出导致流程中断1. 工具返回的数据格式不符合LLM预期如包含特殊字符、过长。2. AgentExecutor的handle_parsing_errors未设置为True。1. 在封装Tool的函数中对返回结果进行清洗和格式化确保是干净的字符串。2. 确保初始化AgentExecutor时设置了handle_parsing_errorsTrue这能防止解析错误导致程序崩溃。网络搜索等工具调用超时或失败1. 网络问题。2. 第三方API限制或变更。3. 搜索查询过于宽泛或敏感。1. 添加超时和重试机制到工具函数中。2. 使用更稳定的API或备用数据源。3. 在调用前对查询进行预处理或让研究员Agent生成更具体的关键词。多Agent协作效率低下响应慢1. 串行调用导致总耗时为各Agent耗时之和。2. LLM生成速度慢。3. 工具调用如搜索本身慢。1. 评估任务是否可并行化。例如研究员搜索多个子主题时可以并行需更复杂架构。2. 考虑使用更快的模型或配置。3. 为耗时工具添加缓存机制避免重复查询相同内容。协调者无法正确分解复杂任务协调者Agent的能力不足无法理解复杂指令。1. 为协调者提供更详细、更结构化的提示词甚至提供少量示例Few-Shot。2. 升级协调者使用的LLM模型如使用GPT-4。3. 将任务分解逻辑部分硬编码让协调者只负责调度。7. 最佳实践与工程建议将A2A从Demo推向生产环境需要考虑更多工程化细节。以下是一些关键建议1. 设计清晰的Agent契约接口输入/输出标准化定义每个Agent接受和返回数据的明确格式例如JSON Schema。这能极大减少通信错误。工具描述精细化Tool的description是协调者理解其功能的唯一途径。描述应精确说明功能、输入格式和输出示例。差“一个搜索工具。”佳“用于搜索互联网上的最新技术资讯。输入应是一个明确的搜索查询字符串例如‘LangChain 2024 新特性’。输出是整理后的文本摘要包含关键信息点。”2. 实现稳健的错误处理与状态管理超时与重试在封装Agent调用的函数中必须设置超时和有限次数的重试防止单个Agent挂起导致整个系统僵死。优雅降级当某个执行者Agent失败时协调者应有备用方案。例如研究员搜索失败时可以转而查询本地知识库或直接通知用户无法获取最新信息。状态持久化对于长周期任务需要将协调者和各执行者的状态如当前步骤、中间结果持久化到数据库以便在系统重启后能恢复。3. 优化提示词工程角色扮演像我们Demo中那样为每个Agent赋予清晰、具体的角色研究员、作家这能显著提升其专业性。思维链Chain-of-Thought在协调者的Prompt中鼓励其展示思考步骤“首先我需要...然后我应该...”这不仅能提高可解释性也能让LLM做出更合理的规划。提供示例对于复杂或固定的工作流可以在Prompt中提供一两个完整的输入输出示例引导LLM遵循既定模式。4. 关注安全与可控性权限控制不是所有Agent都能调用所有工具。应在协调者或框架层面实现权限检查防止越权操作。输入验证与过滤对用户输入和Agent间传递的数据进行清洗和验证防止Prompt注入攻击或传递恶意指令。人工审核节点在关键流程如发布文章、执行数据库写操作中可以设计一个“人工审核Agent”或直接插入人工审核步骤。5. 监控与可观测性日志记录详细记录每个Agent的输入、输出、工具调用记录和耗时。这对于调试和优化至关重要。链路追踪为每个用户请求生成唯一ID并在所有相关的Agent调用中传递这个ID。这样可以在日志中轻松追溯一个请求的完整生命周期。性能指标监控Agent的调用成功率、平均响应时间、Token消耗等指标。8. 总结与扩展方向通过上面两个由浅入深的Demo我们完整走通了Agent2Agent通信从概念到实现的全过程。核心要点在于将每个Agent封装成具有明确接口的“工具”并由一个协调者Agent通过规划来按序或按需调用这些工具从而完成复杂任务。本文掌握的关键点A2A的核心价值通过分工协作让专业Agent处理专业任务构建可扩展的复杂智能系统。LangChain中的实现范式利用Tool类封装Agent调用逻辑是实现请求-响应式A2A的简洁有效方法。系统架构设计清晰划分协调者与执行者的职责协调者负责规划与调度执行者负责具体技能实施。提示词设计为不同角色的Agent设计针对性的提示词是发挥其能力的关键。下一步可以探索的方向更复杂的通信模式尝试实现发布-订阅模式让多个Agent监听“任务完成”事件或实现黑板模式让多个Agent共同读写一个共享存储。引入Agent框架探索专为多Agent协作设计的框架如AutoGen、CrewAI、LangGraph。这些框架提供了更强大的Agent定义、对话管理和流程编排能力。动态Agent创建根据任务需求动态实例化不同数量和类型的Agent任务完成后销毁以实现资源优化。评估与优化如何定量评估多Agent系统的效果如何通过优化提示词、调整工作流来提升最终输出质量与外部系统集成让Agent不仅能彼此通信还能调用企业内部的API、数据库、业务系统真正融入生产流程。A2A通信是构建强大AI应用的基础设施。希望这个Demo能成为你探索多智能体世界的起点。动手修改代码尝试创建你自己的“客服-质检-工单”三联Agent或者“数据分析-可视化-报告生成”流水线在实践中加深理解。