用Cursor写Agent2Agent代码

最近在看谷歌的多Agent通信协议A2A,想要跑代码看看实际是怎么运行的。就想到用Cursor来写调用a2a协议的示例代码。

Hello World Agent

借助 A2A,智能体能够:
• 发现彼此的能力边界
• 协商交互模式(文本、表单、多媒体等)
• 在长期任务中安全协作
• 不暴露内部状态、记忆或工具即可独立运行

多Agent通信协议框架

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

  1. Python 版本要求:Python >= 3.10
  2. 核心依赖包:
包名 版本 用途
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 语言图处理框架
  1. 使用uvicorn作为web服务器框架。
  2. 使用Poetry包管理框架。
  3. 添加.gitignore,避免一些cache文件也提交到git

Cursor完成代码之后,可以要求Cursor运行基本测试。Cursor就会写测试并且自动修复代码的问题,确保基本测试通过。

还可以要求Cursor把代码提交push到github,我让Cursor写的示例代码已经提交到https://github.com/JasonQQ/ragagent

补充需求

后面给Cursor补充提了两个需求:

  1. 添加额外的extended_skill,这个agent可以针对已经经过认证的用户给我更为热情的greeting,并且添加对应的AgentCard,再加入A2AStarletteApplication。

  2. 基于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的细节有更多了解。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容