چیتشیت
A2A و پروتکلهای ارتباطی ایجنتها
A2A and Agent Communication Protocols
مقایسهی رو در روی MCP، A2A، ACP، ANP و FIPA-ACL. کارتهای ایجنت، تسکها، نامهای روی سیم و خطاها. A2A 1.0.1.
فهرست مطالب
مقایسهی چهار پروتکل در کنار هم
مقایسه| فاکتور | MCP | A2A | ACP | ANP |
|---|---|---|---|---|
| کاربرد اصلی | ایجنت به ابزار | ایجنت به ایجنت | ایجنت به ایجنت | ایجنت به ایجنت |
| فرمت مشخصات | JSON-RPC | JSON-RPC / REST / gRPC | OpenAPI 3.1 (REST) | JSON-RPC |
| شناسایی | فهرست ابزارها | /.well-known/agent-card.json | GET /agents، /.well-known/agent.yml | /.well-known/agent-descriptions |
| هویت | ضمنی (محلی) | طرحهای امنیتی (OAuth، mTLS) | در سطح سرور | شناسه W3C DID (did:wba) با رمزنگاری E2EE |
| ردگیری ممیزی | ندارد | پایهای (تاریخچهی وظیفه) | TrajectoryMetadata | به صورت رسمی مشخص نشده |
| استریمینگ | ندارد | SSE | SSE | مستقل از بستر انتقال |
| ویژگی منحصربهفرد | اسکیماهای ابزار | کارتهای ایجنت + مهارتها | ردگیری ممیزی با مسیر کامل اجرا | مذاکرهی فراپروتکل |
| وضعیت | پایدار | پایدار (نسخه 1.0) | در حال ادغام در A2A | توسعهی فعال |
کِی از کدام استفاده کنیم؟
مفهومها- MCP
- قصد فراخوانی یک ابزار خاص را دارید. ایجنت به ابزار.
- A2A
- قصد واگذاری یک وظیفهی کامل به ایجنتی دیگر را دارید.
- الگوهای A2A + ACP
- برای انطباق به ردگیری ممیزی نیاز دارید.
- ANP + A2A
- ایجنتها خارج از سازمان شما هستند و زیرساخت مشترکی ندارند.
- A2A + بروکر پیام
- ایجنتهای بیرونی روی زیرساخت مشترک.
- فراخوانی مستقیم RPC
- ریزفراخوانیهای حساس به تاخیر. چرخهی حیات A2A ناهمگام است.
- بدون پروتکل
- ایجنتها نیازی به گفتوگو با یکدیگر ندارند.
فراخوانی A2A روی بستر HTTP+JSON
معماریچرخهی حیات وظیفه با وقفه
گامبهگام- کلاینت
SendMessageرا بدونtaskIdمیفرستد. سرور وظیفه را ایجاد میکند. - سرورمقدار
TASK_STATE_SUBMITTEDو سپسTASK_STATE_WORKINGرا تنظیم میکند. - سرورداده ناقص است. وضعیت
TASK_STATE_INPUT_REQUIREDرا با پیامROLE_AGENTتنظیم میکند. - کلاینتپیام جدیدی با همان
taskIdو بخشdataارسال میکند. - سروربه وضعیت
TASK_STATE_WORKINGبرمیگردد و یک دستسازه اضافه میکند. - سرورمقدار
TASK_STATE_COMPLETEDرا ثبت میکند. وضعیتهای پایانی تغییرناپذیرند. - کلاینتپیگیری بعدی، وظیفهی جدیدی در همان
contextIdمیسازد.
وظایف A2A روی سیم
کار و کد| وظیفه | کد |
|---|---|
| شناسایی یک ایجنت | GET /.well-known/agent-card.json |
| ارسال و انتظار (JSON-RPC) | "method": "SendMessage" |
| ارسال، بازگشت فوری (HTTP+JSON) | `POST /message:send` with `configuration.returnImmediately` |
| بررسی دورهای یک وظیفه | `GetTask` or `GET /tasks/{id}` |
| استریمینگ وظیفه روی بستر SSE | `SendStreamingMessage` or `POST /message:stream` |
| اتصال مجدد به نشست یک وظیفهی در حال اجرا | `SubscribeToTask` or `/tasks/{id}:subscribe` |
| لغو یا فهرستکردن وظایف | `CancelTask`, `ListTasks` |
| اجرای سرور و کلاینت نمایشی | python3 code/main.py |
ساختار کارت ایجنت و پیام
کدjson
{"name": "research-agent", "version": "1.2.0",
"supportedInterfaces": [{"url": "<url>", // اولین بایندینگی که پشتیبانی میکنید را انتخاب کنید
"protocolBinding": "JSONRPC", "protocolVersion": "1.0"}],
"capabilities": {"streaming": true, "pushNotifications": true},
"securitySchemes": {"bearer": {"httpAuthSecurityScheme": {"scheme": "Bearer"}}},
"securityRequirements": [{"schemes": {"bearer": {"list": []}}}],
"defaultInputModes": ["text/plain"], // نوعهای مدیا
"skills": [{"id": "summarize_paper", "tags": ["research"]}]}
{"messageId": "msg-001", "role": "ROLE_USER", // یا ROLE_AGENT
"parts": [{"text": "Summarize this paper."}, // یک فیلد محتوا برای هر Part
{"raw": "...", "filename": "paper.pdf", "mediaType": "application/pdf"},
{"data": {"targetLength": "3 paragraphs"}}]} // بدون فیلد نوع (kind)
پیشفرضها و اعداد
پیشفرضها| تنظیم | پیشفرض | نکته |
|---|---|---|
A2A_VERSION | "1.0" | روی هر درخواست A2A-Version: 1.0 را ارسال کنید |
No `A2A-Version` header | 0.3 | سرور درخواست را با نسخهی 0.3 میخواند |
returnImmediately | False | SendMessage تا زمان وضعیت پایانی یا وقفه مسدود میماند |
A2A_MEDIA_TYPE | "application/a2a+json" | Content-Type بایندینگ HTTP+JSON |
PORT | 8765 | سرور نمایشی درس 16.12 |
ANP negotiation | max 10 rounds | سپس پایان مهلت زمانی (timeout) |
میراث FIPA-ACL
مقایسه| مشخصات نوین | معادل FIPA | موارد حفظشده | موارد حذفشده |
|---|---|---|---|
ابزار tools/call در MCP | request | نیت، شناسهی تطبیق | معناشناسی، هستیشناسی |
ابزار resources/read در MCP | query-ref | نیت، شناسهی تطبیق | معناشناسی رسمی |
| چرخهی حیات وظیفهی A2A | contract-net + request-when | چرخهی حیات ناهمگام | تضمینهای جامعیت |
| رویدادهای استریمینگ A2A | subscribe/notify | ارسال به روش push ناهمگام | اشتراک با گزارههای نوعدار |
| NLIP | محتوای زبان طبیعی | سازگار با LLM | اسکیما |
عیبیابی
عیبیابیخطای JSON-RPC کد
-32009- علت
- نبود یا نادرستی
A2A-Version - راهحل
- ارسال هدر
A2A-Version: 1.0
خطای JSON-RPC کد
-32601- علت
- نام متد نامعتبر است
- راهحل
- استفاده از نامهای PascalCase مانند
SendMessage
کد 400 در HTTP با عنوان
VERSION_NOT_SUPPORTED- علت
- فراخوانی HTTP+JSON بدون هدر
- راهحل
- افزودن هدر مربوطه به تمام درخواستها
کد 404 در HTTP با عنوان
TASK_NOT_FOUND- علت
- شناسهی وظیفهی نامعتبر در
GET /tasks/{id} - راهحل
- استفاده از شناسهی دریافتی در پاسخ
task
از دست رفتن بهروزرسانیها پس از اتمام
- علت
- تسک پس از رسیدن به وضعیت نهایی تغییرناپذیر است
- راهحل
- پیش از yield وضعیت نهایی را بررسی کنید
دادههای نامعتبر پس از بهروزرسانی کارت
- علت
- دریفت اسکیما میان نسخهها
- راهحل
- نسخهبندی مهارتها و اسکیماهای خروجی
واژهی یکسان، عمل اشتباه
- علت
- انحراف معنایی در نبود هستیشناسی
- راهحل
- استفاده از JSON Schema روی
contentو دستسازههای نوعدار
هجوم همزمان 50 ایجنت به
GET /agents- علت
- گلهی خروشان در فاز شناسایی
- راهحل
- کشکردن کارتهای ایجنت با استفاده از TTL
کوتهنوشتها
اصطلاحها- A2A
- ارتباط Agent2Agent. پروتکل همتا با کارتهای ایجنت و تسکها.
- ACP
- پروتکل ارتباطی ایجنت. اجراهای بر بستر REST همراهبا TrajectoryMetadata.
- ANP
- پروتکل شبکهی ایجنت. هویت با
did:wbaو رمزنگاری E2EE از نوع HPKE. - DID
- شناسهی غیرمتمرکز. هویت استاندارد W3C روی دامنهی اختصاصی خود ایجنت.
- NLIP
- پروتکل تعاملی زبان طبیعی از Ecma. نوع محتوای مبتنی بر زبان طبیعی.
- FIPA
- بنیاد ایجنتهای فیزیکی هوشمند. استانداردساز ACL در سال 2000.
- ACL
- زبان ارتباطی ایجنت. کلامکنش بههمراه محتوا و متادیتا.
- KQML
- زبان پرسوجو و دستکاری دانش (1993). پیشنیاز و نیای FIPA.
پرسشها
پرسش و پاسخ- فراخوان در پروتکل A2A چه چیزهایی را میبیند؟
- وضعیت وظیفه و دستسازهها را. جزئیات داخلی ایجنت فراخواندهشده پنهان میماند.
- چگونه از ثبت تسک تکراری در تلاش مجدد جلوگیری کنم؟
- با یکتاسازی بر اساس
messageIdارسالی از سمت کلاینت. - کارت ایجنت چگونه امضا میشود؟
- با یک JWS داخل
signaturesروی متن استاندارد JSON طبق RFC 8785، منهای خود فیلدsignatures. - پروتکل ACP چه چیزی به سیستم اضافه میکند؟
- هر پارت میتواند متادیتای
tool_name،tool_inputوtool_outputرا با خود حمل کند. - در صورت ناموفق بودن واکشی DID، سیستم باز بماند یا بسته؟
- طبق اصل حداقل اعتماد، دسترسی باید مسدود (Fail closed) شود.
- کدام پروتکلهای FIPA ارزش بازپیادهسازی دارند؟
- پروتکلهای Contract Net، Subscribe/Notify و Request-When.