当前位置: 首页 > web >正文

A2A Samples: Hello World Agent

项目概述

这是一个基于 A2A (Agent-to-Agent) SDK 的简单 Hello World 代理示例。该项目演示了如何创建一个基本的智能代理服务器,它可以响应用户消息并返回简单的问候语。

依赖版本说明

Python 版本要求

  • Python >= 3.10

核心依赖包

包名版本用途
a2a-sdk>= 0.2.5A2A 核心 SDK,提供代理框架
uvicorn>= 0.34.2ASGI 服务器,用于运行 Web 应用
click>= 8.1.8命令行界面工具
httpx>= 0.28.1异步 HTTP 客户端
pydantic>= 2.11.4数据验证和序列化
python-dotenv>= 1.1.0环境变量管理
langchain-google-genai>= 2.1.4Google 生成式 AI 集成
langgraph>= 0.4.1语言图处理框架

项目结构

helloworld/
├── __init__.py              # 包初始化文件
├── __main__.py              # 主程序入口
├── agent_executor.py        # 代理执行器实现
├── test_client.py           # 测试客户端
├── pyproject.toml           # 项目配置和依赖
├── uv.lock                  # 依赖锁定文件
└── README.md                # 项目说明

环境搭建

1. 安装 UV 包管理器

如果您还没有安装 UV,请先安装:

# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh# 或者使用 pip
pip install uv

2. 克隆项目

git clone https://github.com/google-a2a/a2a-samples.git
cd a2a-samples/samples/python/agents/helloworld

3. 安装依赖

UV 会自动根据 pyproject.tomluv.lock 文件安装所有依赖:

uv sync

代码架构说明

核心组件

1. HelloWorldAgent (agent_executor.py)
class HelloWorldAgent:"""Hello World Agent."""async def invoke(self) -> str:return 'Hello World'
2. HelloWorldAgentExecutor (agent_executor.py)
class HelloWorldAgentExecutor(AgentExecutor):"""代理执行器实现"""async def execute(self, context: RequestContext, event_queue: EventQueue) -> None:result = await self.agent.invoke()event_queue.enqueue_event(new_agent_text_message(result))
3. 服务器配置 (__main__.py)
  • 定义代理技能 (AgentSkill)
  • 配置公共和扩展代理卡片 (AgentCard)
  • 设置请求处理器和任务存储
  • 启动 Uvicorn 服务器

运行步骤

1. 启动代理服务器

uv run .

服务器将在 http://localhost:9999 启动。

2. 运行测试客户端

在另一个终端窗口中:

uv run test_client.py

3. 验证服务

您可以通过以下方式验证服务是否正常运行:

访问代理卡片信息
curl http://localhost:9999/.well-known/agent.json
访问扩展代理卡片(需要认证)
curl -H "Authorization: Bearer dummy-token-for-extended-card" \http://localhost:9999/agent/authenticatedExtendedCard

项目流程图

A2A 客户端与服务器交互流程

A2A Client A2A Server HelloWorldAgent EventQueue 1. 服务发现阶段 GET /.well-known/agent.json 返回公共代理卡片 2. 扩展卡片获取(可选) GET /agent/authenticatedExtendedCard (with Bearer token) 返回扩展代理卡片 3. 消息发送流程 POST /agent/message {"message": {"role": "user", "parts": [...]}} 4. 服务器内部处理 调用 HelloWorldAgentExecutor.execute() 执行 HelloWorldAgent.invoke() 生成 "Hello World" 消息 返回事件队列结果 5. 响应返回 返回消息响应 6. 流式消息处理(可选) POST /agent/message/stream 流式返回消息块 消息块 1 消息块 2 结束标记 A2A Client A2A Server HelloWorldAgent EventQueue

系统架构流程图

代理配置
服务器环境
网络通信
客户端环境
公共代理卡片
基础技能
扩展代理卡片
增强技能
A2AStarletteApplication
Web 服务器
DefaultRequestHandler
请求处理器
HelloWorldAgentExecutor
代理执行器
HelloWorldAgent
核心代理逻辑
InMemoryTaskStore
任务存储
EventQueue
事件队列
HTTP/HTTPS 请求
JSON 数据传输
测试客户端启动
A2ACardResolver
解析代理卡片
A2AClient
初始化
发送消息请求
处理响应

API 端点

公共端点

端点方法描述
/.well-known/agent.jsonGET获取公共代理卡片信息
/agent/messagePOST发送消息给代理
/agent/message/streamPOST流式发送消息

认证端点

端点方法描述认证
/agent/authenticatedExtendedCardGET获取扩展代理卡片Bearer Token

技能配置

基础技能

  • ID: hello_world
  • 名称: Returns hello world
  • 描述: just returns hello world
  • 示例: [‘hi’, ‘hello world’]

扩展技能(需要认证)

  • ID: super_hello_world
  • 名称: Returns a SUPER Hello World
  • 描述: A more enthusiastic greeting, only for authenticated users
  • 示例: [‘super hi’, ‘give me a super hello’]

故障排除

常见问题

  1. 端口被占用

    # 检查端口使用情况
    lsof -i :9999
    # 杀死占用进程
    kill -9 <PID>
    
  2. 依赖安装失败

    # 清理缓存重新安装
    uv cache clean
    uv sync --reinstall
    
  3. Python 版本不兼容

    # 检查 Python 版本
    python --version
    # 确保版本 >= 3.10
    

扩展开发

添加新技能

  1. __main__.py 中定义新的 AgentSkill
  2. 修改 agent_executor.py 中的逻辑处理
  3. 更新代理卡片配置

集成外部 API

  1. pyproject.toml 中添加新依赖
  2. agent_executor.py 中实现 API 调用
  3. 处理异步响应和错误

总结

这个 Hello World 示例展示了 A2A SDK 的基本用法,包括:

  • 代理服务器的创建和配置
  • 技能定义和管理
  • 客户端-服务器通信
  • 认证和扩展功能

通过这个示例,您可以快速了解如何构建自己的智能代理应用。

python a2a

http://www.xdnf.cn/news/9711.html

相关文章:

  • [Java恶补day9] 438.找到字符串中所有字母异位词
  • JavaSE核心知识点05实践项目(学生管理系统-控制台版)
  • 前向渲染和延迟渲染
  • 利用仿真软件学习一下RC无源滤波和有源滤波电路
  • 【部署】手搓一个dify可用的rerank模型接口服务
  • VSCode Agent 和 Cursor Agent 系统提示词对比
  • There is a chart instance already initialized on the dom. 柱状图初始化时报前面这个错误如何解决?
  • Python异常处理:优雅地应对程序运行时的“意外”
  • 三轴云台之不完全微分PID控制算法篇
  • 可视化数据大屏适配方案之Scale等比缩放
  • java上机测试错题回顾(3)
  • YOLOv11冻结训练+微调策略实战教程(含效果对比分析)
  • 运维三剑客——grep
  • 【动态规划】子数组系列(二)
  • GEO革命:重新定义AI时代的内容规则
  • 代码随想录算法训练营第五十二天
  • 【笔试训练4】Fibonacci数列|单词搜索|杨辉三角
  • 11、总账管理(GL)数字化转型:财务核心支柱,承担着业务系统复杂多变的重任
  • 测试W5500的第9步_使用SNTP实现网络时间同步
  • 尚硅谷redis7 63-69 redis哨兵监控之理论简介
  • javase JDK 环境变量配置
  • 关于线程死锁的相关知识
  • PortSwigger-01-信息泄露
  • 借助Java,让Cloudflare API为你的网站管理加速
  • 篇章五 数据结构——链表(一)
  • 【CAPL实战】LIN校验和测试
  • 电脑硬盘空间大量被占用怎么办
  • 低功耗双目云台监控设备采用国标控制装置
  • 扩散模型原理详解:从噪声到艺术的神奇之旅
  • win32相关(进程间通信)