A2A Ajan-Ajan Protokolü
Type: Build
Languages: Python (stdlib, Agent Card + Task harness)
Prerequisites: Phase 13 · 06 (MCP fundamentals), Phase 13 · 08 (MCP client)
Time: ~75 minutes
Öğrenme Hedefleri
- Ajan-a-ağent (A2A) kullanım durumlarından ajan-a-ağent (MCP) kullanımı ayırt edin.
- Bir ajan kartı yayınlayın .
/.well-known/agent-card.jsonyetenekleri vesupportedInterfacesMetadata. - Görev yaşam döngüsünü izleyin:
TASK_STATE_SUBMITTED- Evet .TASK_STATE_WORKING- Evet .TASK_STATE_INPUT_REQUIRED, ve terminal durumlarıTASK_STATE_COMPLETED- Evet .TASK_STATE_FAILED- Evet .TASK_STATE_CANCELED- Evet .TASK_STATE_REJECTED- Evet . - Her bir kısmının bir tane olduğu Mesajları kullan
text- Evet .raw- Evet .urlveyadata, ve çıkış olarak eserler.
Sorun
Müşteri hizmetleri ajanı rapor yazmayı uzman bir yazar ajanına devretmelidir.
- Yapısal REST API'si çalışır ama her çiftleme bir kerelik.
- Ortak kod tabanı. İki ajanın aynı çerçeveyi çalıştırmasını gerektirir.
- MCP, iki ajanın birbirleriyle işbirliği yaparak her bir ajanın iç mantığını koruduğu halde, çağrı araçları için değil.
A2A boşluğu dolduruyor. Bir ajanın bir görevi diğerine gönderdiği etkileşimi, bir yaşam döngüsü, mesajlar ve eserlerle modellediyor. Çağrılan ajanın iç durumu netsiz kalır.
A2A, "cadre arası ajanların birbirleriyle konuşmasına izin verin" protokolüdür.
Anlaşım
Ajan Kartı
A2A ' ya uygun her ajan bir kart yayınlar ./.well-known/agent-card.json- ...
json{
"name": "research-agent",
"description": "Summarizes academic papers and drafts citations.",
"version": "1.2.0",
"supportedInterfaces": [
{
"url": "https: TOK0
"protocolBinding": "JSONRPC",
"protocolVersion": "1.0"
}
],
"capabilities": {"streaming": true, "pushNotifications": true},
"securitySchemes": {
"bearer": {"httpAuthSecurityScheme": {"scheme": "Bearer"}}
},
"securityRequirements": [{"schemes": {"bearer": {"list": []}}}],
"defaultInputModes": ["text/plain"],
"defaultOutputModes": ["text/markdown"],
"skills": [
{
"id": "summarize_paper",
"name": "Summarize a paper",
"description": "Read a paper PDF and produce a 3-paragraph summary.",
"tags": ["research", "summarization"],
"inputModes": ["text/plain", "application/pdf"],
"outputModes": ["text/markdown"]
}
]
}Bulma URL tabanlı: kartı getir, ilkini seç supportedInterfacesKayıtıprotocolBindingBu, bir iletişim ortamı olarak kullanılır.
İmzalanmış Ajan Kartları
Bir kart bir kart taşıyabilir .signaturesArray. Her giriş bir JWS (RFC 7515) kartın RFC 8785 kanonik JSON üzerinden hesaplanmıştır, signaturesKullanıcılar aynı şekilde kartı kanonikalize eder ve doğrulayır.
Görev yaşam döngüsü
textTASK_STATE_SUBMITTED
-> TASK_STATE_WORKING
-> TASK_STATE_COMPLETED | TASK_STATE_FAILED | TASK_STATE_CANCELED | TASK_STATE_REJECTED
TASK_STATE_WORKING
-> TASK_STATE_INPUT_REQUIRED
-> TASK_STATE_WORKING (the client sends a message with the same taskId)Müşteriler başlıyor SendMessageAdı ajanları devletler arasında geçiyor, müşteriler ile sorgu yapıyor.GetTaskveya SSE üzerinden akış SendStreamingMessageve SubscribeToTaskAkıntı taşıyor .statusUpdateve artifactUpdateBu durum, görevlerin son durumuna ulaştığında gerçekleşir ve kapanır.finalBayrak.
Mesajlar ve Bölümler
Bir mesajın bir messageId, a role(ROLE_USERveya ROLE_AGENT), ve bir veya daha fazla Bölüm. Her Bölüm tam olarak bir içerik alanı içerir ve bu alan adı türdür.kind- Alan.
text: basit içerik.raw: dosya baytları, JSON'da base64, genellikle ilefilenamevemediaType- Evet .urlDosya içeriğine bir bağlantı.data: yapılandırılmış JSON payload (sırhlanan ajan için yapılandırılmış giriş).
Örnek:
json{
"messageId": "msg-001",
"role": "ROLE_USER",
"parts": [
{"text": "Summarize this paper."},
{"raw": "...", "filename": "paper.pdf", "mediaType": "application/pdf"},
{"data": {"targetLength": "3 paragraphs"}, "mediaType": "application/json"}
]
}Sanat eserleri
Çıktıkları çiğ ip değil, eserler.
json{
"artifactId": "art-001",
"name": "summary",
"parts": [{"text": "...", "mediaType": "text/markdown"}]
}Sanat eserleri parça olarak akışabilir.artifactUpdateOlay , eser ve artfaktı taşıyor .appendve lastChunk- Arayan toplanıyor.
Üç protokol bağlaması
- JSON-RPC 2.0 over HTTP(
JSONRPC) POST istekler için, SSE akış için.SendMessage- Evet .SendStreamingMessage- Evet .GetTask- Evet .ListTasks- Evet .CancelTask- Evet .SubscribeToTask- Evet .CreateTaskPushNotificationConfig- Evet .GetTaskPushNotificationConfig- Evet .ListTaskPushNotificationConfigs- Evet .DeleteTaskPushNotificationConfigveGetExtendedAgentCard- Evet . - gRPC(
GRPC) GRPC'nin yerli olduğu işletme ortamları için. - HTTP+JSON/REST(
HTTP+JSON). gibi kaynak URL'leriPOST /message:sendveGET /tasks/{id}- Evet .
Üç bağlama da aynı veri modelini taşır.supportedInterfacesGiriş isimleri bir bağlayıcı ve onun protocolVersionMüşteriler başlığı gönderir .A2A-Version: 1.0Her istek için, çünkü bir sunucu, istek olmadan bir istekleri 0.3 sürümü olarak okuyor.
httpPOST /a2a HTTP/1.1
Host: research.example.com
Content-Type: application/json
A2A-Version: 1.0
{
"jsonrpc": "2.0",
"id": 1,
"method": "SendMessage",
"params": {
"message": {
"messageId": "msg-001",
"role": "ROLE_USER",
"parts": [{"text": "Summarize this paper."}]
}
}
}Açıklık koruma
Ana tasarım prensibi: çağrılan ajanın iç durumu açık değildir. Çağrılan görev durumunu ve eserleri görür. çağrılan ajanın düşünce zinciri, araç çağrıları, alt ajan delegasyonu hepsi görünmez. Bu, araç çağrılarının şeffaf olduğu MCP'den farklıdır.
A2A, rekabetçilerin içsel bilgileri açığa çıkarmadan işbirliği yapmasını sağlar. A2A, arama yapanın hizmeti nasıl uyguladığını öğrenmeden "bu müşteri hizmetleri ajanını arayın" olabilir.
Zaman çizgisi
- 2025-04-09.Google A2A'yı duyurdu.
- 2025-06-23.Linux Vakfına bağışlanmış.
- 2025-08.IBM'in ACP'ini emiriyor.
- 2025-09.AP2 uzatma (Agent Ödeme) gemileri.
- 2026-04.150+ destekleyici organizasyonla yayınlanan v1.0.
MCP ile ilişki
| Dimension | MCP | A2A |
|---|---|---|
| Use case | Agent-to-tool | Agent-to-agent |
| Opacity | Transparent tool calls | Opaque inner reasoning |
| Typical caller | Agent runtime | Another agent |
| State | Tool-call result | Task with lifecycle |
| Authorization | OAuth 2.1 (Phase 13 · 16) | Agent Card securitySchemes + securityRequirements |
| Transport | Stdio / Streamable HTTP | JSON-RPC / gRPC / HTTP+JSON |
Bir özel aracı çağrıştırmak istediğinizde MCP kullanın. Bir tüm görevi başka bir ajan'a devretmek istediğinizde A2A kullanın. Birçok üretim sistemi her ikisini de kullanır: bir ajan araç katmanı için MCP'yi ve işbirliği katmanı için A2A'yı kullanır.
Kullan
code/main.pyA2A harnesini en az uyguluyor: yazar ajanı kartını yayınlıyor, araştırma ajanı ona bir SendMessagePDF bir parçası ve metin talimatı ile başvurun ve görev devam eder TASK_STATE_WORKING→ TASK_STATE_INPUT_REQUIRED→ TASK_STATE_WORKING→ TASK_STATE_COMPLETEDTüm stdlib; mesaj şekillerine odaklanmak için bir hafıza taşıyıcısı kullanır.
Neye bakılır:
- Ajan Kartı JSON şekli.
- Sunucu tarafındaki görev kimliği ve durum geçişleri.
- İçerik alanının bulunduğu bölümler.
TASK_STATE_INPUT_REQUIRED- Ara sıra.- Artifak tamamlandığında geri döner.
Gönder
Bu ders bize çok yararlı .outputs/skill-a2a-agent-spec.md. Diğer ajanlar tarafından çağrılabilir olan yeni bir ajan verildiğinde, yetenek Agent Kart JSON, yetenek skemi ve son nokta çizelgesini üretir.
Egzersizler
- Çık .
code/main.py.Task'ın tüm yaşam döngüsünü takip edin,TASK_STATE_INPUT_REQUIREDÇağrılan ajan açıklama istediğinde dur.
- İmzalanmış bir ajan kartı ekle.
signatures- Evet .algayarlanmıştırHS256, kartın kanonik JSON'unu imzalamaksignaturesBir doğrulama yaz ve mutasyonlu bir kartta başarısız olduğunu onayla.
- Görev akışı ile uygulayın
SendStreamingMessage: yazar ajanıtask, üç .artifactUpdateparçalar ve birstatusUpdate- Evet .TASK_STATE_COMPLETEDSonra akış kapanır.
- Bir MCP sunucusuyla bir A2A ajanı tasarlayın. Her MCP aracı bir A2A yeteneğine göre bir harita yapın.
- A2A v1.0 duyuruyu okuyun ve Nisan 2026 itibariyle herhangi bir çerçeve tarafından henüz uygulanmayan tek özelliği belirleyin.
Anahtar Terimler
| Term | What people say | What it actually means |
|---|---|---|
| A2A | "Agent-to-Agent protocol" | Open protocol for opaque agent collaboration |
| Agent Card | "/.well-known/agent-card.json" | Published metadata describing an agent's skills and supportedInterfaces |
| Skill | "A callable unit" | A named operation the agent supports (analog to MCP tool) |
| Task | "Unit of delegation" | A work item with a lifecycle and final artifact |
| Message | "Task input" | Carries Parts (text, raw, url, data) |
| Part | "Typed chunk" | Exactly one of text / raw / url / data, plus optional mediaType; no kind field |
| Artifact | "Task output" | Named, typed output returned on completion |
| AP2 | "Agent Payments Protocol" | Payments extension built on A2A; card signing is core A2A (signatures) |
| Opacity | "Black-box collaboration" | Called agent's internals are hidden from caller |
TASK_STATE_INPUT_REQUIRED | "Task pause" | Interrupted state when the agent needs more info |
Daha Fazla Okumak
- a2a-protocol.org Kanonik A2A spesifikasyonu
- a2aproject/A2A — GitHub Referans uygulamalar ve SDK'lar
- A2A v1.0.1 releaseEtiketlenmiş
docs/specification.mdve düzenlemeler.specification/a2a.protoBu ders - Linux Foundation — A2A launch press release Haziran 2025 yönetim transfer
- Google Cloud — A2A protocol upgrade Yol haritası ve ortakların hareketi
- Google Dev — A2A 1.0 milestone v1.0 serbest bırakma notları ve geriye doğru kompak rehberlik
This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.
Browse the complete course catalog or open this lesson on GitHub.