A2A Protocol v1.2 — Giao thức chuẩn để các AI Agent giao tiếp với nhau
Posted on: 4/26/2026 6:14:13 PM
Table of contents
- 💡 Tóm tắt nhanh
- 1. Vì sao cần A2A Protocol?
- 2. Lịch sử phát triển
- 3. Kiến trúc cốt lõi
- 4. Transport Bindings — Ba cách giao tiếp
- 5. Cơ chế nhận kết quả bất đồng bộ
- 6. Bảo mật — Không chỉ là OAuth
- 7. A2A vs MCP — Bổ trợ, không cạnh tranh
- 8. Multi-Turn Interaction — Hội thoại nhiều lượt
- 9. Hệ sinh thái và SDK
- 10. Production Deployment — Ai đang dùng?
- 11. Thiết kế hệ thống thực tế với A2A
- 12. Best Practices khi triển khai A2A
- Kết luận
Trong thế giới AI ngày càng phức tạp, mỗi tổ chức không chỉ có một AI agent mà là hàng chục — thậm chí hàng trăm — agent chuyên biệt. Vấn đề nảy sinh: làm sao để các agent từ các framework khác nhau, các vendor khác nhau có thể tìm thấy nhau, giao tiếp và phối hợp mà không cần custom integration cho từng cặp? Đó chính là bài toán mà A2A Protocol (Agent-to-Agent) ra đời để giải quyết.
💡 Tóm tắt nhanh
Nếu MCP (Model Context Protocol) là cách agent kết nối với công cụ và dữ liệu, thì A2A là cách agent kết nối với agent. Hai giao thức bổ trợ nhau, không cạnh tranh — và cả hai đều thuộc Agentic AI Foundation dưới Linux Foundation.
1. Vì sao cần A2A Protocol?
Giả sử bạn có một hệ thống doanh nghiệp với:
- Agent HR (xây dựng trên LangGraph) xử lý tuyển dụng
- Agent Finance (xây dựng trên Semantic Kernel) quản lý ngân sách
- Agent IT Support (xây dựng trên CrewAI) hỗ trợ kỹ thuật
Khi một nhân viên mới được tuyển, Agent HR cần yêu cầu Agent Finance cấp phát ngân sách thiết bị, đồng thời yêu cầu Agent IT Support tạo tài khoản email. Nếu không có giao thức chung, bạn phải viết N × M integration riêng cho từng cặp agent — một cơn ác mộng bảo trì.
graph LR
A[Agent HR
LangGraph] -->|A2A| B[Agent Finance
Semantic Kernel]
A -->|A2A| C[Agent IT Support
CrewAI]
B -->|A2A| D[Agent Procurement
AutoGen]
C -->|A2A| D
style A fill:#e94560,stroke:#fff,color:#fff
style B fill:#2c3e50,stroke:#fff,color:#fff
style C fill:#2c3e50,stroke:#fff,color:#fff
style D fill:#16213e,stroke:#fff,color:#fff
Các agent từ framework khác nhau giao tiếp qua giao thức A2A chuẩn
2. Lịch sử phát triển
3. Kiến trúc cốt lõi
A2A được thiết kế xung quanh 5 khái niệm trung tâm:
3.1 Agent Card — Danh thiếp số của Agent
Agent Card là tài liệu JSON metadata mà mỗi A2A Server công bố, mô tả danh tính, khả năng, skills, endpoint và yêu cầu xác thực. Đây là cơ chế discovery — cho phép agent khác biết bạn là ai và có thể làm gì.
{
"name": "Finance Agent",
"description": "Quản lý ngân sách, phê duyệt chi tiêu, báo cáo tài chính",
"url": "https://agents.company.com/finance",
"version": "1.2",
"skills": [
{
"id": "budget-approval",
"name": "Budget Approval",
"description": "Phê duyệt yêu cầu chi tiêu dưới 10,000 USD"
},
{
"id": "expense-report",
"name": "Expense Report",
"description": "Tạo báo cáo chi tiêu theo phòng ban"
}
],
"securitySchemes": {
"oauth2": {
"type": "oauth2",
"flows": {
"clientCredentials": {
"tokenUrl": "https://auth.company.com/token",
"scopes": { "finance:read": "", "finance:write": "" }
}
}
}
}
}
✅ Signed Agent Cards (v1.2)
Từ v1.2, Agent Card có thể được ký số bằng chữ ký mã hóa (cryptographic signature) để xác minh domain sở hữu. Điều này ngăn chặn tấn công giả mạo agent — một vấn đề bảo mật nghiêm trọng khi agent tự động phát hiện và giao tiếp với nhau.
3.2 Task — Đơn vị công việc
Mỗi yêu cầu giữa agent tạo ra một Task — đơn vị công việc có trạng thái, lịch sử tương tác, và kết quả đầu ra. Task duy trì trạng thái xuyên suốt vòng đời, cho phép xử lý bất đồng bộ.
stateDiagram-v2
[*] --> Submitted
Submitted --> Working : Agent bắt đầu xử lý
Working --> Completed : Thành công
Working --> Failed : Lỗi
Working --> Canceled : Client hủy
Working --> InputRequired : Cần thêm thông tin
Working --> AuthRequired : Cần xác thực
Submitted --> Rejected : Agent từ chối
InputRequired --> Working : Client cung cấp thông tin
AuthRequired --> Working : Client xác thực
Completed --> [*]
Failed --> [*]
Canceled --> [*]
Rejected --> [*]
Vòng đời trạng thái của Task trong A2A Protocol
Đáng chú ý là trạng thái InputRequired và AuthRequired — đây là các interrupted states cho phép multi-turn interaction. Agent có thể yêu cầu thêm thông tin hoặc xác thực trước khi tiếp tục, tương tự như cách con người hỏi lại khi thiếu thông tin.
3.3 Message, Artifact và Part
| Khái niệm | Vai trò | Ví dụ |
|---|---|---|
| Message | Đơn vị giao tiếp giữa client và agent, mang role (user/agent) và một hoặc nhiều Part | "Hãy phê duyệt ngân sách $5,000 cho phòng kỹ thuật" |
| Artifact | Kết quả đầu ra của Task, tách biệt khỏi luồng giao tiếp | File PDF báo cáo, bảng dữ liệu JSON |
| Part | Đơn vị nội dung nhỏ nhất: text, bytes (base64), URL, hoặc structured JSON | Đoạn text, hình ảnh base64, link file |
⚠️ Lưu ý quan trọng
Theo specification: "Messages SHOULD NOT be used to deliver task outputs. Results SHOULD BE returned using Artifacts." — Tách biệt giao tiếp (Message) và kết quả (Artifact) giúp hệ thống dễ theo dõi và xử lý lỗi hơn.
4. Transport Bindings — Ba cách giao tiếp
A2A v1.2 hỗ trợ 3 transport bindings, phục vụ các use case khác nhau:
| Binding | Format | Streaming | Use case |
|---|---|---|---|
| HTTP/REST | JSON over HTTPS | SSE (Server-Sent Events) | Web apps, public API, đơn giản nhất để bắt đầu |
| JSON-RPC 2.0 | JSON-RPC over HTTPS | SSE | Tương thích với hệ sinh thái MCP (cũng dùng JSON-RPC) |
| gRPC | Protocol Buffers | Server streaming | High-throughput, low-latency, internal microservices |
Ví dụ: Gửi message qua HTTP/REST
POST /messages HTTP/1.1
Host: agents.company.com
Content-Type: application/json
A2A-Version: 1.2
Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
{
"message": {
"role": "user",
"parts": [
{
"text": "Tạo báo cáo chi tiêu Q1/2026 cho phòng Engineering"
}
]
},
"configuration": {
"acceptedOutputModes": ["text", "file"],
"blocking": false
}
}
Ví dụ: Streaming response qua SSE
POST /messages:stream HTTP/1.1
Host: agents.company.com
A2A-Version: 1.2
---
event: TaskStatusUpdateEvent
data: {"taskId":"t-123","status":{"state":"working","message":"Đang truy vấn dữ liệu..."}}
event: TaskArtifactUpdateEvent
data: {"taskId":"t-123","artifact":{"parts":[{"text":"Tổng chi tiêu Q1: $234,500"}]}}
event: TaskStatusUpdateEvent
data: {"taskId":"t-123","status":{"state":"completed"}}
5. Cơ chế nhận kết quả bất đồng bộ
Không phải task nào cũng hoàn thành ngay. A2A cung cấp 3 cơ chế để theo dõi task dài:
graph TB
subgraph Polling
A1[Client] -->|GET /tasks/id| B1[Server]
B1 -->|Task status| A1
end
subgraph Streaming
A2[Client] -->|GET /tasks/id:subscribe| B2[Server]
B2 -->|SSE events| A2
end
subgraph Push Notification
A3[Client] -->|Register webhook| B3[Server]
B3 -->|HTTP POST events| C3[Client Webhook]
end
style A1 fill:#f8f9fa,stroke:#e94560,color:#2c3e50
style A2 fill:#f8f9fa,stroke:#e94560,color:#2c3e50
style A3 fill:#f8f9fa,stroke:#e94560,color:#2c3e50
style B1 fill:#e94560,stroke:#fff,color:#fff
style B2 fill:#e94560,stroke:#fff,color:#fff
style B3 fill:#e94560,stroke:#fff,color:#fff
style C3 fill:#2c3e50,stroke:#fff,color:#fff
Ba cơ chế nhận kết quả bất đồng bộ: Polling, Streaming, Push Notification
| Cơ chế | Độ trễ | Phức tạp | Khi nào dùng |
|---|---|---|---|
| Polling | Cao (phụ thuộc tần suất poll) | Thấp | Task cập nhật không thường xuyên, prototype |
| Streaming | Rất thấp (real-time) | Trung bình | Task cần phản hồi tức thời, UI hiển thị tiến trình |
| Push Notification | Thấp | Cao (cần webhook server) | Server-to-server, task chạy hàng giờ/ngày |
6. Bảo mật — Không chỉ là OAuth
A2A specification yêu cầu bảo mật nghiêm ngặt với nhiều lớp:
- Transport Security: HTTPS bắt buộc cho mọi communication
- Authentication: Hỗ trợ API Key, HTTP Bearer, OAuth 2.0, OpenID Connect, Mutual TLS
- Signed Agent Cards (v1.2): Chữ ký mã hóa xác minh danh tính agent, chống giả mạo
- Capability-based Authorization: Server chỉ cho phép truy cập đúng resource đã được ủy quyền
- Information Leakage Prevention: Server KHÔNG ĐƯỢC phân biệt "không tồn tại" và "không có quyền" — tránh enumeration attack
// OAuth 2.0 Client Credentials flow cho agent-to-agent
{
"securitySchemes": {
"agent_oauth": {
"type": "oauth2",
"flows": {
"clientCredentials": {
"tokenUrl": "https://auth.company.com/oauth2/token",
"scopes": {
"agent:execute": "Thực thi task",
"agent:read": "Đọc kết quả task"
}
}
}
}
}
}
7. A2A vs MCP — Bổ trợ, không cạnh tranh
Đây là câu hỏi thường gặp nhất: "Nên dùng A2A hay MCP?" Câu trả lời: cả hai.
graph TB
U[Người dùng] --> O[Orchestrator Agent]
O -->|A2A| AG1[Agent Phân tích]
O -->|A2A| AG2[Agent Viết báo cáo]
O -->|A2A| AG3[Agent Gửi email]
AG1 -->|MCP| T1[Database Tool]
AG1 -->|MCP| T2[Analytics API]
AG2 -->|MCP| T3[Template Engine]
AG3 -->|MCP| T4[Email Service]
style U fill:#f8f9fa,stroke:#e94560,color:#2c3e50
style O fill:#e94560,stroke:#fff,color:#fff
style AG1 fill:#2c3e50,stroke:#fff,color:#fff
style AG2 fill:#2c3e50,stroke:#fff,color:#fff
style AG3 fill:#2c3e50,stroke:#fff,color:#fff
style T1 fill:#f8f9fa,stroke:#2c3e50,color:#2c3e50
style T2 fill:#f8f9fa,stroke:#2c3e50,color:#2c3e50
style T3 fill:#f8f9fa,stroke:#2c3e50,color:#2c3e50
style T4 fill:#f8f9fa,stroke:#2c3e50,color:#2c3e50
A2A cho agent-to-agent routing, MCP cho agent-to-tool execution
| Tiêu chí | A2A Protocol | MCP (Model Context Protocol) |
|---|---|---|
| Mục đích | Agent giao tiếp với Agent | Agent kết nối với Tool/Data |
| Discovery | Agent Card (JSON metadata) | Tool listing qua capability negotiation |
| Transport | HTTPS, JSON-RPC, gRPC | stdio (local), Streamable HTTP (remote) |
| Opacity | Agent là "hộp đen" — không biết nội bộ | Tool schema rõ ràng, deterministic |
| Stateful | Task có lifecycle states phức tạp | Stateless per-request |
| Tạo bởi | Google (04/2025) | Anthropic (11/2024) |
| Quản trị | Linux Foundation / AAIF | Linux Foundation / AAIF |
✅ Khi nào bắt đầu với cái nào?
MCP trước nếu bạn đang xây dựng agent đầu tiên cần kết nối database, API, file system. A2A khi bạn đã có nhiều agent và cần chúng phối hợp — ví dụ agent HR gọi agent Finance để phê duyệt chi tiêu.
8. Multi-Turn Interaction — Hội thoại nhiều lượt
Một tính năng mạnh mẽ của A2A là hỗ trợ multi-turn interaction thông qua contextId. Điều này cho phép:
- Agent hỏi lại khi thiếu thông tin (trạng thái
InputRequired) - Nhiều task liên quan được nhóm lại trong cùng một ngữ cảnh hội thoại
- Agent duy trì conversational history xuyên suốt các tương tác
// Turn 1: Client gửi yêu cầu
{
"message": {
"role": "user",
"parts": [{ "text": "Phê duyệt chi tiêu cho team Backend" }]
}
}
// Server trả về: cần thêm thông tin
{
"taskId": "t-456",
"contextId": "ctx-789",
"status": { "state": "input-required", "message": "Số tiền cụ thể là bao nhiêu?" }
}
// Turn 2: Client bổ sung thông tin (cùng contextId)
{
"message": {
"role": "user",
"contextId": "ctx-789",
"taskId": "t-456",
"parts": [{ "text": "$8,500 cho license phần mềm Q2" }]
}
}
9. Hệ sinh thái và SDK
A2A đã được tích hợp native vào các framework agent phổ biến nhất:
| Framework / SDK | Hỗ trợ A2A | Ngôn ngữ |
|---|---|---|
| Google ADK (Agent Development Kit) | Native, first-class | Python |
| LangGraph | Built-in integration | Python, TypeScript |
| CrewAI | Plugin | Python |
| Semantic Kernel | Built-in | C#, Python |
| AutoGen | Built-in | Python |
| LlamaIndex Agents | Integration | Python |
Triển khai nhanh với Google ADK
# Tạo project với A2A support
uvx agent-starter-pack create my-finance-agent -a adk@gemini-fullstack
# Agent Card được tự động tạo tại /.well-known/agent.json
# Deploy lên Cloud Run
gcloud run deploy my-finance-agent --source .
10. Production Deployment — Ai đang dùng?
A2A không chỉ là specification trên giấy — các tổ chức lớn đã triển khai production:
- Tyson Foods & Gordon Food Service: Hệ thống supply chain với nhiều agent A2A phối hợp chia sẻ dữ liệu sản phẩm và lead bán hàng real-time
- Adobe: Agent sáng tạo nội dung phối hợp qua A2A
- ServiceNow: IT workflow agent tự động routing ticket qua A2A
- S&P Global: Agent phân tích tài chính giao tiếp cross-domain
- Salesforce, SAP, Twilio: Tích hợp A2A vào platform agent ecosystem
11. Thiết kế hệ thống thực tế với A2A
Dưới đây là kiến trúc mẫu cho một hệ thống quản lý đơn hàng sử dụng A2A:
graph TB
GW[API Gateway] --> OA[Order Agent]
OA -->|A2A: kiểm tra tồn kho| IA[Inventory Agent]
OA -->|A2A: xử lý thanh toán| PA[Payment Agent]
OA -->|A2A: tạo vận đơn| SA[Shipping Agent]
PA -->|A2A: kiểm tra fraud| FA[Fraud Detection Agent]
SA -->|A2A: gửi notification| NA[Notification Agent]
IA -->|MCP| DB1[(Inventory DB)]
PA -->|MCP| PS[Payment Service]
SA -->|MCP| LP[Logistics Partner API]
NA -->|MCP| ES[Email/SMS Service]
style GW fill:#f8f9fa,stroke:#e94560,color:#2c3e50
style OA fill:#e94560,stroke:#fff,color:#fff
style IA fill:#2c3e50,stroke:#fff,color:#fff
style PA fill:#2c3e50,stroke:#fff,color:#fff
style SA fill:#2c3e50,stroke:#fff,color:#fff
style FA fill:#16213e,stroke:#fff,color:#fff
style NA fill:#16213e,stroke:#fff,color:#fff
style DB1 fill:#f8f9fa,stroke:#2c3e50,color:#2c3e50
style PS fill:#f8f9fa,stroke:#2c3e50,color:#2c3e50
style LP fill:#f8f9fa,stroke:#2c3e50,color:#2c3e50
style ES fill:#f8f9fa,stroke:#2c3e50,color:#2c3e50
Kiến trúc hệ thống quản lý đơn hàng kết hợp A2A (agent-to-agent) và MCP (agent-to-tool)
12. Best Practices khi triển khai A2A
📋 Checklist triển khai
- Agent Card phải cụ thể: Mô tả rõ skills, input/output format, giới hạn — agent card mơ hồ sẽ khiến discovery kém hiệu quả
- Dùng contextId để nhóm task: Tránh tạo context mới cho mỗi message trong cùng luồng công việc
- Implement cả 3 cơ chế async: Polling cho backward compatibility, Streaming cho UX tốt, Push cho server-to-server
- Signed Agent Cards bắt buộc cho production: Không bao giờ tin tưởng unsigned agent card trong môi trường thực
- Tách Message và Artifact: Kết quả task phải trả về qua Artifact, không nhồi vào Message
- Versioning: Luôn gửi header
A2A-Version, xử lý gracefully khi server không hỗ trợ phiên bản mới
Kết luận
A2A Protocol v1.2 đánh dấu bước trưởng thành của giao thức agent-to-agent: từ proposal của Google thành tiêu chuẩn mở dưới Linux Foundation với 150+ tổ chức tham gia. Kết hợp với MCP cho agent-to-tool, bộ đôi A2A + MCP tạo nên nền tảng giao tiếp hoàn chỉnh cho hệ sinh thái AI đa agent.
Với signed Agent Cards, multi-turn interaction, và 3 transport bindings linh hoạt, A2A sẵn sàng cho production. Nếu bạn đang vận hành nhiều hơn một AI agent — đã đến lúc nghiêm túc xem xét A2A.
Tham khảo
Disclaimer: The opinions expressed in this blog are solely my own and do not reflect the views or opinions of my employer or any affiliated organizations. The content provided is for informational and educational purposes only and should not be taken as professional advice. While I strive to provide accurate and up-to-date information, I make no warranties or guarantees about the completeness, reliability, or accuracy of the content. Readers are encouraged to verify the information and seek independent advice as needed. I disclaim any liability for decisions or actions taken based on the content of this blog.