Google的Agent-to-Agent(A2A)协议旨在实现不同AI代理之间的无缝互操作性。而微软的**Semantic Kernel(SK)**是一个开源平台,用于协调智能代理的交互。本文将介绍如何将Semantic Kernel代理集成到A2A生态系统中,并作为A2A服务器高效地路由代理调用到专业服务。

你可以在Google的技术文档中了解更多关于A2A协议的信息。

标题图片

Semantic Kernel对A2A生态系统的贡献

目前,A2A库尚未提供打包的解决方案,这使得开发者在构建集成时面临一定挑战。由于A2A协议仍处于发展阶段,我们直接使用A2A仓库中的示例代码,展示如何将Semantic Kernel代理有效地集成到该生态系统中。我们的目标是提供清晰的集成路径,帮助用户轻松在A2A项目中采用Semantic Kernel。

集成的关键组件

SemanticKernelTravelManager

SemanticKernelTravelManager是核心协调器,负责接收和分析请求,并根据上下文将请求智能地路由到专业代理。例如,货币相关的查询会直接发送到CurrencyExchangeAgent,而活动或行程相关的请求则会转发到ActivityPlannerAgent。这种设计确保了任务的最佳分配和高效响应。

CurrencyExchangeAgent

这个专业代理处理货币相关任务。它集成了外部API工具,例如Frankfurter API,以提供实时货币兑换率,帮助用户进行准确的预算和财务规划。

ActivityPlannerAgent

ActivityPlannerAgent根据用户的偏好和预算,提供个性化的行程建议、活动推荐以及事件预订服务,打造独特的旅行体验。

集成工作原理

  • 任务路由与分配:TravelManager动态将任务路由到专业代理,这些代理作为插件配置在TravelManager中。通过上下文感知和自动函数调用,底层模型能够智能地确定最适合处理请求的代理。
  • 代理发现:代理通过结构化的“Agent Card”广告其能力,使客户端代理能够高效地识别和选择最适合的代理进行任务处理,并通过A2A协议实现无缝通信。
  • 对话记忆:Semantic Kernel通过多轮交互的聊天历史维护上下文,提供流畅的用户体验。在示例中,历史记录是临时的,并未持久化。

示例场景

假设用户需要一个预算友好的旅行计划,并进行货币兑换:

  1. 用户向TravelManager提交请求。
  2. TravelManager检测到货币需求并调用CurrencyExchangeAgent
  3. CurrencyExchangeAgent从Frankfurter获取汇率。
  4. ActivityPlannerAgent推荐符合预算的选项。
  5. TravelManager汇总并返回完整的旅行计划。

快速开始

确保你已将最新版本的A2A仓库克隆到本地,以成功运行此示例。

环境要求

  • Python 3.10或更高版本
  • uv包管理器(安装方法请参考uv文档
  • 有效的OpenAI凭证(请参考SK文档
  • 可选:Frankfurter API密钥(免费端点无需密钥)

设置与运行

  1. 导航到Semantic Kernel示例目录:
    1
    
    cd samples/python/agents/semantickernel
    
  2. 创建.env文件:
    1
    2
    
    OPENAI_API_KEY="your_api_key_here"
    OPENAI_CHAT_MODEL_ID="your-model-id"
    
  3. 设置环境(绑定到所需的Python版本):
    1
    2
    3
    
    uv python pin 3.12
    uv venv
    source .venv/bin/activate
    
  4. 运行Semantic Kernel代理:
    1
    2
    3
    4
    5
    
    # 默认配置
    uv run .
    
    # 或者使用自定义主机和端口
    uv run . --host 0.0.0.0 --port 8080
    
  5. 运行A2A客户端(在另一个终端中):
    1
    2
    
    cd samples/python
    uv run hosts/cli
    

运行uv run .后,你会看到uv安装必要的包。完成后,服务器启动并显示类似以下的输出:

SK A2A Agent Server

运行uv run hosts/cli后,你会看到一个Agent Card,确认Semantic Kernel Travel Agent Manager已成功被发现并准备好交互:

SK A2A Client

现在,你可以直接向代理发送查询。例如:“我计划去韩国首尔旅行2天,每天预算100美元。请问这相当于多少韩元?我可以做些什么活动或吃什么?”提交请求后,Semantic Kernel A2A服务器会动态分配任务给配置的插件代理。你会在控制台中看到不同阶段的处理消息,最终会收到类似以下结构化的JSON响应:

SK A2A Result