从零搭建多Agent协同系统:Google ADK 框架实战

简介: 本文介绍如何用Google ADK框架+阿里云AgentRun,从零搭建多Agent协同系统:将复杂任务拆解为专业Agent(如VibeCoder生成代码、CodeReviewer审查),通过A2A协议实现标准化协作与调度,兼顾工程性与易部署性。(239字)

当你只有一个 AI 助手时,它是个工具。当你有多个 AI 助手相互协作时,你就有了一支团队。本文带你用 Google ADK 框架 + 阿里云 AgentRun,从零搭建一个多 Agent 协同系统。


为什么要多 Agent?

单 Agent 的局限性越来越明显。一个典型的场景:你让一个 Agent 同时完成"搜索资料 → 分析数据 → 写报告 → 画图表",它往往顾此失彼。context window 被塞满,推理链条过长导致幻觉频发,一个环节出错整条链路崩溃。

多 Agent 协同的核心思想很简单:把复杂任务拆给多个专业 Agent,就像公司里有研发、测试、运维的分工。

Google 2025 年推出的 Agent Development Kit (ADK)A2A 协议(Agent-to-Agent Protocol),正是为了解决这个问题——定义了一套多 Agent 之间如何发现彼此、如何通信、如何协作的标准。


A2A 协议的核心概念

A2A 协议的核心抽象是三个角色:

┌─────────────┐    发现/调用     ┌─────────────┐
│  Client     │ ──────────────→ │  Remote     │
│  Agent      │ ←────────────── │  Agent      │
└─────────────┘    返回结果      └─────────────┘
  • Client Agent:发起调用的一方,类似"项目经理"
  • Remote Agent:被调用的一方,类似"专业执行者"
  • Agent Card:每个 Agent 的能力声明卡片(JSON 格式),类似"简历"

当你注册一个 Remote Agent 时,它会暴露一张 Agent Card,描述自己能做什么、需要什么参数、输出什么。Client Agent 读取这些 Card,按需调度。

这不就是微服务的 Agent 版本吗?确实如此。A2A 把微服务架构中"服务发现、RPC 调用、负载均衡"的思想搬到了 Agent 世界。


实战:搭建一个"氛围编程 + 代码审查"双 Agent 系统

场景设计

我们搭建两个 Agent:

Agent 角色 能力
VibeCoder 氛围编程专家 根据需求描述直接生成代码
CodeReviewer 代码审查专家 审查代码质量、安全性、性能

工作流:用户提需求 → VibeCoder 生成代码 → CodeReviewer 审查 → 返回最终结果

Step 1:定义 Agent Card

每个 Agent 需要一张能力声明卡片:

# vibe_coder_card.py
agent_card = {
   
    "name": "VibeCoder",
    "description": "氛围编程专家,根据自然语言需求生成代码",
    "url": "https://your-agent-domain.com/vibecoder",
    "capabilities": {
   
        "streaming": True,
        "pushNotifications": False
    },
    "skills": [
        {
   
            "id": "generate_code",
            "name": "代码生成",
            "description": "根据需求描述生成前端/后端代码",
            "inputSchema": {
   
                "type": "object",
                "properties": {
   
                    "requirement": {
   "type": "string", "description": "需求描述"},
                    "language": {
   "type": "string", "enum": ["python", "javascript", "typescript"]},
                    "framework": {
   "type": "string", "description": "目标框架"}
                },
                "required": ["requirement", "language"]
            }
        }
    ]
}
# code_reviewer_card.py
agent_card = {
   
    "name": "CodeReviewer",
    "description": "代码审查专家,检查代码质量和安全性",
    "url": "https://your-agent-domain.com/codereviewer",
    "capabilities": {
   
        "streaming": True,
        "pushNotifications": False
    },
    "skills": [
        {
   
            "id": "review_code",
            "name": "代码审查",
            "description": "审查代码并给出改进建议",
            "inputSchema": {
   
                "type": "object",
                "properties": {
   
                    "code": {
   "type": "string", "description": "待审查的代码"},
                    "language": {
   "type": "string"},
                    "focus_areas": {
   
                        "type": "array",
                        "items": {
   "enum": ["security", "performance", "readability", "architecture"]}
                    }
                },
                "required": ["code", "language"]
            }
        }
    ]
}

Step 2:实现 Agent 核心逻辑

# agent_core.py
from google.adk.agents import LlmAgent
from google.adk.tools import built_in_tools
from google.adk.sessions import SessionService

class VibeCoderAgent:
    """氛围编程 Agent"""

    def __init__(self):
        self.agent = LlmAgent(
            name="VibeCoder",
            model="qwen-plus",  # 通义千问
            instruction="""
            你是一个专业的代码生成助手。请遵循以下原则:
            1. 生成完整可运行的代码
            2. 包含必要的注释和文档
            3. 遵循目标语言的最佳实践
            4. 输出时标注语言和文件名
            """,
            tools=[built_in_tools.code_executor]
        )

    async def generate(self, requirement: str, language: str, framework: str = None) -> dict:
        prompt = f"""
        需求:{requirement}
        语言:{language}
        框架:{framework or '无'}

        请生成完整代码,包括:
        - 项目结构说明
        - 核心代码文件
        - 依赖配置
        - 运行说明
        """
        response = await self.agent.run(prompt)
        return {
   
            "agent": "VibeCoder",
            "code": response.text,
            "language": language
        }

class CodeReviewerAgent:
    """代码审查 Agent"""

    def __init__(self):
        self.agent = LlmAgent(
            name="CodeReviewer",
            model="qwen-plus",
            instruction="""
            你是一个严格的代码审查员。请从以下维度审查代码:
            1. 安全性:是否存在注入、密钥泄露等风险
            2. 性能:是否有明显的性能瓶颈
            3. 可读性:命名、结构是否清晰
            4. 架构:设计是否合理

            使用评分制(1-10),并给出改进建议。
            """,
            tools=[built_in_tools.code_executor]
        )

    async def review(self, code: str, language: str, focus_areas: list = None) -> dict:
        areas = focus_areas or ["security", "performance", "readability", "architecture"]
        prompt = f"""
        请审查以下 {
   language} 代码,重点关注:{
   ', '.join(areas)}

        ```{
   language}
        {
   code}
    请按维度给出评分和改进建议。
    """
    response = await self.agent.run(prompt)
    return {
        "agent": "CodeReviewer",
        "review": response.text
    }

### Step 3:编排协同流程

```python
# orchestrator.py
import asyncio

class MultiAgentOrchestrator:
    """多 Agent 协同编排器"""

    def __init__(self):
        self.vibe_coder = VibeCoderAgent()
        self.code_reviewer = CodeReviewerAgent()

    async def execute(self, requirement: str, language: str, framework: str = None):
        print(f"[Orchestrator] 接收需求:{requirement}")

        # 阶段1:生成代码
        print("[Orchestrator] → 调度 VibeCoder 生成代码...")
        code_result = await self.vibe_coder.generate(requirement, language, framework)
        print(f"[Orchestrator] ✓ 代码生成完成 ({len(code_result['code'])} 字符)")

        # 阶段2:审查代码
        print("[Orchestrator] → 调度 CodeReviewer 审查代码...")
        review_result = await self.code_reviewer.review(
            code_result['code'], 
            language,
            ["security", "performance", "readability"]
        )
        print("[Orchestrator] ✓ 代码审查完成")

        # 阶段3:整合结果
        return {
            "requirement": requirement,
            "code": code_result["code"],
            "review": review_result["review"],
            "summary": self._summarize(review_result["review"])
        }

    def _summarize(self, review_text: str) -> str:
        # 提取评分和关键建议
        return review_text[:500]  # 简化版摘要

# 使用示例
async def main():
    orchestrator = MultiAgentOrchestrator()
    result = await orchestrator.execute(
        requirement="创建一个 FastAPI 接口,接受用户查询并返回数据库搜索结果",
        language="python",
        framework="fastapi"
    )
    print(f"\n=== 最终结果 ===\n{result['code']}\n\n=== 审查意见 ===\n{result['review']}")

if __name__ == "__main__":
    asyncio.run(main())

部署到生产:为什么选择 Serverless Agent 平台?

到这里你可能会问:写了这么多代码,部署在哪?自己搭服务吗?

自己部署会遇到一个很现实的问题:Agent 是长时运行任务,不像普通 API 请求几百毫秒就能返回。一个多 Agent 协同流程可能要跑几分钟甚至更久。用传统服务器部署,你需要处理:

  • 长连接管理(WebSocket / SSE)
  • 并发任务调度(同时跑 10 个 Agent 流程怎么办)
  • GPU 资源弹性(推理时用 GPU,空闲时别浪费钱)

这就是为什么我选择了 阿里云 AgentRun(函数计算 FC + 百炼的 Agent 平台):

  • Serverless 免运维:不用管服务器,Agent 跑在函数计算上
  • GPU 弹性伸缩:推理时自动分配 GPU 算力,空闲时缩到 0
  • 内置模型接入:直接用百炼的通义千问等大模型,不用自己搭模型服务
  • API 集成:部署完直接拿 API 凭证,在业务代码里调用

把上面的代码部署到 AgentRun 上,只需要三步:

  1. 在 AgentRun 控制台选择"Google ADK 多 Agent 协同"模板
  2. 上传上面写的 Agent Card 和核心代码
  3. 点击部署,拿 API 端点

不需要配服务器,不需要装 CUDA,不需要写 Kubernetes YAML。


多 Agent 协同的最佳实践

在实际项目中踩过一些坑,分享几条经验:

1. Agent 粒度要适中。别拆太细——一个 Agent 只做一件事(比如"验证邮箱格式"),调用开销会很高。也别太粗——一个 Agent 包揽所有事,就失去了协同的意义。参考标准:一个 Agent 的职责能用一句话说清楚,且无需内部多步骤决策。

2. 错误处理要分级。Agent A 调用 Agent B 失败了怎么办?建议三层兜底:

  • L1:重试(幂等任务)
  • L2:降级(用规则引擎代替)
  • L3:透传失败信息给用户

3. 监控多 Agent 的"端到端延迟"。单 Agent 的延迟可能是 2 秒,但经过 3 个 Agent 串行调用就变成 6 秒。用 AgentRun 的链路追踪,可以清楚看到每个 Agent 的耗时分布。

4. A2A 协议的 Agent Card 要写得诚实。别夸大能力——Agent Card 是"服务契约",夸大了会导致 Client Agent 做出错误调度决策。


总结

多 Agent 协同不是噱头,是解决复杂任务工程的必然方向。Google ADK + A2A 协议提供了一个标准化的框架,而 Serverless Agent 平台(如阿里云 AgentRun)解决了部署和运维的难题。

如果你也想试试,可以从官方的"氛围编程专家"模板开始——这是一个基于 ADK 的多 Agent 协同 Demo,展示了上面说的完整流程。

本文中的示例代码已经内置在 阿里云 AgentRun 的 Google ADK 模板 中,可以直接免费体验:点击跳转到免费体验地址


相关文章
|
1天前
|
人工智能 机器人 Serverless
5 分钟搭建你的第一个 AI Agent:别再说门槛高了
本文介绍阿里云AgentRun平台:无需配置服务器、不装模型,5分钟即可零代码部署AI Agent。支持模板化创建(如编程专家、电商助手)、内置大模型与工具(浏览器/代码解释器),Serverless架构自动扩缩容,流式响应,真正让AI“能动手”执行任务。
|
24天前
|
人工智能 JSON 供应链
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
LucianaiB分享零成本畅用JVS Claw教程(学生认证享7个月使用权),并开源GeoMind项目——将JVS改造为科研与产业地理情报可视化AI助手,支持飞书文档解析、地理编码与腾讯地图可视化,助力产业关系图谱构建。
23591 15
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
|
1天前
|
安全 JavaScript API
基于浏览器锁定的 CypherLoc 恐吓软件攻击机理与防御研究
CypherLoc是2026年曝光的新型浏览器端恐吓软件,以钓鱼邮件为入口,通过加密载荷、哈希门控、页面自替换、全屏锁定、调试干扰等技术,在内存中构建无法退出的恐吓界面,诱导拨打虚假技术支持电话。攻击无文件、抗分析、强心理诱导,已发生约280万次。
32 1
|
1天前
|
人工智能 弹性计算 API
【阿里云官方】零基础打造专属 AI 助手 OpenClaw 实操经验
本教程详解阿里云OpenClaw零代码部署全流程:3分钟内完成控制台登录→轻量服务器选择→OpenClaw配置入口进入→填写API Key等基础信息→启动并测试对话。步骤清晰、配图详实,新手照着操作即可快速上线AI应用,文末附官方9折部署链接。(239字)
【阿里云官方】零基础打造专属 AI 助手 OpenClaw 实操经验
|
13天前
|
存储 人工智能 数据库
免费用阿里云JVS Claw:学生先领300元代金券,免费领阿里版AI龙虾匠心版
阿里云学生认证可免费领300元无门槛代金券,官方链接:https://t.aliyun.com/U/75bDmA 直接抵扣JVS Claw匠心版(相当于免费领取)!还可用于无影云电脑、大模型服务、AI应用、云服务器、CDN、数据库等全系云产品。速戳高校计划活动页申请
101 2
|
1天前
|
人工智能 前端开发 数据可视化
股票财报分析系统的开发费用
本系统是纯可视化、无表格、AI驱动的股票财报分析工具,费用取决于数据源(免费数百元/年 vs 商业授权5万+)、AI文本生成(LLM调用成本)、定制图表开发(ECharts/AntV动效)及安全合规要求。预算从3万(个人MVP)到百万级(金融机构)不等,前端可视化占30%为最大投入。
|
1天前
|
人工智能 弹性计算 Serverless
2026 年企业 AI Agent 落地:从 Demo 到生产的四个关键跨越
本文剖析AI Agent从Demo到生产落地的四大关键跨越:长时任务支持、多Agent协同、GPU弹性伸缩与全链路可观测性,并结合Google ADK、Anthropic MCP等新协议,给出务实解法与平台选型建议。
|
1天前
|
供应链 数据安全/隐私保护
1688新手零基础运营全攻略,新手快速起店实操指南
本文为1688新手商家量身打造的零基础运营指南,涵盖合规入驻、店铺装修、产品优化、免费流量获取、BSR权重提升及高频避坑技巧,全程实操、无套路、零付费,助新手快速起店、稳定出单。
63 0
|
1天前
|
监控 安全 JavaScript
伪装 Android 应用运营商计费欺诈的攻击机理与防御研究
2026年曝光的跨境Android运营商计费欺诈,伪装近250款热门应用,利用SIM卡定向激活,滥用WebView、SMS Retriever API等合法组件,无感完成增值服务订购。攻击具三变种、全自动化、Telegram实时回传等特征,暴露权限管控与API治理短板。协同行为检测可将拦截率提升至95%以上。(239字)
33 0
|
1天前
|
弹性计算 API 数据安全/隐私保护
【小白轻松解决】v2.7.1 阿里云 OpenClaw 零代码部署真的 3 分钟搞定?小白一次成功秘诀?
本教程详解阿里云OpenClaw零代码部署全流程:3分钟内完成控制台登录→轻量服务器选择→OpenClaw配置入口进入→填写API Key等基础信息→启动并测试对话。含分步截图、避坑提示与9折官方部署链接,新手友好,无需编程基础。

热门文章

最新文章