惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
B
Blog RSS Feed
Apple Machine Learning Research
Apple Machine Learning Research
D
Darknet – Hacking Tools, Hacker News & Cyber Security
V2EX - 技术
V2EX - 技术
Security Archives - TechRepublic
Security Archives - TechRepublic
Cisco Talos Blog
Cisco Talos Blog
T
Tor Project blog
博客园 - 司徒正美
T
The Blog of Author Tim Ferriss
J
Java Code Geeks
宝玉的分享
宝玉的分享
小众软件
小众软件
博客园_首页
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Project Zero
Project Zero
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Spread Privacy
Spread Privacy
I
InfoQ
博客园 - 叶小钗
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
罗磊的独立博客
M
MIT News - Artificial intelligence
爱范儿
爱范儿
The Cloudflare Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
T
Tenable Blog
S
Securelist
N
News and Events Feed by Topic
Simon Willison's Weblog
Simon Willison's Weblog
Webroot Blog
Webroot Blog
The Hacker News
The Hacker News
O
OpenAI News
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Palo Alto Networks Blog
C
CERT Recently Published Vulnerability Notes
PCI Perspectives
PCI Perspectives
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
Threat Research - Cisco Blogs
L
LINUX DO - 热门话题
I
Intezer
Scott Helme
Scott Helme
Recent Commits to openclaw:main
Recent Commits to openclaw:main
C
Cybersecurity and Infrastructure Security Agency CISA
Google Online Security Blog
Google Online Security Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
S
Security Affairs
AI
AI
AWS News Blog
AWS News Blog
Security Latest
Security Latest

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python) The Hidden Cost of AI Systems Nobody Talks About. undefined vs undeclared, and how typeof behaves Switching from file-based jobs to NATS/Kafka in Rust without changing code io_uring Adventures: Rust Servers That Love Syscalls Why Agentic AI is Killing the Traditional Database The POUR principles of web accessibility for developers and designers Quantum Neural Network 3D — A Deep Dive into Interactive WebGL Visualization How To Install Caveman In Codex On macOS And Windows Automation Pipeline Reliability: Why Your Workflow Breaks When Nobody Is Watching I Built an 'Open World' AI Coding Agent — It Works From ANY Folder From Freelancing to Product: A Tech Service Company's SaaS Transformation China's AI Giants: Adding Tencent Hunyuan & ByteDance Doubao to AI University (74 Providers) On the Vibe Coders and Their Lies clerk: Auto-Summarize Your Claude Code Sessions AI Weekly — 2026/04/10–04/17 | The Model Lockdown Is Here, but the Toolchain Is the Real Battleground AI 週報 — 2026/04/10–2026/04/17 模型封鎖潮來了,但工具鏈才是真戰場 Maybe this is how Open-Source apps are born... 🚀 Fine-Tune LLMs with LoRA and QLoRA: 2026 Guide tRPC v11 + Next.js App Router: End-to-End Type Safety Without the Boilerplate ShadCN UI in 2026: Why I Stopped Installing Component Libraries and Started Owning My Components SaaS Billing in React Server Components: Stripe + Supabase Without a Single `useEffect` Join our DEV Weekend Challenge — $1,000 in Prizes Across TEN winners! Submissions Due April 20 at 6:59 AM UTC. Implementing FSRS Spaced Repetition in Flutter + Supabase — Adding Memory Science to an AI Learning App "I Texted My Localhost From the Train — Claude Code Fixed the Bug Before I Got Home" I Built a Sales Prep AI and It Went Deeper Than Expected Design to Code #2: One JSON, Eleven Outputs Solving the 100M-Row Problem: A Summary Table Pattern for High-Volume Push Notification Logs Flutter Web With Wasm: What Actually Changes For Developers I Built 50 Royalty-Free Soundtracks for My Side Project in a Weekend Using AI Music Generation The Vibe Coding Security Checklist: 7 Things to Check Before You Ship Stop Letting Googlebot Guess Fix Your React App's SEO Right Desconstruindo o Streaming do LinkedIn: Como Criar um Engine de Extração de Vídeo de Alta Performance com HLS e FFmpeg (EDA Part-1) EDA (Exploratory Data Analysis) Explained With Real Life — Why Looking at Your Data Is the Most Important Step in Machine Learning Brand Relationship Management at Scale: Our 4-Touch Outreach System for 200+ Brands Why String.fromEnvironment() Might Return an Empty String in Dart JGuardrails 1.0.0 — Hardening Java LLM Apps Against Jailbreaks, Toxicity, and Prompt Injection Plan and Schedule a Full Week of Threads Content From One Claude Conversation Coding Cat Oran Ep3, Five Tables Changed Everything Updated: BFF Pattern I'm done watching freelancers get buried by 200 proposals. So I'm building the alternative. This is my first post BFS Algorithm in Java Step by Step Tutorial with Examples Tracking LLM Pricing Monthly: An Open Dataset for 22 AI Models How We Measure Content ROI on a Comparison Site: Revenue Attribution Without Perfect Data Introducing Nova AI Ops: The AI-Native Operating System for SRE Teams I built a free desktop video downloader for Windows — Grabbit How Talkie OCR Helps Vision-Impaired & Dyslexic Users Read the World Around Them VRCFaceTracking安装和iPhone面捕配置教程,有bug Even CrowdStrike Can't See Your Agents The Automation Gold Rush: What n8n Workflows and Claude Are Opening Up for Developers Right Now
Agent2Agent (A2A) là gì? Giao thức mở cho giao tiếp AI Agent
Sebastian Pe · 2026-05-22 · via DEV Community

Hầu hết hệ thống AI hiện nay vẫn chạy theo mô hình một tác nhân: một model, một vòng lặp prompt, một bộ công cụ. Cách này ổn cho đến khi tác vụ quá lớn, hoặc bạn cần gọi một tác nhân do nhóm khác xây dựng để xử lý một bước chuyên biệt. Khi đó vấn đề xuất hiện: không có cách chuẩn để hai tác nhân độc lập tìm thấy nhau, trao đổi công việc và trả kết quả. Agent2Agent (A2A) được thiết kế để giải quyết đúng khoảng trống đó.

Dùng thử Apidog ngay hôm nay

Bài viết này giải thích A2A là gì, nó giải quyết vấn đề nào, cách giao thức hoạt động, cách phân biệt với MCP, và cách bạn có thể bắt đầu kiểm thử một tác nhân A2A. Nếu bạn muốn debug thực tế sau khi đọc xong, xem thêm hướng dẫn Apidog A2A Debugger.

Agent2Agent (A2A) là gì?

Agent2Agent (A2A) là một giao thức mở cho giao tiếp giữa các tác nhân AI. Nó định nghĩa:

  • Một tác nhân tự mô tả khả năng của mình như thế nào.
  • Một tác nhân khác kết nối ra sao.
  • Hai bên trao đổi tin nhắn, tệp và dữ liệu có cấu trúc như thế nào.
  • Trạng thái tác vụ và kết quả được trả về cho bên gọi ra sao.

Điểm quan trọng của A2A là chữ giữa: giao tiếp giữa các tác nhân. A2A không phải là cách gắn thêm tool cho một tác nhân. Nó là cách để các tác nhân riêng biệt, có thể được viết bằng framework khác nhau và do các nhóm khác nhau vận hành, cộng tác mà không cần biết chi tiết triển khai nội bộ của nhau.

Có thể hình dung A2A giống HTTP cho lưu lượng tác nhân. HTTP cho phép trình duyệt nói chuyện với bất kỳ web server nào mà không cần biết server viết bằng Go, Java, Node.js hay Python. Tương tự, A2A cho phép một tác nhân LangGraph giao tiếp với một tác nhân CrewAI miễn là cả hai tuân thủ cùng một hợp đồng giao thức.

Google giới thiệu A2A vào năm 2025, sau đó chuyển giao cho Linux Foundation như một dự án trung lập với nhà cung cấp. Đặc tả kỹ thuật được công bố tại kho GitHub của A2A, còn các triển khai tham chiếu có trên trang dự án A2A.

Vấn đề A2A giải quyết

Trước A2A, tích hợp hai tác nhân thường đồng nghĩa với việc viết glue code riêng cho từng cặp kết nối.

Ví dụ, tác nhân của bạn cần gọi một tác nhân nghiên cứu của nhóm khác. Bạn thường phải tự quyết định:

  • Endpoint gọi là gì.
  • Payload request có shape ra sao.
  • Response trả về dạng text, JSON hay stream.
  • Xác thực dùng Bearer token, Basic Auth hay header riêng.
  • Trạng thái tác vụ dài hạn được biểu diễn như thế nào.

Kết quả là mỗi tích hợp trở thành một chuẩn riêng. Khi cần gọi thêm tác nhân thứ hai, bạn gần như bắt đầu lại từ đầu.

Các vấn đề phổ biến gồm:

  • Không có khám phá chuẩn. Tác nhân gọi không có cách thống nhất để hỏi: “Bạn làm được gì?”
  • Không có mô hình tác vụ chung. Một tác nhân trả chuỗi text, tác nhân khác trả JSON tùy chỉnh, tác nhân khác stream token.
  • Không có xác thực thống nhất. Mỗi tích hợp tự định nghĩa credential và header.
  • Không có khả năng hoán đổi. Một tác nhân AutoGen khó thay thế bằng tác nhân LangGraph dù cả hai làm cùng một việc.

A2A xử lý vấn đề này theo hướng tương tự OpenAPI trong thế giới REST: định nghĩa một hợp đồng chung để các thành phần độc lập có thể làm việc với nhau.

A2A hoạt động như thế nào?

Bạn có thể hiểu A2A qua bốn khái niệm chính:

  1. Agent Card
  2. Task
  3. Message và Artifact
  4. Streaming và cập nhật trạng thái

1. Agent Card

Agent Card là tài liệu JSON mà một tác nhân công bố để mô tả chính nó. Đây là điểm bắt đầu cho quá trình khám phá.

Agent Card thường cho biết:

  • Tên tác nhân.
  • Mô tả.
  • Khả năng.
  • Danh sách kỹ năng.
  • Kiểu input/output được hỗ trợ.
  • Yêu cầu xác thực.
  • Phiên bản giao thức.

Theo quy ước, Agent Card thường được đặt tại một URL dễ đoán, ví dụ:

https://your-agent.example.com/.well-known/agent.json

Enter fullscreen mode Exit fullscreen mode

Một tác nhân gọi sẽ fetch URL này trước, đọc metadata, sau đó mới quyết định có gửi tác vụ hay không.

Ví dụ tối giản về Agent Card:

{
  "name": "research-agent",
  "description": "Tác nhân hỗ trợ nghiên cứu và tổng hợp thông tin",
  "protocolVersion": "0.1.0",
  "skills": [
    {
      "id": "web-research",
      "name": "Web Research",
      "description": "Tìm kiếm và tóm tắt thông tin từ nhiều nguồn"
    }
  ],
  "capabilities": {
    "streaming": true
  }
}

Enter fullscreen mode Exit fullscreen mode

Trong thực tế, bạn nên kiểm tra Agent Card trước khi tích hợp để chắc chắn:

  • URL có thể truy cập được.
  • JSON hợp lệ.
  • Kỹ năng được mô tả đủ rõ.
  • Xác thực được khai báo đúng.
  • Phiên bản giao thức tương thích.

2. Task

Task là đơn vị công việc trong A2A.

Khi tác nhân A yêu cầu tác nhân B làm điều gì đó, yêu cầu đó được biểu diễn thành một task có ID riêng. Task di chuyển qua các trạng thái như:

  • submitted
  • working
  • input-required
  • completed

Điểm quan trọng là bên gọi có thể xử lý task theo cùng một cách bất kể tác nhân phía sau được xây dựng bằng framework nào.

Một vòng đời đơn giản:

submitted -> working -> completed

Enter fullscreen mode Exit fullscreen mode

Nếu tác nhân cần thêm dữ liệu:

submitted -> working -> input-required -> working -> completed

Enter fullscreen mode Exit fullscreen mode

Cách tiếp cận này giúp bạn không phải tự phát minh cơ chế trạng thái cho từng integration.

3. Message và Artifact

Message là dữ liệu được gửi giữa các tác nhân. Message có thể gồm nhiều phần:

  • Text.
  • File.
  • Dữ liệu có cấu trúc.
  • Kết hợp nhiều loại nội dung.

Ví dụ một message dạng khái niệm:

{
  "role": "user",
  "parts": [
    {
      "type": "text",
      "text": "Hãy tóm tắt tài liệu này thành 5 ý chính."
    },
    {
      "type": "file",
      "file": {
        "name": "report.pdf",
        "mimeType": "application/pdf"
      }
    }
  ]
}

Enter fullscreen mode Exit fullscreen mode

Khi tác nhân hoàn thành, nó trả về artifacts. Artifact là đầu ra có cấu trúc của task, ví dụ:

  • Tài liệu được tạo.
  • Bảng dữ liệu.
  • Bản tóm tắt.
  • Tham chiếu đến file.
  • Kết quả phân tích.

Cả message và artifact đều được cấu thành từ nhiều phần, giúp định dạng nhất quán ở cả chiều request và response.

4. Streaming và cập nhật trạng thái

Không phải task nào cũng hoàn tất ngay. Với các tác vụ dài như nghiên cứu, phân tích tài liệu, tạo báo cáo hoặc xử lý file lớn, A2A hỗ trợ server-sent events để stream tiến độ và kết quả từng phần.

Ví dụ, một tác nhân nghiên cứu có thể gửi các cập nhật như:

working: Đang tìm kiếm nguồn liên quan
working: Đã tìm thấy 3 nguồn phù hợp
working: Đang tổng hợp báo cáo
completed: Báo cáo đã sẵn sàng

Enter fullscreen mode Exit fullscreen mode

Nhờ vậy, bên gọi không cần chờ trong trạng thái “mù”. Bạn có thể hiển thị tiến độ trong UI hoặc ghi log chi tiết để debug.

Luồng A2A điển hình

Một giao dịch A2A thường diễn ra như sau:

  1. Tác nhân A fetch Agent Card của tác nhân B.
  2. Tác nhân A đọc danh sách kỹ năng và khả năng được hỗ trợ.
  3. Tác nhân A gửi message để tạo task.
  4. Tác nhân B xử lý task.
  5. Tác nhân B stream cập nhật trạng thái nếu cần.
  6. Tác nhân B trả artifacts khi task chuyển sang completed.
  7. Tác nhân A đọc artifacts và tiếp tục workflow.

Ở tầng truyền tải, toàn bộ quá trình là JSON qua HTTP. Vì vậy, với developer, cách debug cũng gần giống debug API: kiểm tra request, response, header, auth, payload và trạng thái.

A2A so với MCP

A2A và MCP thường bị nhầm lẫn vì cả hai đều liên quan đến tác nhân AI và đều là giao thức mở. Tuy nhiên, chúng giải quyết hai bài toán khác nhau.

A2A MCP
Kết nối Giữa các tác nhân Giữa tác nhân với công cụ và dữ liệu
Câu hỏi nó trả lời “Một tác nhân khác có thể xử lý bước này cho tôi không?” “Tác nhân này có thể dùng những công cụ và tài nguyên nào?”
Sử dụng điển hình Workflow đa tác nhân giữa nhiều nhóm hoặc hệ thống Một tác nhân gọi database, file system hoặc API
Đơn vị trao đổi Task, message, artifact Tool call, resource, prompt

Nói ngắn gọn:

  • MCP giúp một tác nhân truy cập công cụ và dữ liệu.
  • A2A giúp một tác nhân giao tiếp với tác nhân khác.

Một hệ thống thực tế có thể dùng cả hai. Ví dụ:

  1. Tác nhân điều phối nhận yêu cầu từ người dùng.
  2. Nó dùng MCP để truy vấn database nội bộ.
  3. Nó dùng A2A để giao tác vụ phân tích cho một tác nhân chuyên gia.
  4. Nó nhận artifact cuối cùng và trả kết quả cho người dùng.

Nếu bạn đang quyết định khi nào dùng giao thức nào, xem thêm bài so sánh máy chủ MCP và A2A. Phía MCP trong thực tế được minh họa thêm trong bài trình gỡ lỗi client MCP của Apidog.

Hợp tác đa tác nhân trong thực tế

A2A không phải là cách duy nhất để các tác nhân cộng tác. Một số hệ thống dùng điều phối trực tiếp: một tác nhân lập kế hoạch, sau đó gọi rõ ràng một tác nhân khác để thực thi.

Một ví dụ mã nguồn mở là Codex-Claude-Collab, một kỹ năng điều phối workflow theo thời gian thực giữa OpenAI Codex và Claude Code. Codex lập kế hoạch, giao phần triển khai cho Claude Code, sau đó review diff và xác minh kết quả trước khi trả lời người dùng.

Đây là mô hình điều phối cố định: một bên biết chính xác bên kia là ai.

A2A khái quát hóa mô hình đó. Thay vì hard-code “gọi Claude Code”, tác nhân gọi đọc Agent Card và làm việc với bất kỳ tác nhân nào tuân thủ giao thức, miễn là tác nhân đó cung cấp kỹ năng phù hợp.

Cách chọn thực tế:

  • Dùng điều phối trực tiếp khi bạn kiểm soát cả hai đầu và workflow ổn định.
  • Dùng A2A khi tác nhân độc lập, thuộc nhóm khác, hoặc cần có khả năng thay thế.
  • Dùng kết hợp cả hai nếu hệ thống có cả workflow nội bộ và tích hợp liên nhóm.

Cách kiểm tra một tác nhân A2A

Khi xây dựng hoặc tích hợp một tác nhân A2A, bạn cần nhìn thấy lưu lượng thực tế. Console log thường không đủ vì nó có thể che mất header, payload thô hoặc trường JSON lồng sâu. Script test tự viết cũng dễ lỗi thời khi giao thức hoặc Agent Card thay đổi.

Một checklist debug tối thiểu:

  1. Fetch Agent Card.
  2. Xác minh JSON hợp lệ.
  3. Kiểm tra auth.
  4. Gửi message thử nghiệm.
  5. Theo dõi task ID và trạng thái.
  6. Kiểm tra stream event nếu có.
  7. Đọc artifact cuối cùng.
  8. So sánh payload thô với dữ liệu UI hiển thị.

Bạn có thể bắt đầu bằng curl:

curl https://your-agent.example.com/.well-known/agent.json

Enter fullscreen mode Exit fullscreen mode

Sau đó gửi một message test theo endpoint và format mà tác nhân hỗ trợ. Tuy nhiên, khi cần kiểm tra auth, file attachment, metadata, stream và JSON-RPC payload, dùng debugger trực quan sẽ nhanh hơn.

Apidog tích hợp A2A Debugger trong client tiêu chuẩn. Quy trình cơ bản:

  1. Dán URL Agent Card.
  2. Nhấn Connect.
  3. Apidog đọc thẻ và hiển thị tên, khả năng, kỹ năng của tác nhân.
  4. Gửi message thử nghiệm.
  5. Đính kèm file hoặc metadata nếu cần.
  6. Đọc response ở ba chế độ:
    • Preview dễ đọc.
    • Nội dung thô.
    • Payload JSON-RPC đầy đủ.

Apidog cũng xử lý Bearer Token, Basic Auth và API key header mà không cần tự viết lệnh curl.

Điểm quan trọng khi debug A2A là tách lỗi truyền tải khỏi lỗi logic:

  • Nếu request không đến được tác nhân, kiểm tra URL, DNS, TLS, auth và header.
  • Nếu task không được tạo, kiểm tra payload và schema.
  • Nếu task chạy nhưng artifact sai, lỗi có thể nằm trong logic tác nhân.
  • Nếu streaming không hoạt động, kiểm tra server-sent events và client support.

Hướng dẫn Apidog A2A Debugger trình bày chi tiết vòng lặp kết nối-gửi-đọc. Nguyên tắc rộng hơn của việc kiểm thử các tác nhân AI gọi API của bạn cũng áp dụng cùng tư duy: xác nhận đường truyền trước, sau đó mới debug logic.

Bắt đầu với A2A

Nếu bạn muốn xây dựng hoặc kết nối một tác nhân A2A, có thể đi theo lộ trình sau.

Bước 1: Đọc đặc tả

Bắt đầu với đặc tả kỹ thuật A2A. Tập trung vào:

  • Cấu trúc Agent Card.
  • Vòng đời task.
  • Message parts.
  • Artifact parts.
  • Cách streaming hoạt động.
  • Cách xác thực được mô tả.

Bạn không cần đọc toàn bộ trước khi viết code, nhưng cần hiểu các khái niệm bắt buộc để tránh thiết kế sai từ đầu.

Bước 2: Chạy tác nhân mẫu

Dùng một trong các tác nhân mẫu tham chiếu để có baseline hoạt động.

Mục tiêu của bước này không phải là production-ready, mà là xác nhận bạn hiểu luồng:

Agent Card -> message -> task -> status update -> artifact

Enter fullscreen mode Exit fullscreen mode

Bước 3: Kiểm tra Agent Card

Trước khi gửi task, kiểm tra Agent Card bằng browser, curl hoặc debugger:

curl https://your-agent.example.com/.well-known/agent.json | jq

Enter fullscreen mode Exit fullscreen mode

Xác nhận:

  • JSON parse được.
  • Trường mô tả không rỗng.
  • Kỹ năng được khai báo rõ.
  • Auth đúng với cách server thực thi.
  • URL public hoặc private đúng theo môi trường tích hợp.

Bước 4: Gửi message “hello”

Đừng bắt đầu bằng tác vụ phức tạp. Hãy gửi một message đơn giản để kiểm tra đường truyền.

Ví dụ nội dung test:

hello

Enter fullscreen mode Exit fullscreen mode

Bạn chỉ cần xác nhận:

  • Task được tạo.
  • Có task ID.
  • Trạng thái chuyển đúng.
  • Có response hoặc artifact cuối cùng.

Bước 5: Thêm input thực tế

Sau khi đường text hoạt động, mới thêm từng phần:

  1. Metadata.
  2. File attachment.
  3. Dữ liệu có cấu trúc.
  4. Streaming.
  5. Auth production.

Cách làm này giúp bạn biết chính xác bước nào gây lỗi.

Bước 6: Tích hợp vào workflow

Khi tác nhân đã phản hồi ổn định, tích hợp nó vào workflow thật. Ở bước này, nên log tối thiểu:

  • Agent Card URL.
  • Task ID.
  • Trạng thái cuối.
  • Thời gian xử lý.
  • Lỗi truyền tải.
  • Lỗi logic do tác nhân trả về.
  • Artifact nhận được.

Những log này sẽ rất hữu ích khi bạn thay thế tác nhân hoặc nâng cấp phiên bản giao thức.

Khi nào nên dùng A2A?

A2A phù hợp khi bạn có một trong các trường hợp sau:

  • Bạn cần gọi tác nhân do nhóm khác vận hành.
  • Bạn muốn các tác nhân có thể hoán đổi.
  • Bạn có workflow nhiều bước, mỗi bước do một tác nhân chuyên biệt xử lý.
  • Bạn muốn tránh viết glue code tùy chỉnh cho từng integration.
  • Bạn cần mô hình task/status/artifact thống nhất.
  • Bạn muốn tách nội bộ framework khỏi hợp đồng giao tiếp bên ngoài.

A2A có thể chưa cần thiết nếu bạn chỉ có một tác nhân đơn lẻ gọi tool nội bộ. Trong trường hợp đó, MCP hoặc tích hợp API trực tiếp có thể đủ.

A2A còn mới, nhưng được hỗ trợ bởi một quỹ trung lập với nhà cung cấp và ngày càng có nhiều tích hợp framework. Nếu bạn đang xây dựng hệ thống đa tác nhân, việc coi giao tiếp giữa tác nhân là một giao thức hạng nhất từ sớm sẽ giúp giảm đáng kể lượng glue code về sau.

Xem thêm bài Các tác nhân AI là người tiêu dùng API mớithiết kế API cho tác nhân AI nếu bạn muốn chuẩn bị API cho các consumer không phải con người.

Các câu hỏi thường gặp

A2A có phải do Google tạo ra không?

Có. Google giới thiệu A2A vào năm 2025, sau đó tặng nó cho Linux Foundation như một dự án mở trung lập với nhà cung cấp. Đặc tả kỹ thuật được phát triển công khai và bất kỳ nhà cung cấp nào cũng có thể triển khai.

Tôi có cần A2A nếu chỉ có một tác nhân không?

Không. A2A giải quyết giao tiếp giữa nhiều tác nhân. Nếu bạn chỉ có một tác nhân cần gọi tool, database, file system hoặc API, MCP hoặc tích hợp tool trực tiếp thường phù hợp hơn.

Những framework nào hỗ trợ A2A?

A2A được thiết kế để không phụ thuộc framework. Bất kỳ tác nhân nào công bố Agent Card hợp lệ và tuân thủ giao thức đều có thể tham gia. Điều đó có nghĩa là LangGraph, CrewAI, AutoGen hoặc tác nhân tùy chỉnh đều có thể tương tác qua A2A nếu triển khai đúng hợp đồng.

A2A có giống MCP không?

Không. MCP kết nối một tác nhân với công cụ và nguồn dữ liệu. A2A kết nối các tác nhân với nhau. Chúng bổ sung cho nhau và có thể cùng tồn tại trong cùng một hệ thống.

Làm thế nào để gỡ lỗi một tích hợp A2A?

Dùng một trình gỡ lỗi A2A trực quan như Apidog A2A Debugger. Dán URL Agent Card, gửi message kiểm thử, sau đó kiểm tra request/response thô để phân biệt lỗi truyền tải với lỗi logic của tác nhân.

A2A có hỗ trợ tác vụ chạy dài không?

Có. Mô hình task có trạng thái rõ ràng và giao thức hỗ trợ server-sent events để stream kết quả từng phần cũng như cập nhật tiến độ. Nhờ vậy, các công việc dài không cần chặn bên gọi cho đến khi hoàn tất.