بناء عميل بروتوكول A2A باستخدام Python (2026)
١٦ يوليو ٢٠٢٦

بروتوكول Agent2Agent (A2A) هو معيار مفتوح يسمح لوكلاء الذكاء الاصطناعي (AI agents) المبنيين على أطر عمل مختلفة باكتشاف بعضهم البعض، وتفويض المهام، وتبادل النتائج — فبينما يسمح MCP لوكيل واحد باستدعاء أداة، يتيح A2A لوكيل واحد استدعاء وكيل آخر12. وقد وصل إلى أول إصدار مستقر، v1.0، في أبريل 2026، وهو مدعوم الآن من قبل لجنة توجيه تقنية تضم ممثلين من AWS وCisco وGoogle وIBM Research وMicrosoft وSalesforce وSAP وServiceNow2.
ملخص
تحول A2A من مجرد مقترح خاص بـ Google إلى معيار تابع لمؤسسة Linux Foundation مع دعم أكثر من 150 منظمة، وما يقرب من 24,000 GitHub stars في مستودع المواصفات الأساسي، وتكاملات إنتاجية في Azure AI Foundry وCopilot Studio وAmazon Bedrock AgentCore Runtime1. الإصدار 1.0 — وهو أول مواصفة مستقرة وجاهزة للإنتاج — تم إطلاقه في أبريل 2026 مع بطاقات وكلاء (Agent Cards) موقعة، ودعم تعدد المستأجرين (multi-tenancy)، والتفاوض على الإصدارات2.
يقوم هذا الدرس التعليمي ببناء خادم A2A حقيقي باستخدام a2a-sdk الرسمي (الإصدار 1.1.0 حالياً)، باستخدام نمط Agent Skill وAgent Card وAgent Executor الخاص بـ SDK، واستدعاؤه عبر JSON-RPC. كل ما ورد في أقسام الخطوات والتحقق أدناه تم تثبيته وتشغيله بالفعل، وليس مجرد وصف. يتطلب Python 3.10+. وقت البناء: 20-25 دقيقة.
ما ستتعلمه
- ما الذي تغير في A2A v1.0 — بطاقات الوكلاء الموقعة، وتعدد المستأجرين، والتفاوض على الإصدارات — ولماذا تحرك النظام البيئي بسرعة كافية للوصول إلى أكثر من 150 منظمة داعمة في غضون عام واحد تقريباً
- كيف تصف Agent Skill وAgent Card ما يمكن لوكيلك القيام به، وكيف يكتشف وكيل آخر أو عميل ذلك عبر HTTP
- كيفية تنفيذ واجهة
AgentExecutorالخاصة بـ SDK لمعالجة مهمة واردة وبث تحديثات الحالة مرة أخرى - كيفية تشغيل خادم A2A باستخدام Starlette وUvicorn باستخدام مصانع المسارات (route factories) الخاصة بـ SDK
- كيفية استدعاء وكيلك عبر JSON-RPC — بما في ذلك ترويسة (header) واحدة لم يوضحها دليل البدء السريع الرسمي، والتي وجدها هذا الدرس التعليمي من خلال الاختبار على خادم حي
- أين ينتهي A2A ويبدأ MCP، حتى تعرف أيهما تختار (أو متى تحتاج لكليهما)
المتطلبات الأساسية
- Python 3.10 أو أحدث — تذكر البيانات الوصفية لـ SDK على PyPI وجود
Requires-Python: >=3.103 a2a-sdkمع إضافات خادم HTTP:pip install "a2a-sdk[http-server]"(الإصدار الحالي 1.1.0، صدر في 29 مايو 2026)3uvicornوstarletteلتشغيل خادم ASGI (إضافةhttp-serverتسحب Starlette؛ أما Uvicorn فيتم تثبيته بشكل منفصل، تماشياً مع إعداد دليل البدء السريع الرسمي)4- دراية أساسية بـ
async/awaitفي Python — كل طريقة خادم A2A في هذا الدرس التعليمي هي coroutine
لماذا من وكيل إلى وكيل، ولماذا لا نكتفي بـ MCP؟
يقوم MCP (Model Context Protocol) بتوحيد كيفية وصول وكيل واحد إلى الأدوات والملفات ومصادر البيانات. أما A2A فيوحد شيئاً مختلفاً: كيف يجد وكيلان مستقلان — ربما تم بناؤهما على أطر عمل مختلفة، من قبل موردين مختلفين، ويعملان على خوادم مختلفة — بعضهما البعض ويسلمان العمل لبعضهما.
إعلان A2A v1.0 صريح بشأن هذا التقسيم: "يُستخدم MCP عادةً لتكامل الأدوات والسياق على مستوى الوكيل الفردي. بينما يركز A2A على التواصل والتنسيق بين الوكلاء. عملياً، ستستخدم العديد من الأنظمة كليهما: MCP داخل الوكلاء، وA2A بين الوكلاء."2 ويرسم تأطير مؤسسة Linux Foundation نفس الخط: "يحدد A2A كيفية تواصل الوكلاء وتنسيقهم مع بعضهم البعض عبر الحدود التنظيمية، بينما يحدد MCP كيفية اتصال الوكلاء بالأدوات الداخلية ومصادر البيانات."1
إذا كنت قد بنيت بالفعل خادم MCP للوصول إلى الأدوات، فإن A2A ليس بديلاً عنه — راجع MCP Goes Stateless لمعرفة جانب تكامل الأدوات في هذا الثنائي.
ما الجديد في A2A v1.0
بدأ A2A كمقترح من Google في أبريل 2025 وتم المساهمة به في مؤسسة Linux Foundation من أجل حوكمة محايدة بعد شهرين، في يونيو 20255. الإصدار 1.0، الذي صدر في أبريل 2026، هو أول إصدار يصفه المشروع بأنه مستقر وجاهز للإنتاج2. هناك ثلاثة تغييرات بارزة:
- بطاقات وكلاء موقعة (Signed Agent Cards). يمكن الآن توقيع بطاقات الوكلاء تشفيرياً للتحقق من الهوية: حيث تغلف
AgentCardSignatureتوقيع JWS (JSON Web Signature, RFC 7515) فوق محتوى البطاقة، بحيث يمكن للعميل التأكد تشفيرياً من أن البطاقة جاءت بالفعل من الوكيل الذي تدعيه ولم يتم تعديلها أثناء النقل6. - تعدد المستأجرين (Multi-tenancy). يمكن لنقطة نهاية A2A واحدة الآن استضافة العديد من الوكلاء بشكل آمن، بدلاً من الحاجة إلى نقطة نهاية لكل وكيل2.
- التفاوض على الإصدارات (Version negotiation). أضاف البروتوكول مسار انتقال محدداً بحيث يمكن لـ v1.0 وتنسيق السلك (wire format) القديم v0.3 التعايش معاً — يمكن لبطاقة الوكيل الإعلان عن دعم كليهما، وينتقل العملاء تدريجياً بدلاً من التحول المفاجئ2. (يوضح قسم التحقق في هذا الدرس التعليمي بالضبط أين يظهر هذا التفاوض في طلب حقيقي.)
أرقام الاعتماد تدعم وصف "الجاهزية للإنتاج": أكثر من 150 منظمة تدعم الآن A2A، ارتفاعاً من أكثر من 50 منظمة قبل عام1. مستودع البروتوكول الأساسي، الذي ذكرت مؤسسة Linux Foundation أنه وصل إلى أكثر من 22,000 GitHub stars في إعلان أبريل 2026، نما منذ ذلك الحين ليصل إلى ما يقرب من 24,00017؛ ونظام الـ SDK البيئي، الذي كان يضم خمس لغات جاهزة للإنتاج وقت ذلك الإعلان — Python و JavaScript وJava وGo و.NET — أضاف منذ ذلك الحين لغة سادسة وهي Rust17.
قامت Microsoft بدمج A2A في Azure AI Foundry و Copilot Studio1: حيث كان بإمكان وكلاء Foundry بالفعل استدعاء وكلاء A2A آخرين كأداة، وأضافت Microsoft الاتجاه العكسي — وهو عرض وكيل Foundry كنقطة نهاية A2A يمكن للوكلاء الآخرين استدعاؤها — في المعاينة العامة في Build 20268. كما أضافت AWS الدعم من خلال Amazon Bedrock AgentCore Runtime1. وهناك إطاران عمل للوكلاء قد تستخدمهما بالفعل يدعمان A2A بشكل أصلي: يمكن لوكلاء LangGraph و CrewAI الآن تفويض المهام الفرعية لبعضهم البعض عبر أطر العمل دون مشاركة الذاكرة الداخلية1.
وكما قال Rao Surapaneni من Google Cloud: "إن وكلاء الذكاء الاصطناعي مفيدون فقط بقدر قدرتهم على التعاون، واعتماد A2A من قبل أكثر من 150 منظمة يؤكد الحماس الواسع لبروتوكول مفتوح وقابل للتشغيل البيني."1
الخطوة 1: تثبيت SDK
mkdir a2a-hello-agent && cd a2a-hello-agent
python3 -m venv .venv && source .venv/bin/activate
pip install "a2a-sdk[http-server]" uvicorn
هذا يثبت a2a-sdk 1.1.0، والذي ينفذ مواصفات A2A 1.0 بشكل أصلي ويتضمن وضع التوافق مع تنسيق السلك الأقدم 0.3، عبر نقل JSON-RPC و HTTP+JSON/REST و gRPC لكل من العميل والخادم4.
الخطوة 2: تعريف مهارة الوكيل وبطاقة الوكيل
قبل أن يتمكن وكيل A2A من القيام بأي شيء، يحتاج إلى التصريح بما يمكنه فعله (مهارة Skill) ونشر ذلك كـ Agent Card (بطاقة وكيل) قابلة للقراءة آلياً — وهي بمثابة "بطاقة العمل" التي يجلبها الوكلاء الآخرون لتقرير ما إذا كانوا سيتحدثون مع وكيلك9. احفظ هذا الملف باسم agent_card.py:
from a2a.types import AgentCapabilities, AgentCard, AgentInterface, AgentSkill
skill = AgentSkill(
id='echo_bot',
name='Echo Bot',
description='An example agent that acknowledges a request and echoes it back.',
input_modes=['text/plain'],
output_modes=['text/plain'],
tags=['a2a', 'echo-example'],
examples=['hi', 'how are you'],
)
public_agent_card = AgentCard(
name='Hello World Agent',
description='Just a hello world agent',
version='0.0.1',
default_input_modes=['text/plain'],
default_output_modes=['text/plain'],
capabilities=AgentCapabilities(streaming=True, extended_agent_card=True),
supported_interfaces=[
AgentInterface(
protocol_binding='JSONRPC',
url='http://127.0.0.1:9999',
protocol_version='1.0',
)
],
skills=[skill],
)
كل حقل هنا — id، و input_modes/output_modes، و tags، و examples في المهارة؛ و supported_interfaces، و capabilities، و default_input_modes في البطاقة — يطابق تعريفات الأنواع الخاصة بـ SDK، وهو ما تم تأكيده من خلال بناء هذه الكائنات مباشرة مقابل حزمة 1.1.0 المثبتة10. حقل supported_interfaces خاص بالإصدار v1.0: وهو عبارة عن قائمة مرتبة من كائنات AgentInterface (ربط البروتوكول، وعنوان URL، وإصدار البروتوكول)، وهو ما يسمح لبطاقة واحدة الآن بالإعلان عن طرق نقل متعددة بدلاً من عنوان URL واحد ثابت. افتراضياً، يقوم خادم A2A بنشر هذه البطاقة عند /.well-known/agent-card.json9.
الخطوة 3: كتابة منفذ الوكيل (Agent Executor)
منفذ الوكيل Agent Executor هو المكان الذي يوجد فيه منطقك الفعلي — فهو الجسر بين البروتوكول (الذي يتعامل معه SDK) وأي شيء يقوم به وكيلك. يوفر SDK فئة أساسية مجردة، AgentExecutor، مع طريقتين للتنفيذ: execute() لمعالجة الطلب، و cancel() لمعالجة الإلغاء9. احفظ هذا الملف باسم agent_executor.py:
from a2a.server.agent_execution import AgentExecutor, RequestContext
from a2a.server.events import EventQueue
from a2a.server.tasks import TaskUpdater
from a2a.types import TaskState
from a2a.helpers import new_task_from_user_message, new_text_message, new_text_part, get_message_text
class HelloWorldAgent:
async def invoke(self, user_request: str) -> str:
return f'Hello, World! I have received your request ({user_request})'
class HelloWorldAgentExecutor(AgentExecutor):
def __init__(self) -> None:
self.agent = HelloWorldAgent()
async def execute(self, context: RequestContext, event_queue: EventQueue) -> None:
task = context.current_task or new_task_from_user_message(context.message)
if not context.current_task:
await event_queue.enqueue_event(task)
task_updater = TaskUpdater(event_queue=event_queue, task_id=task.id, context_id=task.context_id)
await task_updater.update_status(
state=TaskState.TASK_STATE_WORKING,
message=new_text_message('Processing request...'),
)
query = get_message_text(context.message)
result = await self.agent.invoke(user_request=query) if query else 'No text input is provided!'
await task_updater.add_artifact(parts=[new_text_part(text=result, media_type='text/plain')])
await task_updater.update_status(
state=TaskState.TASK_STATE_COMPLETED,
message=new_text_message('Request is completed!'),
)
async def cancel(self, context: RequestContext, event_queue: EventQueue) -> None:
raise NotImplementedError('cancel not supported')
بالمرور عبر execute(): تقوم بسحب المهمة الحالية من سياق الطلب (أو إنشاء واحدة لمحادثة جديدة تماماً)، وتنقل المهمة إلى TASK_STATE_WORKING وترسل رسالة حالة، ثم تشغل منطق العمل الفعلي (self.agent.invoke())، وترفق النتيجة كـ artifact، وأخيراً تحدد حالة المهمة كـ TASK_STATE_COMPLETED. كل استدعاء من هذه الاستدعاءات يمر عبر EventQueue، وهو ما يجعل SDK يحول كودك الذي يبدو متزامناً إلى أحداث تحديث مهام متدفقة يستلمها عميل A2A9.
الخطوة 4: تشغيل الخادم
يوفر SDK مصانع مسارات (route factories) تتصل بـ Starlette (أو FastAPI) بدلاً من خادم مخصص — وهذا ما يجعل من الممكن إضافة برمجيات وسيطة (middleware) خاصة بك للمصادقة أو تسجيل السجلات حول وكيل A2A9. احفظ هذا الملف باسم server.py:
import uvicorn
from a2a.server.request_handlers import DefaultRequestHandler
from a2a.server.routes import create_agent_card_routes, create_jsonrpc_routes
from a2a.server.tasks import InMemoryTaskStore
from starlette.applications import Starlette
from agent_card import public_agent_card
from agent_executor import HelloWorldAgentExecutor
request_handler = DefaultRequestHandler(
agent_executor=HelloWorldAgentExecutor(),
task_store=InMemoryTaskStore(),
agent_card=public_agent_card,
)
routes = []
routes.extend(create_agent_card_routes(public_agent_card))
routes.extend(create_jsonrpc_routes(request_handler, '/'))
app = Starlette(routes=routes)
if __name__ == '__main__':
uvicorn.run(app, host='127.0.0.1', port=9999)
يربط DefaultRequestHandler المنفذ الخاص بك بـ TaskStore (هنا، مخزن في الذاكرة) وبطاقة الوكيل، ويوجه استدعاءات A2A الواردة إلى execute()/cancel() في المنفذ الخاص بك9. قم بتشغيله باستخدام python server.py، وسيكون متاحاً على http://127.0.0.1:9999.
الخطوة 5: استدعاء الوكيل
مع تشغيل الخادم، قم بجلب بطاقة الوكيل الخاصة به وأرسل له مهمة:
curl -s http://127.0.0.1:9999/.well-known/agent-card.json
curl -s -X POST http://127.0.0.1:9999/ \
-H "Content-Type: application/json" \
-H "A2A-Version: 1.0" \
-d '{"jsonrpc":"2.0","id":1,"method":"SendMessage","params":{"message":{"role":"ROLE_USER","parts":[{"text":"Say hello."}],"messageId":"test-msg-1"}}}'
التحقق
هذا ليس مجرد وصف لكود من المفترض أن يعمل — بل تم تثبيته وتشغيله بالفعل. تم تثبيت a2a-sdk[http-server] و uvicorn في بيئة Python 3.10.12 افتراضية نظيفة؛ وتم استيراد AgentSkill و AgentCard و AgentExecutor و TaskUpdater والدوال المساعدة (new_task_from_user_message و new_text_message و new_text_part و get_message_text) وفحص تواقيعها مباشرة مقابل حزمة 1.1.0 المثبتة قبل كتابة كود البرنامج التعليمي أعلاه، للتأكد من أن كل اسم حقل ومعامل يطابق إصدار SDK هذا بدلاً من إصدار أقدم10. ثم تم تشغيل الخادم من الخطوة 4 فعلياً، وأرجعت نقطة نهاية بطاقة الوكيل بالضبط JSON المتوقع:
{"name":"Hello World Agent","description":"Just a hello world agent","supportedInterfaces":[{"url":"http://127.0.0.1:9999","protocolBinding":"JSONRPC","protocolVersion":"1.0"}],"version":"0.0.1","capabilities":{"streaming":true,"extendedAgentCard":true},"defaultInputModes":["text/plain"],"defaultOutputModes":["text/plain"],"skills":[{"id":"echo_bot","name":"Echo Bot", ...}]}
فشلت المحاولة الأولى لإرسال رسالة مع {"error":{"code":-32601,"message":"Method not found"}} باستخدام اسم الطريقة بنمط REST وهو message/send — هذا الاسم صالح فقط في مسار REST المنفصل في SDK، وليس في JSON-RPC.
أدى الانتقال إلى اسم طريقة JSON-RPC وهو SendMessage إلى تقدم أكبر ولكن واجه خطأً ثانياً أكثر إثارة للاهتمام: "A2A version '0.3' is not supported by this handler. Expected version '1.0'." يفترض SDK أن أي طلب JSON-RPC غير محدد يتبع تنسيق السلك 0.3 الأقدم ما لم يحمل الطلب ترويسة HTTP صريحة A2A-Version: 1.0 — وهذا هو تفاوض الإصدار من مواصفات v1.02 المفروض في الكود، في a2a/utils/version_validator.py وثابت VERSION_HEADER في a2a/utils/constants.py10.
صفحات البدء السريع لـ Python التي يتبعها هذا البرنامج التعليمي لا توضح هذه الترويسة لاستدعاءات JSON-RPC الخام، لأنها تستدعي الخادم من خلال عميل SDK الخاص (create_client)، والذي يضبطها داخلياً؛ وقد ظهر ذلك هنا فقط من خلال قراءة مصدر الحزمة المثبتة بعد فشل أول محاولتين لـ JSON-RPC الخام. أدى إضافة الترويسة إلى إنتاج مهمة كاملة وناجحة:
{"result":{"task":{"id":"48afdef2-...","status":{"state":"TASK_STATE_COMPLETED", ...},"artifacts":[{"parts":[{"text":"Hello, World! I have received your request (Say hello.)"}]}]}},"id":1,"jsonrpc":"2.0"}
ما لم يتم تشغيله: لم يتم اختبار عميل Python الخاص بـ SDK (a2a.client.create_client) ولا وضع البث (streaming mode) الخاص به — وبدلاً من ذلك، تم استخدام استدعاء JSON-RPC القائم على curl الموضح أعلاه، لأنه يوضح بروتوكول النقل مباشرة دون الاعتماد على التجريدات الخاصة بمكتبة العميل. إذا كنت بحاجة إلى تحديثات مهام بنظام البث، فإن create_client مع ClientConfig(streaming=True) هو المسار الموثق9.
استكشاف الأخطاء وإصلاحها
{"error":{"message":"Method not found"}} عند استخدام message/send. أنت تستخدم اسم طريقة REST مقابل نقطة نهاية JSON-RPC. استخدم SendMessage لـ JSON-RPC، أو قم بتركيب مسارات REST بدلاً من ذلك إذا كنت تريد طرقاً على نمط المسارات (path-style methods).
VERSION_NOT_SUPPORTED / "Expected version '1.0'". أضف ترويسة A2A-Version: 1.0 إلى الطلب. بدونها، يفترض الخادم شكل JSON-RPC القديم 0.3.
جلب بطاقة العميل (Agent Card) يعيد 404. تأكد من أنك قمت بتسجيل create_agent_card_routes(public_agent_card) في تطبيق Starlette — فهي قائمة مسارات منفصلة عن create_jsonrpc_routes، وتجاهلها يعني أن /.well-known/agent-card.json لم يتم تركيبه أبداً.
يبدو أن execute() الخاصة بالمنفذ (Executor) لا تنتهي أبداً. يجب أن يمر كل حدث (update_status, add_artifact) عبر EventQueue التي تم تزويدك بها — إذا قام منفذ مخصص بابتلاع الاستثناءات قبل استدعاء update_status(state=TaskState.TASK_STATE_COMPLETED, ...), سيتوقف العميل عن العمل في انتظار حالة نهائية.
هل A2A بديل لـ MCP؟
لا. A2A و MCP يحلان طبقات مختلفة من نفس المشكلة وقد صُمما ليتم استخدامهما معاً، وليس كبدائل2. يتحكم MCP في كيفية استدعاء العميل للأدوات وواجهات البرمجة (APIs) ومصادر البيانات التي يملكها؛ بينما يتحكم A2A في كيفية تحدث هذا العميل نفسه مع عميل مختلف تماماً — والذي قد لا يتحكم فيه ولا يمكنه رؤية تفاصيله الداخلية. يستخدم النظام الإنتاجي النموذجي MCP داخل كل عميل و A2A بين العملاء12.
هل أحتاج إلى Google Cloud لاستخدام A2A؟
لا. تم اقتراح A2A في الأصل من قبل Google ولكن تديره مؤسسة Linux Foundation منذ يونيو 2025، بموجب رخصة Apache 2.0، مع لجنة توجيه تقنية تضم AWS و Cisco و Google و IBM Research و Microsoft و Salesforce و SAP و ServiceNow25. وهو يعمل الآن بشكل أصلي على Azure AI Foundry و Copilot Studio من Microsoft وعلى Amazon Bedrock AgentCore Runtime، جنباً إلى جنب مع أدوات Google Cloud الخاصة1. يعمل Python SDK المستخدم في هذا البرنامج التعليمي في أي مكان يعمل فيه Python — لا يوجد اعتماد على السحابة لبناء أو اختبار عميل A2A محلياً.
الخطوات التالية وقراءات إضافية
يغطي هذا البرنامج التعليمي المسار غير المعتمد على البث. يدعم SDK أيضاً تحديثات المهام بنظام البث والمحادثات متعددة الأدوار عبر نفس اتصال JSON-RPC — وهو أمر يستحق التجربة بمجرد أن تصبح دورة طلب/استجابة واحدة غير كافية9.
إذا كان عميلك يحتاج أيضاً إلى استدعاء أدوات أو مصادر بيانات داخلية (بدلاً من عميل آخر)، فهذه هي المهمة التي صُمم MCP لأجلها؛ راجع MCP Goes Stateless لمعرفة المواصفات الحالية. وإذا كان أي من العملاء على جانبي استدعاء A2A يجب أن يتوقف لكي يوافق شخص ما على إجراء خطر قبل تنفيذه، فإن نفس نوع بوابة الموافقة المذكورة في إضافة موافقة بشرية (Human-in-the-Loop) إلى Claude Agent SDK تنطبق على مهمة A2A عن بُعد تماماً كما تنطبق على استدعاء أداة محلية.
الحواشي السفلية
-
مؤسسة Linux Foundation، "بروتوكول A2A يتجاوز 150 منظمة، ويصل إلى منصات سحابية كبرى، ويشهد استخداماً إنتاجياً في المؤسسات في عامه الأول" — https://www.linuxfoundation.org/press/a2a-protocol-surpasses-150-organizations-lands-in-major-cloud-platforms-and-sees-enterprise-production-use-in-first-year (سان فرانسيسكو، 9 أبريل 2026؛ أكثر من 150 منظمة، أكثر من 22,000 GitHub stars على المستودع الأساسي، نظام SDK بخمس لغات، تكامل مع Azure AI Foundry/Copilot Studio و Amazon Bedrock AgentCore Runtime، توافق مع LangGraph/CrewAI، أكثر من 60 منظمة في AP2، اقتباس من Rao Surapaneni؛ تم الجلب في 2026-07-16) ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12
مميزات v1.0: بطاقات Agent موقعة، تعدد المستأجرين، تفاوض الإصدارات، بنية متوافقة مع الويب؛ لجنة توجيه تقنية مكونة من ثماني شركات؛ اقتباس "مكمل لـ MCP وليس بديلاً عنه"؛ تم الجلب في 2026-07-16) ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11
-
PyPI, صفحة مشروع
a2a-sdk— https://pypi.org/project/a2a-sdk/ (إصدار 1.1.0 صدر في 29 مايو 2026؛ إصدار 1.0.0 صدر في 20 أبريل 2026؛Requires-Python: >=3.10؛ ترخيص Apache-2.0؛ المؤلف Google LLC؛ تم الجلب في 2026-07-16) ↩ ↩2 -
GitHub, ملف README الخاص بـ
a2aproject/a2a-python— https://GitHub.com/a2aproject/a2a-python (SDK يطبق مواصفات A2A 1.0 مع وضع توافق 0.3؛ جدول دعم نقل JSON-RPC/HTTP+JSON/REST/gRPC؛ إضافات التثبيت؛ تم الجلب في 2026-07-16) ↩ ↩2 -
مدونة Google Cloud، "الإعلان عن مجموعة أدوات مطورين كاملة لتوسيع نطاق وكلاء A2A على Google Cloud" — https://cloud.google.com/blog/products/ai-machine-learning/agent2agent-protocol-is-getting-an-upgrade (نُشر في 31 يوليو 2025؛ الإعلان الأصلي في أبريل 2025 وتاريخ المساهمة في Linux Foundation في يونيو 2025، إصدار A2A v0.3؛ تم الجلب في 2026-07-16) ↩ ↩2
-
A2A Protocol / The Linux Foundation, "Definitions" — https://a2a-protocol.org/latest/definitions/ (تعريف رسالة
AgentCardSignature: عبارة عن JWS — RFC 7515 JSON Web Signature — فوق بطاقة Agent، تُستخدم للتحقق من الهوية التشفيرية؛ تم الجلب في 2026-07-16) ↩ -
GitHub, مستودع
a2aproject/A2A— https://GitHub.com/a2aproject/A2A (عدد النجوم في نطاق 23.9k-24.8k عبر عمليتي جلب مباشرتين في 2026-07-16، أحدث إصدار v1.0.1 في 28 مايو 2026، وستة SDKs رسمية مدرجة تحت "Use the SDKs" — Python، Go، JavaScript، Java، .NET، و Rust؛ تم التحقق مباشرة مقابل لقطة Linux Foundation في 9 أبريل 2026 في 1 لتأكيد الأرقام الحالية) ↩ ↩2 -
مدونة Microsoft Foundry، "بناء وتشغيل الوكلاء على نطاق واسع باستخدام Microsoft Foundry في Build 2026" — https://devblogs.microsoft.com/foundry/agent-service-build2026/ (تينا شوكمان، نُشر في 2 يونيو 2026؛ تؤكد أن Foundry يدعم A2A الصادر — استدعاء وكلاء عن بُعد كأداة — "منذ إطلاق أداة A2A"، مع شحن A2A الوارد (عرض وكيل Foundry كنقطة نهاية A2A) كمعاينة عامة في Build 2026؛ تم الجلب في 2026-07-16) ↩
-
دليل البدء السريع لـ A2A Protocol Python — https://a2a-protocol.org/latest/tutorials/python/3-agent-skills-and-card/، و https://a2a-protocol.org/latest/tutorials/python/4-agent-executor/، و https://a2a-protocol.org/latest/tutorials/python/5-start-server/، و https://a2a-protocol.org/latest/tutorials/python/6-interact-with-server/ (حقول Agent Skill/Agent Card، واجهة AgentExecutor، إعداد خادم Starlette مع مصانع المسارات، مسار بطاقة الوكيل المعروف، نمط عميل البث؛ تم الجلب في 2026-07-16) ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8
-
a2a-sdk1.1.0، تم تثبيته مباشرة عبرpip install "a2a-sdk[http-server]" uvicornفي بيئة افتراضية Python 3.10.12 وتم فحصه باستخدامinspect.signature()مقابلa2a.types، وa2a.server.agent_execution، وa2a.server.tasks، وa2a.helpers؛ تم اختبار الخادم المباشر باستخدامcurlمقابل/.well-known/agent-card.jsonونقطة نهاية JSON-RPC، بما في ذلك متطلبات ترويسةA2A-Versionالموجودة فيa2a/utils/version_validator.pyوa2a/utils/constants.py(2026-07-16) ↩ ↩2 ↩3
