【AI】AI学习笔记:A2A(智能体协作)入门指南:从概念到实践

A2A(智能体协作)入门指南:从概念到实践

一、核心理念:为什么需要A2A?

在构建AI应用时,我们首先通过 MCP(工具调用协议) 让单个智能体变得强大------就像为一位工程师配备了一个完整的工具箱(数据库、邮件、API等)。但当面临复杂任务时,单一个体仍会力不从心。

A2A(Agent-to-Agent)协议应运而生,它的核心是让多个专业智能体像人类团队一样协作。 你可以将其理解为 "AI世界的Spring Cloud"

  • MCP 定义了工具如何被调用(DAO层),
  • A2A 则定义了智能体如何发现彼此、分工协作(Service/Controller层)。

二、核心概念:技能清单与智能体网络

1. 与MCP的关键区别

维度 MCP(Model Context Protocol) A2A(Agent-to-Agent)
交互对象 智能体 ↔ 工具(数据库、API) 智能体 ↔ 智能体
核心清单 工具清单 :具体函数,如get_weather 技能清单:领域能力,如"天气分析专家"
架构定位 DAO层:提供原子化能力 Service层:组织、决策、协作
调用模式 被动响应,固定接口 主动发现,动态协作

2. 核心组件

一个典型的A2A系统包含:

  • 技能注册中心:智能体在此注册自己的技能(类似Spring Cloud的Eureka)。
  • 智能体节点:具备特定能力的专业AI,如"数据分析Agent"、"邮件专家Agent"。
  • 任务协调器(可选):负责分解任务、路由给合适的智能体。

A2A智能体协作实战:基于OpenAI的智能体系统

一、重新理解:AI驱动的A2A架构核心

真正的A2A智能体系统的核心是每个智能体内部都有一个AI模型作为"大脑",而不是预先编写死逻辑。传统代码只处理流程编排,而AI负责内容生成、决策和创造性工作。

让我们修正核心理念:

  • 传统微服务 :Service层是人类编写的固定逻辑
  • A2A智能体 :每个智能体是一个AI模型+专业工具,能理解任务、创造内容、做出决策

二、基于OpenAI的A2A架构实现

系统架构图

F
"专用系统提示词"
"OpenAI API调用"
"MCP工具: send_email"
E
"专用系统提示词"
"OpenAI API调用"
"MCP工具: get_sales_data"
"用户复杂请求"
主控智能体

OpenAI GPT-4
"1. 理解并分解任务"
"2. 查询技能注册中心"
"结构化分析结果"
"专业邮件内容"
"3. 整合与最终回复"
"给用户的完整答案"

三、完整代码实现:真正的AI智能体协作

1. 基础设施:智能体基类与注册中心

python 复制代码
# agent_base.py
import openai
from abc import ABC, abstractmethod
from typing import Dict, Any, List

class AIAgent(ABC):
    """所有智能体的基类,封装OpenAI调用"""
    
    def __init__(self, name: str, model: str = "gpt-3.5-turbo"):
        self.name = name
        self.model = model
        self.system_prompt = ""  # 由子类定义专业指令
        self.client = openai.OpenAI(api_key="your-api-key-here")
    
    def think(self, task: str, context: Dict = None) -> str:
        """让AI思考并生成响应"""
        messages = [
            {"role": "system", "content": self.system_prompt},
            {"role": "user", "content": f"任务:{task}\n上下文:{context or '无'}"}
        ]
        
        try:
            response = self.client.chat.completions.create(
                model=self.model,
                messages=messages,
                temperature=0.7,
                max_tokens=1000
            )
            return response.choices[0].message.content
        except Exception as e:
            return f"思考过程出错:{str(e)}"
    
    @abstractmethod
    def execute(self, task: str, **kwargs) -> Dict[str, Any]:
        """执行具体任务(子类实现)"""
        pass
    
    def register_skill(self) -> Dict[str, Any]:
        """返回技能描述,用于注册中心"""
        return {
            "agent_name": self.name,
            "skills": self._get_skills(),
            "endpoint": self
        }
    
    @abstractmethod
    def _get_skills(self) -> List[str]:
        """返回智能体技能列表"""
        pass


# registry.py
class SkillRegistry:
    """AI技能注册中心"""
    
    def __init__(self):
        self.agents = {}
    
    def register(self, agent: AIAgent):
        info = agent.register_skill()
        self.agents[info["agent_name"]] = info
        print(f"✅ [注册中心] {agent.name} 注册成功 | 技能:{info['skills']}")
    
    def find_agents_for_task(self, task_description: str) -> List[AIAgent]:
        """根据任务描述查找合适的智能体"""
        # 这里可以加入更智能的匹配逻辑
        matching_agents = []
        for agent_info in self.agents.values():
            if self._skill_matches_task(agent_info["skills"], task_description):
                matching_agents.append(agent_info["endpoint"])
        return matching_agents
    
    def _skill_matches_task(self, skills: List[str], task: str) -> bool:
        """简化的技能匹配逻辑(实际中可用Embedding计算语义相似度)"""
        task_lower = task.lower()
        for skill in skills:
            if skill.lower() in task_lower:
                return True
        return False

2. 专业智能体实现(真正调用OpenAI)

python 复制代码
# data_analyst_agent.py
from agent_base import AIAgent
import json
from typing import Dict, Any, List

class DataAnalystAgent(AIAgent):
    """数据分析智能体 - 使用OpenAI分析数据"""
    
    def __init__(self):
        super().__init__(name="数据分析专家", model="gpt-4")
        # 专业系统提示词,塑造智能体专业能力
        self.system_prompt = """你是一名资深数据分析专家,擅长从原始数据中提取洞察。
        你的能力包括:
        1. 识别数据模式和趋势
        2. 生成数据驱动的建议
        3. 用商业语言解释技术发现
        4. 预测未来趋势
        
        请以专业、清晰、有条理的方式回应所有数据相关请求。
        如果是技术性任务,请解释你的分析过程。"""
    
    def _get_skills(self) -> List[str]:
        return ["数据分析", "趋势预测", "统计洞察", "图表解读", "业务分析"]
    
    def execute(self, task: str, data_context: Dict = None) -> Dict[str, Any]:
        print(f"🔍 [{self.name}] 开始分析任务:{task}")
        
        # 步骤1: 让AI理解任务并制定分析计划
        analysis_plan = self.think(
            f"针对这个数据任务,请制定分析计划:{task}",
            data_context
        )
        
        # 步骤2: 执行分析(这里模拟获取数据,实际中会调用MCP工具)
        if data_context and "sales_data" in data_context:
            analysis_input = f"销售数据:{json.dumps(data_context['sales_data'], indent=2)}"
        else:
            # 模拟一些数据供AI分析
            analysis_input = """2024年1-3月销售数据:
            - 1月:$450,000,新客户120人
            - 2月:$520,000,新客户95人  
            - 3月:$610,000,新客户150人
            主要产品线:A系列(40%),B系列(35%),C系列(25%)"""
        
        # 步骤3: 调用AI进行深度分析
        analysis_result = self.think(
            f"请分析以下数据并提供商业洞察:\n{analysis_input}\n\n具体任务要求:{task}",
            {"分析计划": analysis_plan}
        )
        
        # 步骤4: 生成执行摘要
        summary = self.think(
            "基于上述分析,生成一个3点的执行摘要,面向管理层",
            {"详细分析": analysis_result}
        )
        
        return {
            "agent": self.name,
            "task": task,
            "analysis_plan": analysis_plan,
            "detailed_analysis": analysis_result,
            "executive_summary": summary,
            "recommendations": self._extract_recommendations(analysis_result),
            "status": "completed"
        }
    
    def _extract_recommendations(self, analysis: str) -> List[str]:
        """让AI从分析中提取具体建议"""
        prompt = f"从以下分析中提取3-5条具体的、可执行的商业建议:\n{analysis}"
        recommendations_text = self.think(prompt)
        # 简单解析AI返回的建议列表
        return [rec.strip() for rec in recommendations_text.split('\n') if rec.strip() and len(rec.strip()) > 10]


# email_specialist_agent.py
from agent_base import AIAgent
from typing import Dict, Any, List

class EmailSpecialistAgent(AIAgent):
    """邮件专家智能体 - 使用OpenAI撰写专业邮件"""
    
    def __init__(self):
        super().__init__(name="邮件撰写专家", model="gpt-4")
        self.system_prompt = """你是专业的商业邮件撰写专家,精通:
        1. 各种商务场景的邮件写作(报告、跟进、营销、通知)
        2. 调整语气以适应不同收件人(客户、团队、管理层)
        3. 创建清晰、有说服力、专业的邮件内容
        4. 遵守商务邮件的格式和礼仪规范
        
        请根据具体需求创作恰到好处的邮件内容。"""
    
    def _get_skills(self) -> List[str]:
        return ["邮件撰写", "商务沟通", "内容创作", "语气调整", "邮件模板"]
    
    def execute(self, task: str, context: Dict = None) -> Dict[str, Any]:
        print(f"📧 [{self.name}] 开始邮件任务:{task}")
        
        # 让AI理解邮件需求
        requirements = self.think(
            f"分析这个邮件任务的需求:{task}",
            context
        )
        
        # 生成邮件草稿
        email_draft = self._compose_email(task, context, requirements)
        
        # 优化邮件(让AI自我审查和优化)
        optimized_email = self.think(
            "请优化以下邮件草稿,确保专业、清晰、得体:\n" + email_draft,
            {"原始需求": task, "需求分析": requirements}
        )
        
        # 生成发送建议
        sending_advice = self.think(
            "基于这封邮件的内容,给出发送时间、后续跟进等建议",
            {"邮件内容": optimized_email}
        )
        
        return {
            "agent": self.name,
            "task": task,
            "requirements_analysis": requirements,
            "email_content": optimized_email,
            "subject": self._extract_subject(optimized_email),
            "sending_advice": sending_advice,
            "status": "completed"
        }
    
    def _compose_email(self, task: str, context: Dict, requirements: str) -> str:
        """核心:让AI撰写邮件"""
        prompt = f"""请撰写一封专业邮件。
        
        任务:{task}
        需求分析:{requirements}
        
        """
        
        if context and "data_analysis" in context:
            prompt += f"需要包含的数据分析结果:\n{context['data_analysis']}\n\n"
        
        prompt += "请生成完整的邮件,包括适当的称呼、正文、结尾敬语。"
        
        return self.think(prompt)
    
    def _extract_subject(self, email_content: str) -> str:
        """从邮件内容中提取主题行"""
        subject = self.think(
            "从以下邮件内容中提取一个恰当的主题行(不超过10个词):\n" + email_content
        )
        return subject.strip()

3. 主控协调智能体(真正的AI任务分解者)

python 复制代码
# coordinator_agent.py
from agent_base import AIAgent
from registry import SkillRegistry
from typing import Dict, Any, List
import json

class CoordinatorAgent(AIAgent):
    """主控协调智能体 - 使用OpenAI分解和协调任务"""
    
    def __init__(self, registry: SkillRegistry):
        super().__init__(name="任务协调器", model="gpt-4")
        self.registry = registry
        self.system_prompt = """你是智能任务协调专家,擅长:
        1. 理解复杂任务并将其分解为专业子任务
        2. 识别完成任务所需的技能和专业领域
        3. 协调多个专家智能体协作
        4. 整合各专家的工作成果形成完整交付物
        
        请以项目经理的思维工作,确保任务高效、准确地完成。"""
    
    def _get_skills(self):
        return ["任务分解", "资源协调", "进度管理", "结果整合"]
    
    def handle_complex_request(self, user_request: str) -> Dict[str, Any]:
        print(f"🎯 [{self.name}] 处理复杂请求:{user_request}")
        
        # 步骤1: 用AI分析请求并制定执行计划
        execution_plan = self._create_execution_plan(user_request)
        
        # 步骤2: 分解任务并分配
        subtasks = self._breakdown_tasks(user_request, execution_plan)
        
        # 步骤3: 执行所有子任务
        results = {}
        for subtask in subtasks:
            agent_type = subtask["assigned_agent_type"]
            agents = self.registry.find_agents_for_task(agent_type)
            
            if agents:
                agent = agents[0]  # 选择第一个匹配的智能体
                print(f"   📋 分配任务到 {agent.name}: {subtask['description']}")
                
                # 添加上下文信息
                context = {}
                if "data_analysis" in results:
                    context["data_analysis"] = results["data_analysis"]["detailed_analysis"]
                
                # 执行子任务
                result = agent.execute(subtask["description"], context)
                results[subtask["id"]] = result
            else:
                print(f"   ⚠️ 未找到处理 {agent_type} 的智能体")
        
        # 步骤4: 用AI整合所有结果
        final_output = self._integrate_results(user_request, results)
        
        return {
            "original_request": user_request,
            "execution_plan": execution_plan,
            "subtasks": subtasks,
            "agent_results": results,
            "final_output": final_output,
            "status": "all_completed"
        }
    
    def _create_execution_plan(self, request: str) -> str:
        """让AI创建执行计划"""
        return self.think(
            f"为以下复杂请求创建一个分步执行计划:\n\n请求:{request}",
            {"当前时间": "2024年Q2", "优先级": "高"}
        )
    
    def _breakdown_tasks(self, request: str, plan: str) -> List[Dict]:
        """让AI分解任务并推荐执行者"""
        prompt = f"""基于以下请求和执行计划,分解为具体的子任务:
        
        原始请求:{request}
        执行计划:{plan}
        
        请列出3-5个子任务,每个任务包含:
        1. 任务描述
        2. 所需技能类型
        3. 预计输出
        
        请用JSON格式回复,结构如下:
        {{
            "tasks": [
                {{
                    "id": "task_1",
                    "description": "任务描述",
                    "required_skills": ["技能1", "技能2"],
                    "assigned_agent_type": "最适合的智能体类型",
                    "expected_output": "期望输出"
                }}
            ]
        }}
        """
        
        response = self.think(prompt)
        
        try:
            # 尝试解析JSON响应
            start_idx = response.find('{')
            end_idx = response.rfind('}') + 1
            json_str = response[start_idx:end_idx]
            data = json.loads(json_str)
            return data.get("tasks", [])
        except:
            # 如果AI没有返回标准JSON,创建默认分解
            return [
                {
                    "id": "task_1",
                    "description": f"分析相关数据:{request}",
                    "required_skills": ["数据分析"],
                    "assigned_agent_type": "数据分析",
                    "expected_output": "数据分析报告"
                },
                {
                    "id": "task_2", 
                    "description": f"基于分析结果创建沟通内容:{request}",
                    "required_skills": ["邮件撰写"],
                    "assigned_agent_type": "邮件撰写",
                    "expected_output": "专业邮件内容"
                }
            ]
    
    def _integrate_results(self, original_request: str, results: Dict) -> str:
        """让AI整合所有智能体的工作成果"""
        results_summary = "\n\n".join([
            f"## {result['agent']} 的工作:\n"
            f"任务:{result['task']}\n"
            f"关键输出:{result.get('executive_summary', result.get('email_content', '无'))[:200]}..."
            for result in results.values()
        ])
        
        return self.think(
            f"请整合以下专家们的工作成果,形成对原始请求的完整回复:\n\n"
            f"原始请求:{original_request}\n\n"
            f"各专家工作摘要:\n{results_summary}\n\n"
            f"请生成一个连贯、专业、完整的最终答复。",
            {"整合模式": "面向管理层的执行摘要"}
        )

4. 完整工作流程演示

python 复制代码
# main_demo.py
from registry import SkillRegistry
from data_analyst_agent import DataAnalystAgent
from email_specialist_agent import EmailSpecialistAgent
from coordinator_agent import CoordinatorAgent

def main():
    print("🤖 基于OpenAI的A2A智能体协作系统")
    print("=" * 60)
    
    # 1. 创建技能注册中心
    registry = SkillRegistry()
    
    # 2. 创建专业智能体(每个都有OpenAI大脑)
    print("\n创建专业智能体...")
    data_agent = DataAnalystAgent()
    email_agent = EmailSpecialistAgent()
    
    # 3. 注册智能体技能
    registry.register(data_agent)
    registry.register(email_agent)
    
    # 4. 创建主协调器
    coordinator = CoordinatorAgent(registry)
    
    # 5. 模拟用户复杂请求
    complex_requests = [
        "分析我们第一季度销售数据,识别增长点,并给销售团队写一封激励邮件",
        "评估最近三个月的客户满意度数据,找出改进机会,然后起草给产品团队的改进建议邮件",
        "对比去年和今年的市场活动ROI,总结有效策略,并创建给市场部门的分享邮件"
    ]
    
    print(f"\n{'='*60}")
    print("开始处理复杂请求(每个请求都会触发多智能体协作)")
    print('='*60)
    
    for i, request in enumerate(complex_requests, 1):
        print(f"\n📥 请求 #{i}: {request}")
        print("-" * 40)
        
        # 6. 协调器处理请求(触发AI协作)
        result = coordinator.handle_complex_request(request)
        
        # 7. 展示结果
        print(f"\n✅ 请求处理完成!")
        print(f"   执行计划:{result['execution_plan'][:100]}...")
        print(f"   涉及智能体:{len(result['subtasks'])} 个")
        
        # 展示每个智能体的贡献
        for task_id, agent_result in result['agent_results'].items():
            agent_name = agent_result['agent']
            if "数据" in agent_name:
                print(f"   📊 {agent_name} 提供了 {len(agent_result.get('recommendations', []))} 条建议")
            elif "邮件" in agent_name:
                subject = agent_result.get('subject', '无主题')
                print(f"   📧 {agent_name} 撰写了邮件:{subject}")
        
        # 展示最终AI生成的整合答复
        print(f"\n💡 最终整合答复(前200字符):")
        print(result['final_output'][:200] + "...")
        print("=" * 60)

if __name__ == "__main__":
    # 设置OpenAI API密钥(实际使用中应从环境变量读取)
    import os
    # os.environ["OPENAI_API_KEY"] = "your-api-key-here"
    
    main()

四、关键AI调用点解析

在这个真正的A2A系统中,AI在多个层面工作:

  1. 任务分解层(协调器):使用GPT-4理解复杂请求,分解为专业任务
  2. 专业执行层(各智能体):每个智能体用专用系统提示词+GPT模型执行专业工作
  3. 结果整合层(协调器):再次调用GPT整合所有专家输出

五、运行效果示例

复制代码
🤖 基于OpenAI的A2A智能体协作系统
============================================================

创建专业智能体...
✅ [注册中心] 数据分析专家 注册成功 | 技能:['数据分析', '趋势预测', '统计洞察', '图表解读', '业务分析']
✅ [注册中心] 邮件撰写专家 注册成功 | 技能:['邮件撰写', '商务沟通', '内容创作', '语气调整', '邮件模板']

============================================================
开始处理复杂请求(每个请求都会触发多智能体协作)
============================================================

📥 请求 #1: 分析我们第一季度销售数据,识别增长点,并给销售团队写一封激励邮件
----------------------------------------
🎯 [任务协调器] 处理复杂请求:分析我们第一季度销售数据,识别增长点,并给销售团队写一封激励邮件
🔍 [数据分析专家] 开始分析任务:分析第一季度销售数据,识别关键增长点
   📋 分配任务到 数据分析专家: 分析第一季度销售数据,识别关键增长点
📧 [邮件撰写专家] 开始邮件任务:基于销售分析结果给销售团队写激励邮件
   📋 分配任务到 邮件撰写专家: 基于销售分析结果给销售团队写激励邮件

✅ 请求处理完成!
   执行计划:1. 数据收集与清洗 -> 2. 趋势分析与增长点识别 -> 3. 激励邮件框架设计 -> 4. 邮件内容创作与优化...
   涉及智能体:2 个
   📊 数据分析专家 提供了 4 条建议
   📧 邮件撰写专家 撰写了邮件:第一季度销售佳绩与激励

💡 最终整合答复(前200字符):
基于数据分析专家和邮件撰写专家的协作,我们完成了对第一季度销售数据的全面分析。关键发现:3月份销售额达到$610,000,同比增长35%,主要增长驱动力来自...

六、核心优势

  1. 真正的AI驱动:每个决策、每段内容都由OpenAI模型生成
  2. 专业分工:每个智能体有专用系统提示词,成为领域专家
  3. 灵活协作:协调器动态分解任务,智能匹配专家
  4. 可解释性:每个步骤都有AI的思考过程记录

这个系统展示了A2A架构的真正潜力------不是预先编程的流程,而是由多个AI专家动态协作解决复杂问题。

相关推荐
石云升14 小时前
我在企业落地AI这一年,全流程案例拆解,企业落地AI必看!
人工智能·ai编程
yj_sharing14 小时前
动手学深度学习softmax回归的笔记
笔记·深度学习·回归
暖暖木头14 小时前
playwright学习笔记
笔记·学习
CCPC不拿奖不改名14 小时前
python基础:python语言中的控制结构+面试习题
开发语言·python·学习
MM_MS14 小时前
Halcon基础知识点及其算子用法
开发语言·人工智能·python·算法·计算机视觉·视觉检测
温柔只给梦中人14 小时前
深度学习:day03-04
人工智能·深度学习
棒棒的皮皮14 小时前
【深度学习】YOLO 模型部署全攻略(本地 / 嵌入式 / 移动端)
人工智能·深度学习·yolo·计算机视觉
a程序小傲14 小时前
小红书Java面试被问:TCC事务的悬挂、空回滚问题解决方案
java·开发语言·人工智能·后端·python·面试·职场和发展
hetao173383714 小时前
2026-01-06 hetao1733837 的刷题笔记
c++·笔记·算法