تصور کنید یک عامل هوش مصنوعی را برای یک تحلیل جامع پنجدقیقهای به کار میگیرید، اما بهجای نتیجه، با یک چرخانندهٔ بیپایان (Spinner) و خطای Timeout مواجه میشوید. برای حذف این اصطکاک، پروتکل Agent2Agent (A2A) در راهنمای فنی منتشرشده در ۸ اکتبر ۲۰۲۶، فراخوانهای API مبهم را به تسکهای قابل مشاهده و قابل بازیابی تبدیل کرده است.
بیشتر ادغامهای فعلی هوش مصنوعی بر چرخهٔ سادهٔ درخواست-پاسخ (Request-Response) متکی هستند. این معماری زمانی شکست میخورد که یک عامل (Agent) برای تکمیل یک هدف پیچیده، ۳۰ ثانیه یا ۵ دقیقه زمان نیاز داشته باشد. در این حالت، اتصال از طریق پروکسیها که دارای محدودیت زمانی هستند قطع میشود، کاربر هیچ پیشرفتی نمیبیند و تلاشهای مجدد اغلب باعث تکرار کارها میشود، چون کلاینت نمیتواند تشخیص دهد که آیا عامل قبلاً کار را شروع کرده است یا خیر.
همانطور که در تحلیلهای قبلی ما دربارهی استانداردهای ارتباطی مدلها اشاره کردیم، نبود یک لایهٔ مدیریت وضعیت، بزرگترین مانع در مسیر اتوماسیونهای پیچیده است. A2A برای حل این مشکل، یک چرخهٔ حیات رسمی برای تسکها معرفی میکند. بهجای یک پاسخ واحد، هر تعامل یک تسک با یک ماشین وضعیت (State Machine) — شبیه به یک نقشه راه که دقیقاً میگوید هر مرحله در چه وضعیتی است و بعد از آن چه اتفاقی میافتد — ایجاد میکند. این ساختار به کلاینت اجازه میدهد دقیقاً ردیابی کند که عامل در کجای فرآیند قرار دارد. نام متدها و فیلدها در مشخصات A2A نسخهبندی شدهاند تا توسعهدهندگان با تثبیت نسخه (Pinning) روی ریلیزی که پیادهسازی میکنند، پایداری سیستم را تضمین کنند.
ماشین وضعیت تسک
طبق مستندات A2A، تسکها برای تضمین پیشبینیپذیری از مجموعه وضعیتهای مشخصی عبور میکنند:
- submitted: تسک پذیرفته شده اما کار هنوز شروع نشده است؛ کلاینت باید منتظر بهروزرسانی بماند.
- working: پردازش فعال است؛ کلاینت باید پیشرفت را نمایش دهد و به شنود ادامه دهد.
- input-required: عامل به اطلاعات بیشتری نیاز دارد (حضور انسان در چرخه یا Human-in-the-loop)؛ کلاینت باید کاربر را مطلع کرده و سپس پیام جدیدی را در همان تسک ارسال کند.
- completed: وضعیت نهایی (Terminal state)؛ آرتیفکتها آمادهاند و کلاینت نتیجه را میخواند.
- failed: وضعیت نهایی؛ خطایی رخ داده و پیامی دلیل شکست را توضیح میدهد. کلاینت خطا را نمایش داده و میتواند به صورت اختیاری آن را به عنوان یک تسک جدید مجدداً اجرا کند.
- canceled: وضعیت نهایی؛ تسک توسط کلاینت یا سیستم لغو شده است و کلاینت عملیات را متوقف میکند.
- unknown: وضعیت قابل تعیین نیست و کلاینت باید از طریق Polling یا کوئری، وضعیت تسک را استعلام کند.
دو وضعیت input-required و working برای رفتارهای پیشرفتهٔ عاملمحور حیاتی هستند. وضعیت اول، یک تسک را به یک گفتگو تبدیل میکند: عامل متوقف میشود، کلاینت اطلاعات گمشده را تامین میکند و همان تسک از سر گرفته میشود. وضعیت دوم نیز یک پرش ساده نیست؛ عامل میتواند در حین حضور در این وضعیت، پیامهای وضعیت و آرتیفکتهای جزئی متعددی ارسال کند. این رویکرد دقیقاً برای رفع مشکلاتی است که در تحلیل ما درباره ابهامات عملیاتی و خطاهای برچسبهای واحد در گردشکارهای AI بررسی شده بود.
دادههای تسک و زمینه
هر تسک مجموعهای از شناسهها و متادیتای خاص را برای حفظ تداوم در حالتهای مختلف تحویل داده ارسال دارد:
- taskId: شناسهای منحصربهبفرد برای هر واحد کاری خاص.
- contextId: کلیدی که تبادلات چندمرحلهای را گروهبندی میکند تا تضمین شود عامل تعاملات قبلی را به یاد میآورد.
- status: شامل یک برچسب زمانی (Timestamp) و یک پیام وضعیت.
- artifacts: خروجیهای واقعی و نهایی تسک.
سه مکانیزم تحویل داده
به گزارش dev.to، پروتکل A2A از JSON-RPC 2.0 روی HTTP استفاده میکند و سه روش متمایز برای مشاهدهٔ تسک بر اساس قابلیتهای کلاینت ارائه میدهد:
اول، فراخوان مسدودکننده (Blocking) message/send است. این متد یک پیام را ارسال کرده و تسک را تنها زمانی برمیگرداند که به یک وضعیت نهایی یا وضعیت تعاملی برسد. این روش برای تسکهای سریع که یک پاسخ ساده برای آنها کافی است طراحی شده، اما هیچ بهروزرسانی پیشرفتی برای کارهای طولانیمدت ارائه نمیدهد.
دوم، message/stream است که از رویدادهای ارسالی سرور (SSE) استفاده میکند. سرور با ارسال Content-Type: text/event-stream پاسخ میدهد و پیامهای JSON-RPC را به عنوان بهروزرسانیهای وضعیت یا آرتیفکت Push میکند. این روش به دلیل یکطرفه بودن (از سرور به کلاینت)، توانایی عبور از زیرساختهای استاندارد HTTP و قابلیت اتصال مجدد با معناشناسی استاندارد، گزینهٔ پیشفرض و توصیه شده است. در حالاتی که کلاینت فقط نیاز به دریافت پیشرفت دارد و ورودیهای جدید را از طریق درخواستهای جداگانه ارسال میکند، این روش بر WebSockets ترجیح داده میشود. این مدل استریمینگ، چالشهای مربوط به مدلسازی حالت برای حذف خطاهای توکن در تست رابطهای استریم را با ساختاری استانداردتر حل میکند.
سوم، اعلانهای Push از طریق tasks/pushNotification/set است. این قابلیت برای توابع بدون سرور (Serverless)، اپلیکیشنهای موبایل در پسزمینه یا موتورهای گردشکار که نمیتوانند ۵ دقیقه یک سوکت را باز نگه دارند، ضروری است. کلاینت یک URL بازگشتی (Callback URL) و یک توکن (یک JWT امضا شده که سرور هنگام بازگشت ارائه میدهد) ثبت میکند و طرحهای احراز هویت مانند "Bearer" را مشخص میکند. سپس سرور بهروزرسانیها — معمولاً وضعیتهای نهایی و نقاط عطف پیشرفت اختیاری — را به آن نقطه POST میکند.
جزئیات استریمینگ روی SSE
در حالت message/stream ابتدا پیشرفت و سپس خروجی منتقل میشود. یک تبادل معمولی از این الگو پیروی میکند:
۱. بهروزرسانی وضعیت: سرور فریمهای event: status-update میفرستد. برای مثال، عاملی که در حال تدوین طرح مهاجرت است، پیامهایی مثل «در حال بررسی نقاط انتهایی فعلی...» و سپس «در حال تدوین استقرار مرحلهبندی شده...» ارسال میکند در حالی که وضعیت همچنان working است.
۲. بهروزرسانی خروجی: سرور فریمهای event: artifact-update را ارسال میکند. این فریمها شامل یک artifactId و یک نام (مثلاً migration-plan.md) و بخشهای محتوایی هستند. پرچم append: true اجازه میدهد عامل یک سند را تکه تکه (Chunk by chunk) استریم کند.
۳. پایان: استریم زمانی بسته میشود که سرور آخرین بهروزرسانی وضعیت را با state: "completed" و مقدار final: true ارسال کند.
از آنجایی که بهروزرسانیها در قالب پیامهای JSON-RPC هستند، همان پوشش (Envelope) خطاهای انتقال و توقفهای input-required را مدیریت میکند. کلاینت برای مدیریت سوالات شفافساز به پروتکل دومی نیاز ندارد.
مدیریت خروجیها و تطبیق داده
خروجی در A2A یک رشتهٔ متنی ساده نیست، بلکه مجموعهای از آرتیفکتها (Artifacts) است. این آرتیفکتها از بخشهای مرتبشدهای تشکیل شدهاند، شامل:
- بخشهای متنی: برای نثر استاندارد یا مستندات.
- بخشهای فایل: برای اسناد تولید شده یا فایلهای باینری.
- بخشهای دادههای ساختاریافته: برای خروجیهای ماشینخوان.
برای جلوگیری از دست رفتن دادهها هنگام قطع اتصال، مسیر تطبیق (Reconciliation) تعبیه شده است. کلاینتها میتوانند با استفاده از tasks/get و ارائه taskId و contextId منحصربهفرد، وضعیت فعلی و آرتیفکتهای یک تسک را بازیابی کنند. این امر تضمین میکند که از سر گرفتن یک استریم باعث تکرار کار عامل نشود. علاوه بر این، متد tasks/cancel امکان لغو صریح یک تسک در حال اجرا را فراهم میکند. چنین دقت در مدیریت وضعیت، زیربنای همان تضمین ایمنی عملیاتی است که در معماریهای جدید خودکارسازی رفع حوادث زیرساختی دنبال میشود.
پیادهسازی و شناسایی
توسعهدهندگان میتوانند قابلیتهای خود را از طریق یک کارت عامل (Agent Card) در مسیر /.well-known/agent.json اعلام کنند. این کار به کلاینت اجازه میدهد پیش از تلاش برای اتصال، کشف کند که آیا یک عامل خاص از استریمینگ یا اعلانهای Push پشتیبانی میکند یا خیر، بهجای اینکه فرض کند هر عاملی استریم میکند.
این پروتکل همچنین مسیرهای OpenAPI صریحی را برای این عملیات تعریف میکند:
- POST /: عملیات
agentMessageStream. این متد یکMessageRequestمیپذیرد و یکtext/event-streamاز اشیاءTaskUpdateEventبرمیگرداند. این عملیات ممکن است کد200برای استریم یا کد202(در صورتی که تسک پذیرفته شده و برای باز شدن تنبل/Lazy در صف قرار گرفته باشد) برگرداند. - GET /tasks/{taskId}: عملیات
getTask. این متد مسیر تطبیق لازم برای دریافت اسکیمای فعلیTaskرا فراهم میکند.
این تغییر معماری، فرض بنیادی ارتباطات عاملمحور را عوض میکند و صنعت را از انتظار در برابر یک «جعبه سیاه» به سمتی میبرد که کارِ عامل، یک منبع درجهیک و قابل مشاهده است. این مدل کاملاً با الگوهای REST برای کارهای طولانیمدت (مانند 202 Accepted به همراه یک منبع وضعیت و وبهوکها) سازگار است، به این معنی که APIهای HTTP فعلی میتوانند بدون اختراع یک مدل اجرای جدید، به A2A متصل شوند.
برای توسعهدهندگان، این بدان معناست که رابطهای کاربری (UI) اکنون میتوانند فیدهای پیشرفت را به صورت لحظهای نمایش دهند و مراحل حضور انسان در چرخه را به عنوان وضعیتهای بومی مدیریت کنند، نه به عنوان خطاهای Timeout. این پروتکل شکاف بین چتهای ساده LLM و گردشکارهای خودمختار پیچیده و طولانیمدت را پر میکند.
گام بعدی شما
- مدل کاری عامل خود را بر اساس ماشین وضعیت A2A بازطراحی کنید تا از خطاهای Timeout خلاص شوید.
- برای پاسخهای استریمینگ، نوع رسانه SSE را در سرور خود پیادهسازی کنید.
- هر حالت تحویل داده را با
taskIdوcontextIdمرتبط کنید تا از تکرار عملیات در هنگام بازیابی اتصال جلوگیری شود.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است — به تحلیل ما دربارهی تراشههای Blackwell مراجعه کنید.




گفتگو