A2Aprotocol.ru

Главная / Спецификация

Спецификация A2A 1.0

Обзор спецификации A2A версии 1.0: из чего она состоит, какие операции определяет и что изменилось по сравнению с 0.3. Это пересказ для ориентации, нормативный текст — на сайте проекта.

Спецификация A2A 1.0 · проверено 30.09.2026

Паспорт протокола#

Паспорт протокола A2A
ХарактеристикаЗначение
Полное название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
Официальные SDKPython, Go, JavaScript, Java, .NET

Три уровня спецификации#

Спецификация разделена на три уровня, и это главное, что нужно понять перед чтением:

  1. Модель данных. Задача, сообщение, часть, артефакт, карточка агента и другие объекты. Описаны один раз, независимо от способа передачи.
  2. Абстрактные операции. Что можно сделать: отправить сообщение, получить задачу, отменить, подписаться на обновления.
  3. Привязки протокола. Как операции выглядят на проводе в JSON-RPC, gRPC и HTTP+JSON. Все три привязки обязаны быть функционально равнозначными — см. привязка протокола.

Благодаря этому одна и та же задача может прийти к агенту по разным привязкам, а новые привязки добавляются без изменения модели данных.

Операции#

Операции A2A 1.0
ОперацияЧто делает
SendMessageОтправляет сообщение агенту. В ответ приходит задача или, для простых случаев, сразу ответное сообщение.
SendStreamingMessageТо же, но с потоком обновлений: состояние задачи и порции артефактов в реальном времени.
GetTaskВозвращает текущее состояние задачи, артефакты и, по запросу, историю сообщений.
ListTasksСписок задач с фильтрами по контексту и состоянию, постраничный вывод по курсору. Новая операция в 1.0.
CancelTaskПросит отменить задачу. Отмена не гарантирована, если задача уже завершена.
SubscribeToTaskПодключает поток обновлений к уже существующей задаче, например после обрыва связи.
CreateTaskPushNotificationConfig и ещё триСоздание, чтение, список и удаление настроек push-уведомлений для задачи.
GetExtendedAgentCardОтдаёт расширенную карточку клиенту, прошедшему аутентификацию.

Пример запроса в привязке JSON-RPC. Клиент передаёт версию протокола в заголовке A2A-Version: 1.0.

POST https://agent.example.ru/a2a
{
  "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-уведомлениями.

Жизненный цикл задачи#

Жизненный цикл задачи A2A: submitted, working, прерванные input-required и auth-required с возвратом в working, конечные completed, failed, canceled, rejected.
Состояния задачи в A2A 1.0. Из прерванных состояний задача возвращается в работу, когда клиент присылает недостающие данные или проходит аутентификацию.
  • Рабочие: 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. Подходят для задач, которые идут часами.

Ошибки#

Ошибки, специфичные для A2A
ОшибкаКогда возникает
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 поддерживают слой совместимости для поэтапного перехода.