最近在看谷歌的多Agent通信协议A2A,想要跑代码看看实际是怎么运行的。就想到用Cursor来写调用a2a协议的示例代码。
借助 A2A,智能体能够:
• 发现彼此的能力边界
• 协商交互模式(文本、表单、多媒体等)
• 在长期任务中安全协作
• 不暴露内部状态、记忆或工具即可独立运行
给Cursor的指令如下:
基于谷歌A2A (Agent-to-Agent) SDK 的写一个简单 Hello World 代理项目。该项目演示了如何创建一个基本的智能代理服务器,它可以响应用户消息并返回简单的问候语。
- Python 版本要求:Python >= 3.10
- 核心依赖包:
包名 | 版本 | 用途 |
---|---|---|
a2a-sdk | >= 0.2.5 | A2A 核心 SDK,提供代理框架 |
uvicorn | >= 0.34.2 | ASGI 服务器,用于运行 Web 应用 |
click | >= 8.1.8 | 命令行界面工具 |
httpx | >= 0.28.1 | 异步 HTTP 客户端 |
pydantic | >= 2.11.4 | 数据验证和序列化 |
python-dotenv | >= 1.1.0 | 环境变量管理 |
langchain-google-genai | >= 2.1.4 | Google 生成式 AI 集成 |
langgraph | >= 0.4.1 | 语言图处理框架 |
- 使用uvicorn作为web服务器框架。
- 使用Poetry包管理框架。
- 添加.gitignore,避免一些cache文件也提交到git
Cursor完成代码之后,可以要求Cursor运行基本测试。Cursor就会写测试并且自动修复代码的问题,确保基本测试通过。
还可以要求Cursor把代码提交push到github,我让Cursor写的示例代码已经提交到https://github.com/JasonQQ/ragagent。
补充需求
后面给Cursor补充提了两个需求:
添加额外的extended_skill,这个agent可以针对已经经过认证的用户给我更为热情的greeting,并且添加对应的AgentCard,再加入A2AStarletteApplication。
基于A2AClient实现一个test client,可以跟之前写的Agent server通信。先使用A2ACardResolver获取公共AgentCard,判断是否支持supportsAuthenticatedExtendedCard,如果支持则获取扩展AgentCard。
再用AgentCard初始化A2AClient。在test client的结尾使用SendStreamingMessageRequest进行streaming测试。
Cursor在测试过程中,Cursor会先返回错误:
你的 agent 服务没有实现 /a2a/agent/authenticatedExtendedCard 这个 endpoint,导致 404 Not Found。
这说明 agent 只支持 public agent card(/.well-known/agent.json),暂不支持认证扩展卡。
需要提示一下Cursor,
检查一下agent server为什么没有支持authenticatedExtendedCard端点,sdk应该默认支持的
它才会去找解决方案:
agent_card = AgentCard(
name="Hello World Agent",
description="A simple agent that returns hello world.",
url="http://localhost:8000",
version="1.0.0",
defaultInputModes=["text"],
defaultOutputModes=["text"],
capabilities=AgentCapabilities(),
skills=[hello_skill],
supportsAuthenticatedExtendedCard=True, # <--- 必须加上这一行
)
另外一个遇到的问题是streaming的测试未通过:
你当前的 agent server(或 SDK handler)未实现/未启用 SSE streaming,导致 Content-Type 不符。
需要提示Cursor:
检查sdk是否有AgentCard支持streaming的选项
Cursor才会去sdk寻找答案:
agent_card = AgentCard(
...,
capabilities=AgentCapabilities(streaming=True),
...
)
总之Cursor还是需要提示和引导才能写出符合要求的代码。不过交互过程还挺有意思的,自己也对A2A的sdk的细节有更多了解。