Паспорт протокола#
| Характеристика | Значение |
|---|---|
| Полное название | Agent2Agent (A2A) Protocol |
| Действующая версия | 1.0.0, выпущена 12 марта 2026 |
| Предыдущие версии | 0.3.0, 0.2.6, 0.1.0 |
| Управление | Agentic AI Foundation, Linux Foundation |
| Лицензия | Apache 2.0 |
| Нормативный источник | Файл spec/a2a.proto в репозитории проекта |
| Привязки протокола | JSON-RPC 2.0, gRPC, HTTP+JSON (REST); допускаются собственные привязки |
| Потоковая передача | Server-Sent Events для JSON-RPC и HTTP+JSON, потоковые вызовы gRPC |
| Обнаружение агента | /.well-known/agent-card.json, реестры, прямая настройка |
| Медиатип | application/a2a+json |
| Служебные параметры | A2A-Version, A2A-Extensions |
| Аутентификация | API-ключ, HTTP-аутентификация, OAuth 2.0, OpenID Connect, взаимный TLS |
| Подпись карточки | JWS (RFC 7515) над JSON, канонизированным по RFC 8785 |
| Формат ошибок | google.rpc.Status с ErrorInfo, домен a2a-protocol.org |
| Официальные SDK | Python, Go, JavaScript, Java, .NET |
Три уровня спецификации#
Спецификация разделена на три уровня, и это главное, что нужно понять перед чтением:
- Модель данных. Задача, сообщение, часть, артефакт, карточка агента и другие объекты. Описаны один раз, независимо от способа передачи.
- Абстрактные операции. Что можно сделать: отправить сообщение, получить задачу, отменить, подписаться на обновления.
- Привязки протокола. Как операции выглядят на проводе в JSON-RPC, gRPC и HTTP+JSON. Все три привязки обязаны быть функционально равнозначными — см. привязка протокола.
Благодаря этому одна и та же задача может прийти к агенту по разным привязкам, а новые привязки добавляются без изменения модели данных.
Операции#
| Операция | Что делает |
|---|---|
SendMessage | Отправляет сообщение агенту. В ответ приходит задача или, для простых случаев, сразу ответное сообщение. |
SendStreamingMessage | То же, но с потоком обновлений: состояние задачи и порции артефактов в реальном времени. |
GetTask | Возвращает текущее состояние задачи, артефакты и, по запросу, историю сообщений. |
ListTasks | Список задач с фильтрами по контексту и состоянию, постраничный вывод по курсору. Новая операция в 1.0. |
CancelTask | Просит отменить задачу. Отмена не гарантирована, если задача уже завершена. |
SubscribeToTask | Подключает поток обновлений к уже существующей задаче, например после обрыва связи. |
CreateTaskPushNotificationConfig и ещё три | Создание, чтение, список и удаление настроек push-уведомлений для задачи. |
GetExtendedAgentCard | Отдаёт расширенную карточку клиенту, прошедшему аутентификацию. |
Пример запроса в привязке JSON-RPC. Клиент передаёт версию протокола в заголовке A2A-Version: 1.0.
{
"jsonrpc": "2.0",
"id": 1,
"method": "SendMessage",
"params": {
"message": {
"messageId": "9b6f3a2e-5c1d-4e8a-9f0b-7d2c1a4e6b35",
"role": "ROLE_USER",
"parts": [
{
"text": "Подбери стеллаж для склада высотой 2 м, бюджет до 30 000 ₽"
}
]
},
"configuration": {
"acceptedOutputModes": [
"application/json"
],
"returnImmediately": false
}
}
}По умолчанию операция ждёт, пока задача дойдёт до конечного или прерванного состояния. С returnImmediately: true сервер сразу возвращает задачу в работе, а обновления клиент получает опросом, потоком или push-уведомлениями.
Жизненный цикл задачи#

- Рабочие:
TASK_STATE_SUBMITTED— задача принята,TASK_STATE_WORKING— выполняется. - Прерванные:
TASK_STATE_INPUT_REQUIRED— агенту нужны данные от клиента,TASK_STATE_AUTH_REQUIRED— нужна аутентификация. - Конечные:
TASK_STATE_COMPLETED,TASK_STATE_FAILED,TASK_STATE_CANCELED,TASK_STATE_REJECTED. После них задача сообщений не принимает.
Результаты работы передаются артефактами, а не сообщениями. Сообщения служат для постановки задачи, уточнений и статусов, и спецификация прямо предупреждает: полагаться на них как на надёжный канал доставки важных данных нельзя.
Доставка обновлений#
Клиент узнаёт о ходе задачи одним из трёх способов:
- Опрос через
GetTask. Прост, работает везде, но с задержкой. - Потоковая передача через
SendStreamingMessageилиSubscribeToTask. Требуетcapabilities.streaming. События приходят строго по порядку, к одной задаче можно подключить несколько потоков. - Push-уведомления на вебхук клиента. Требуют
capabilities.pushNotifications. Подходят для задач, которые идут часами.
Ошибки#
| Ошибка | Когда возникает |
|---|---|
TaskNotFoundError | Задачи нет или она недоступна этому клиенту. |
TaskNotCancelableError | Задача уже в конечном состоянии и не может быть отменена. |
UnsupportedOperationError | Операция не поддерживается, например поток у агента без streaming. |
PushNotificationNotSupportedError | Агент не поддерживает push-уведомления. |
ContentTypeNotSupportedError | Агент не принимает медиатип, переданный в частях сообщения. |
ExtensionSupportRequiredError | Агент требует расширение, которое клиент не объявил. |
VersionNotSupportedError | Версия из A2A-Version не поддерживается. |
ExtendedAgentCardNotConfiguredError | Агент объявил расширенную карточку, но она не настроена. |
InvalidAgentResponseError | Ответ агента не соответствует спецификации. |
Спецификация требует не различать «не существует» и «нет доступа»: агент не должен раскрывать существование чужих задач.
Что изменилось в 1.0#
Версия 1.0 несовместима с 0.3 на уровне формата. Если вы читаете статью или код, где встречаются message/send, kind: "text" или TextPart, — это материал о прошлой версии.
- Операции переименованы:
message/send→SendMessage,tasks/get→GetTask,tasks/resubscribe→SubscribeToTaskи так далее. - Три типа частей (
TextPart,FilePart,DataPart) объединены в одну часть: тип определяется тем, какое поле заполнено —text,raw,urlилиdata. Полеkindудалено,mimeTypeзаменено наmediaType. - Значения перечислений записываются как
TASK_STATE_COMPLETEDиROLE_USERвместоcompletedиuser. - Адреса подключения собраны в
supportedInterfaces, версия протокола указывается для каждого интерфейса отдельно. - Появились
ListTasksс постраничным выводом по курсору, полеtenantдля обслуживания нескольких агентов по одному адресу и параметрreturnImmediately. - Ошибки передаются в формате
google.rpc.Status. - В OAuth 2.0 удалены устаревшие потоки implicit и password, добавлены device code и признак обязательного PKCE.
- Версия согласуется заголовком
A2A-Version; пустое значение сервер трактует как 0.3. Официальные SDK поддерживают слой совместимости для поэтапного перехода.