6 готовых к копированию JSON-шаблонов · A2A v1.0

Примеры A2A Agent Card

Просмотрите практические шаблоны A2A v1.0, поймите их проектные решения, а затем адаптируйте любой пример для собственного агента.

Публичное обнаружение агентов

Используйте эти примеры, чтобы сформировать JSON, который другой клиент A2A получит перед тем, как решить, может ли ваш агент выполнить задачу.

Подача на маркетплейс

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

Внутренние каталоги агентов

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

JSON-шаблоны

Примеры Agent Card для агентов поддержки, бронирования, покупок, разработки, исследований и рабочих процессов.

Проверить шаблон
Фильтр

Агент поддержки клиентов

Обрабатывает вопросы о товарах, запросы о заказах, возвраты, и передачу эскалаций.

Почему это построено именно так

  • Учётные данные клиента OAuth 2.0 защищают данные заказов: Agent Card объявляет URL токена и область действия, чтобы клиенты могли аутентифицироваться без внеполосной документации.
  • streaming и pushNotifications оба равны true, потому что разговоры поддержки длятся долго, а обновления решения приходят асинхронно.
  • Единственный навык ограничен одной границей задачи (классифицировать, решить, эскалировать), а не расплывчатым описанием «помогать клиентам», чтобы маршрутизаторы могли точно его сопоставить.
customer-support.json
{
  "name": "Агент поддержки клиентов",
  "description": "Отвечает на вопросы службы поддержки клиентов, извлекает контекст заказа и передает нерешенные проблемы человеческой команде.",
  "supportedInterfaces": [
    {
      "url": "https://api.example.com/a2a/customer-support",
      "protocolBinding": "JSONRPC",
      "protocolVersion": "1.0"
    }
  ],
  "provider": {
    "organization": "Пример Inc.",
    "url": "https://example.com"
  },
  "version": "1.0.0",
  "capabilities": {
    "streaming": true,
    "pushNotifications": true,
    "extendedAgentCard": false
  },
  "defaultInputModes": [
    "text/plain",
    "application/json"
  ],
  "defaultOutputModes": [
    "text/plain",
    "application/json"
  ],
  "skills": [
    {
      "id": "resolve-customer-support-request",
      "name": "Решение запроса в службу поддержки клиентов",
      "description": "Классифицирует запрос на поддержку клиентов, собирает необходимый контекст, предлагает решение и передает на более высокий уровень, когда доверие низкое.",
      "tags": [
        "support",
        "orders",
        "returns"
      ],
      "examples": [
        "Помогите мне вернуть заказ."
      ]
    }
  ],
  "securitySchemes": {
    "oauth2": {
      "oauth2SecurityScheme": {
        "flows": {
          "clientCredentials": {
            "tokenUrl": "https://api.example.com/a2a/customer-support/oauth/token",
            "scopes": {
              "agent.invoke": "Invoke agent skills"
            }
          }
        }
      }
    }
  },
  "security": [
    {
      "oauth2": [
        "agent.invoke"
      ]
    }
  ]
}

Агент бронирования

Находит доступные слоты для встреч и готовит подтверждения бронирования.

Почему это построено именно так

  • Ключа API в заголовке здесь достаточно: бронирования ограничены арендатором, но не несут проблему делегированного согласия пользователя, которую решает OAuth.
  • defaultOutputModes — только application/json, что сигнализирует о том, что вызывающие получают структурированные предложения по бронированию, а не прозу.
  • pushNotifications равно true, чтобы агент мог подтвердить бронирование после того, как бэкенд, удерживающий слот, урегулируется, без опроса со стороны клиента.
booking.json
{
  "name": "Агент бронирования",
  "description": "Ищет наличие свободных мест, предлагает варианты бронирования и подготавливает бронирование для утверждения.",
  "supportedInterfaces": [
    {
      "url": "https://api.example.com/a2a/booking",
      "protocolBinding": "JSONRPC",
      "protocolVersion": "1.0"
    }
  ],
  "provider": {
    "organization": "Пример Inc.",
    "url": "https://example.com"
  },
  "version": "1.0.0",
  "capabilities": {
    "streaming": false,
    "pushNotifications": true,
    "extendedAgentCard": false
  },
  "defaultInputModes": [
    "text/plain",
    "application/json"
  ],
  "defaultOutputModes": [
    "application/json"
  ],
  "skills": [
    {
      "id": "find-and-prepare-booking",
      "name": "Найти и подготовить бронирование",
      "description": "Проверяет доступность ресурсов, сравнивает окна бронирования и возвращает структурированное предложение по резервированию.",
      "tags": [
        "booking",
        "calendar",
        "availability"
      ],
      "examples": [
        "Найдите 30-минутную встречу завтра днем."
      ]
    }
  ],
  "securitySchemes": {
    "apiKey": {
      "apiKeySecurityScheme": {
        "location": "header",
        "name": "X-API-Key"
      }
    }
  },
  "security": [
    {
      "apiKey": []
    }
  ]
}

Агент покупок

Сравнивает товары, наличие, цены и ограничения покупки.

Почему это построено именно так

  • Ранжированные рекомендации транслируются по мере их вычисления, поэтому streaming равно true, а pushNotifications остаётся false — после завершения ответа ничего не происходит.
  • Описание навыка обязуется возвращать компромиссы и обоснования, что говорит оркестраторам, что этот агент объясняет рейтинги, а не просто перечисляет товары.
  • Области действия OAuth ограничивают данные, связанные с покупкой; публичная демонстрация покупок могла бы вовсе отказаться от безопасности и остаться действительной Agent Card.
shopping.json
{
  "name": "Агент покупок",
  "description": "Сравнивает продукты с ограничениями пользователя и возвращает ранжированные варианты покупки с компромиссами.",
  "supportedInterfaces": [
    {
      "url": "https://api.example.com/a2a/shopping",
      "protocolBinding": "JSONRPC",
      "protocolVersion": "1.0"
    }
  ],
  "provider": {
    "organization": "Пример Inc.",
    "url": "https://example.com"
  },
  "version": "1.0.0",
  "capabilities": {
    "streaming": true,
    "pushNotifications": false,
    "extendedAgentCard": false
  },
  "defaultInputModes": [
    "text/plain",
    "application/json"
  ],
  "defaultOutputModes": [
    "application/json"
  ],
  "skills": [
    {
      "id": "compare-shopping-options",
      "name": "Сравните варианты покупок",
      "description": "Оценивает продукты-кандидаты, фильтрует по ограничениям и возвращает ранжированные рекомендации с обоснованием.",
      "tags": [
        "shopping",
        "commerce",
        "recommendations"
      ],
      "examples": [
        "Сравните легкие ноутбуки стоимостью менее 1200 долларов."
      ]
    }
  ],
  "securitySchemes": {
    "oauth2": {
      "oauth2SecurityScheme": {
        "flows": {
          "clientCredentials": {
            "tokenUrl": "https://api.example.com/a2a/shopping/oauth/token",
            "scopes": {
              "agent.invoke": "Invoke agent skills"
            }
          }
        }
      }
    }
  },
  "security": [
    {
      "oauth2": [
        "agent.invoke"
      ]
    }
  ]
}

Агент программирования

Проверяет задачи по коду, предлагает патчи и объясняет решения по реализации.

Почему это построено именно так

  • extendedAgentCard равно true: публичная Agent Card перечисляет общий навык «реализовать изменение кода», в то время как специфичные для репозитория навыки раскрываются только аутентифицированным клиентам через GetExtendedAgentCard.
  • Объявлены как text/plain, так и application/json выходы, потому что агент возвращает человекочитаемые объяснения вместе с машиноприменимыми патчами.
  • Потоковая передача важна для долгих циклов компиляции и тестирования; клиенты видят промежуточный прогресс вместо безмолвного многоминутного вызова.
coding.json
{
  "name": "Агент программирования",
  "description": "Помогает решать задачи разработки программного обеспечения, анализируя код, предлагая изменения и возвращая заметки по реализации.",
  "supportedInterfaces": [
    {
      "url": "https://api.example.com/a2a/coding",
      "protocolBinding": "JSONRPC",
      "protocolVersion": "1.0"
    }
  ],
  "provider": {
    "organization": "Пример Inc.",
    "url": "https://example.com"
  },
  "version": "1.0.0",
  "capabilities": {
    "streaming": true,
    "pushNotifications": true,
    "extendedAgentCard": true
  },
  "defaultInputModes": [
    "text/plain",
    "application/json"
  ],
  "defaultOutputModes": [
    "text/plain",
    "application/json"
  ],
  "skills": [
    {
      "id": "implement-code-change",
      "name": "Внедрить изменение кода",
      "description": "Считывает запрос на кодирование, проверяет соответствующие файлы, возвращает предложение по исправлению и обобщает этапы проверки.",
      "tags": [
        "coding",
        "review",
        "patches"
      ],
      "examples": [
        "Добавьте нумерацию страниц в API пользователей."
      ]
    }
  ],
  "securitySchemes": {
    "apiKey": {
      "apiKeySecurityScheme": {
        "location": "header",
        "name": "X-API-Key"
      }
    }
  },
  "security": [
    {
      "apiKey": []
    }
  ]
}

Агент исследований

Собирает источники, извлекает доказательства и возвращает структурированные исследовательские заметки.

Почему это построено именно так

  • Вообще нет securitySchemes: конечная точка намеренно публична, и пропуск поля — правильный способ это выразить — пустая карта схем была бы двусмысленной.
  • Ввод — только text/plain, потому что исследовательские брифы начинаются с вопросов на естественном языке; структурированный вывод приходит в виде заметок application/json.
  • Это минимально полезная Agent Card v1.0: идентичность, один интерфейс, возможности, режимы, и один хорошо помеченный навык.
research.json
{
  "name": "Агент исследований",
  "description": "Собирает исходный материал, извлекает доказательства и составляет структурированные исследовательские заметки с цитатами.",
  "supportedInterfaces": [
    {
      "url": "https://api.example.com/a2a/research",
      "protocolBinding": "JSONRPC",
      "protocolVersion": "1.0"
    }
  ],
  "provider": {
    "organization": "Пример Inc.",
    "url": "https://example.com"
  },
  "version": "1.0.0",
  "capabilities": {
    "streaming": true,
    "pushNotifications": false,
    "extendedAgentCard": false
  },
  "defaultInputModes": [
    "text/plain"
  ],
  "defaultOutputModes": [
    "text/plain",
    "application/json"
  ],
  "skills": [
    {
      "id": "prepare-research-brief",
      "name": "Подготовить краткое исследование",
      "description": "Ищет утвержденные источники, извлекает утверждения и доказательства и возвращает краткое описание исследования.",
      "tags": [
        "research",
        "evidence",
        "citations"
      ],
      "examples": [
        "Подготовьте краткий обзор политики в области возобновляемых источников энергии."
      ]
    }
  ]
}

Агент внутреннего рабочего процесса

Координирует утверждения, проверки статуса, и обновления офисного рабочего процесса.

Почему это построено именно так

  • application/json — единственный режим ввода и вывода: этот агент вызывается другими системами, никогда людьми, набирающими прозу.
  • OAuth 2.0 плюс extendedAgentCard подходит для корпоративных аудитов — команды безопасности могут публично видеть требования к аутентификации, в то время как чувствительные навыки рабочего процесса остаются за аутентификацией.
  • pushNotifications необходимы, потому что цепочки утверждений занимают часы или дни; вебхуки заменяют опрос для изменений состояния.
internal-workflow.json
{
  "name": "Агент внутреннего рабочего процесса",
  "description": "Координирует внутренние утверждения, проверяет состояние системы и готовит обновления рабочих процессов для оперативных групп.",
  "supportedInterfaces": [
    {
      "url": "https://api.example.com/a2a/workflow",
      "protocolBinding": "JSONRPC",
      "protocolVersion": "1.0"
    }
  ],
  "provider": {
    "organization": "Пример Inc.",
    "url": "https://example.com"
  },
  "version": "1.0.0",
  "capabilities": {
    "streaming": false,
    "pushNotifications": true,
    "extendedAgentCard": true
  },
  "defaultInputModes": [
    "application/json"
  ],
  "defaultOutputModes": [
    "application/json"
  ],
  "skills": [
    {
      "id": "coordinate-internal-workflow",
      "name": "Координировать внутренний рабочий процесс",
      "description": "Получает намерения рабочего процесса, проверяет требования политики, собирает утверждения и сообщает об окончательном статусе.",
      "tags": [
        "workflow",
        "operations",
        "approval"
      ],
      "examples": [
        "Запросите одобрение для развертывания обновления расчета заработной платы."
      ]
    }
  ],
  "securitySchemes": {
    "oauth2": {
      "oauth2SecurityScheme": {
        "flows": {
          "clientCredentials": {
            "tokenUrl": "https://api.example.com/a2a/workflow/oauth/token",
            "scopes": {
              "agent.invoke": "Invoke agent skills"
            }
          }
        }
      }
    }
  },
  "security": [
    {
      "oauth2": [
        "agent.invoke"
      ]
    }
  ]
}

Адаптируйте уверенно

Как адаптировать пример Agent Card

Каждый пример Agent Card намеренно достаточно полон для копирования, но Agent Card не следует публиковать без изменений. Относитесь к ней как к карте полей для вашего собственного сервера A2A: замените идентичность, конечную точку, провайдера, аутентификацию, возможности, режимы и детали навыков на производственные значения.

Самые сильные Agent Card объясняют границу задачи агента как простым языком, так и машиночитаемыми метаданными. Клиент должен быть в состоянии определить, что агент может делать, что не может, какой URL вызывать, и требуются ли учётные данные.

Перед публикацией

Замените каждый URL example.com на развёрнутую конечную точку A2A и сайт провайдера.

Перепишите имя навыка, описание, теги (обязательны в v1.0) и примеры под реальную границу задачи.

Задайте provider.organization и повышайте version верхнего уровня всякий раз, когда меняется содержимое Agent Card.

Удаляйте поля аутентификации только тогда, когда конечная точка намеренно публична.

Держите defaultInputModes и defaultOutputModes в соответствии с тем, что ваш сервер фактически принимает и возвращает.

Проверьте итоговый JSON и опубликуйте его по адресу /.well-known/agent-card.json на домене вашего сервиса.

Готовы к созданию

Начните с примера, а затем сделайте его своим.

Откройте любой шаблон в генераторе Agent Card, просмотрите JSON, и проверьте его перед публикацией.