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 觸及瀏覽器內代理。請參閱三者如何搭配運作。
任何網站如何新增 A2A
您不需要實作整個協定就能開始——選擇您服務所提供的一項真實功能:
- 在
/.well-known/agent-card.json提供一個有效的代理卡,包含一個技能。 - 實作同步的
message/send方法來包裝該功能,並以 artifact 形式回傳包含結果的已完成Task。 - 串流、任務歷程與推送通知皆為可選——將
capabilities.streaming設為 false,僅在需要時才加入。
唯一的規則:用真實端點支撐代理卡
代理卡是一份契約,而非 meta 標籤。如果您發布的代理卡其 url 實際上無法回應 message/send,每個信任它的代理都會碰壁。只為您真正能提供的功能公開 A2A——這是我們建構自身代理的方式,也是為何我們自己的報告只在有真實端點支撐時才會標記該訊號為存在。想要親眼看看?取得我們的代理卡。