A2A:让 AI 代理调用您的网站
发布:
一个 AI 代理刚刚验证了本站——无需打开浏览器,无需点击按钮,无需抓取页面——它读取了一个小型 JSON 文件,发送了一个类型化请求,并收到了结构化的结果。这次交换就是 A2A,任何网站都可以提供它。
什么是 A2A
A2A(Agent2Agent)是一种开放协议——现由 Linux Foundation 托管——允许 AI 代理通过普通 HTTP 相互发现和调用。可以将其理解为公共 API 的代理对代理版本:无需人类阅读您的文档并编写集成,另一个代理会读取描述您服务功能的机器可读说明,然后直接调用它。
它由两部分组成:发现文档(代理卡)和可调用端点(技能)。
1. 代理卡——发现
您在 /.well-known/agent-card.json 发布一个 JSON 文件,描述您是谁以及您能做什么。必填字段包括 name、description、version、url(您的 A2A 端点)以及至少一个 skill:
{
"protocolVersion": "0.3.0",
"name": "llms.txt Validator",
"description": "Validate a website's llms.txt and return a score with findings.",
"url": "https://llms-txt-validator.dev/a2a",
"skills": [{ "id": "validate_llms_txt", "name": "Validate llms.txt",
"description": "Given a domain or URL, fetch and validate its llms.txt." }]
}
2. 端点——可调用的技能
卡片的 url 指向一个 JSON-RPC 2.0 端点。代理使用消息调用 message/send 方法;您执行工作并返回一个 Task。以下是对我们代理的一次真实调用:
POST /a2a
{ "jsonrpc": "2.0", "id": "1", "method": "message/send",
"params": { "message": { "role": "user",
"parts": [{ "kind": "text", "text": "validate llmstxt.org" }] } } }
……以及回复——一个已完成的任务,包含人类可读的摘要和结构化数据:
{ "result": { "kind": "task", "status": { "state": "completed" },
"artifacts": [{ "parts": [
{ "kind": "text", "text": "Validated llmstxt.org: score 100/100..." },
{ "kind": "data", "data": { "ok": true, "report": { "scores": { "overall": 100 } } } }
] }] } }
无需浏览器,无需 HTML 解析——代理可以精确获取它所请求的数据。
A2A vs WebMCP vs MCP
- A2A — 联网代理通过 HTTP 调用您的服务(编排器、其他代理)。即本页内容。
- WebMCP — 运行在浏览器内的代理,调用您当前页面上的工具。
- MCP — 将工具连接到单个模型或应用,通常在本地使用。
它们相辅相成:A2A 面向联网代理,WebMCP 面向浏览器内代理。请参阅三者如何协同工作。
任何网站如何添加
您不需要实现整个协议就能开始——选择您的服务真正能做的一件事:
- 在
/.well-known/agent-card.json发布一个包含单项技能的有效代理卡。 - 实现同步的
message/send方法来封装该功能,并将结果作为构件返回一个已完成的Task。 - 流式传输、任务历史和推送通知是可选的——将
capabilities.streaming设置为 false,仅在需要时再添加。
唯一的规则:用真实端点支撑代理卡
代理卡是一份契约,而非元标签。如果您发布的卡片中 url 实际上无法响应 message/send,那么每个信任它的代理都会碰壁。请仅为您真正能提供的功能开放 A2A——这正是我们构建自己代理的方式,也是为什么我们的报告只有在真实端点支撑时才将该信号标记为存在。想看实时效果?获取我们的代理卡。