Отдельные агенты ИИ часто сталкиваются с ограничениями при решении сложных, многогранных проблем, даже обладая продвинутыми возможностями. Чтобы преодолеть это, Меж-агентное взаимодействие (A2A) позволяет различным агентам ИИ, потенциально построенным с использованием разных фреймворков, эффективно сотрудничать. Это сотрудничество включает бесшовную координацию, делегирование задач и обмен информацией.
Протокол A2A от Google — это открытый стандарт, разработанный для облегчения этой универсальной связи. В этой главе будет рассмотрен A2A, его практическое применение и его реализация в Google ADK.
Протокол Agent2Agent (A2A) — это открытый стандарт, разработанный для обеспечения связи и сотрудничества между различными фреймворками агентов ИИ. Он обеспечивает интероперабельность, позволяя агентам ИИ, разработанным с использованием таких технологий, как LangGraph, CrewAI или Google ADK, работать вместе независимо от их происхождения или различий во фреймворках.
A2A поддерживается рядом технологических компаний и поставщиков услуг, включая Atlassian, Box, LangChain, MongoDB, Salesforce, SAP и ServiceNow. Microsoft планирует интегрировать A2A в Azure AI Foundry и Copilot Studio, демонстрируя свою приверженность открытым протоколам. Кроме того, Auth0 и SAP интегрируют поддержку A2A в свои платформы и агенты.
Как протокол с открытым исходным кодом, A2A приветствует вклад сообщества для облегчения его развития и широкого распространения.
Протокол A2A обеспечивает структурированный подход к взаимодействию агентов, основанный на нескольких основных концепциях. Тщательное понимание этих концепций имеет решающее значение для любого, кто разрабатывает или интегрирует системы, совместимые с A2A. Фундаментальные основы A2A включают: Основные действующие лица, Карточка агента, Обнаружение агентов, Коммуникации и задачи, Механизмы взаимодействия и Безопасность, все из которых будут подробно рассмотрены.
{
"name": "WeatherBot",
"description": "Предоставляет точные прогнозы погоды и исторические данные.",
"url": "<http://weather-service.example.com/a2a>",
"version": "1.0.0",
"capabilities": {
"streaming": true,
"pushNotifications": false,
"stateTransitionHistory": true},
"authentication": {
"schemes": [
"apiKey"
]
},
"defaultInputModes": [
"text"
],
"defaultOutputModes": [
"text"
],
"skills": [
{
"id": "get_current_weather",
"name": "Получить текущую погоду",
"description": "Извлечение данных о погоде в реальном времени для любого места.",
"inputModes": [
"text"
],
"outputModes": [
"text"
],
"examples": [
"Какая погода в Париже?",
"Текущие условия в Токио"
],
"tags": [
"weather",
"current",
"real-time"
]
},
{
"id": "get_forecast",
"name": "Получить прогноз",
"description": "Получение прогноза погоды на 5 дней.",
"inputModes": [
"text"
],
"outputModes": [
"text"
],
"examples": [
"Прогноз на 5 дней для Нью-Йорка",
"Будет ли дождь в Лондоне на этих выходных?"
],
"tags": [
"weather",
"forecast",
"prediction"
]
}
]
}
Обнаружение агентов: позволяет клиентам находить Карточки агентов, которые описывают возможности доступных серверов A2A. Существует несколько стратегий для этого процесса:
Известный URI (Well-Known URI): Агенты размещают свою Карточку агента по стандартизированному пути (например, /.well-known/agent.json). Этот подход предлагает широкий, часто автоматизированный доступ для публичного или предметно-ориентированного использования.
Курируемые реестры (Curated Registries): Они предоставляют централизованный каталог, где Карточки агентов публикуются и могут быть запрошены на основе конкретных критериев. Это хорошо подходит для корпоративных сред, требующих централизованного управления и контроля доступа.
Прямая конфигурация (Direct Configuration): Информация о Карточке агента встраивается или распространяется в частном порядке. Этот метод подходит для тесно связанных или частных систем, где динамическое обнаружение не является критически важным.
Независимо от выбранного метода, важно защитить конечные точки Карточки агента. Это может быть достигнуто с помощью контроля доступа, взаимного TLS (mTLS) или сетевых ограничений, особенно если карточка содержит конфиденциальную (хотя и не секретную) информацию.
Коммуникации и задачи (Communications and Tasks): В фреймворке A2A связь строится вокруг асинхронных задач, которые представляют собой фундаментальные единицы работы для длительных процессов. Каждой задаче присваивается уникальный идентификатор, и она проходит через ряд состояний — таких как submitted (отправлена), working (в работе) или completed (завершена) — дизайн, который поддерживает параллельную обработку в сложных операциях. Связь между агентами осуществляется через Сообщение (Message).
Это сообщение содержит атрибуты, которые представляют собой метаданные типа «ключ-значение», описывающие сообщение (например, его приоритет или время создания), и одну или несколько частей, которые несут фактическое доставляемое содержимое, такое как обычный текст, файлы или структурированные данные JSON. Материальные результаты, генерируемые агентом во время выполнения задачи, называются артефактами. Как и сообщения, артефакты также состоят из одной или нескольких частей и могут передаваться потоково по мере доступности результатов. Вся связь в рамках фреймворка A2A осуществляется по HTTP(S) с использованием протокола JSON-RPC 2.0 для полезных данных. Для поддержания непрерывности между несколькими взаимодействиями используется сгенерированный сервером contextId для группировки связанных задач и сохранения контекста.
Механизмы взаимодействия (Interaction Mechanisms): Запрос/Ответ (опрос) и Server-Sent Events (SSE). A2A предоставляет несколько методов взаимодействия для удовлетворения различных потребностей приложений ИИ, каждый со своим distinct-механизмом:codeJSONcodeJSON
Синхронный запрос/ответ: Для быстрых, немедленных операций. В этой модели клиент отправляет запрос и активно ждет, пока сервер обработает его и вернет полный ответ в одном синхронном обмене.
Асинхронный опрос: Подходит для задач, которые требуют больше времени на обработку. Клиент отправляет запрос, и сервер немедленно подтверждает его статусом «working» и идентификатором задачи. Затем клиент свободен выполнять другие действия и может периодически опрашивать сервер, отправляя новые запросы для проверки статуса задачи, пока она не будет помечена как «completed» или «failed».
Потоковые обновления (Server-Sent Events - SSE): Идеально подходят для получения инкрементальных результатов в реальном времени. Этот метод устанавливает постоянное одностороннее соединение от сервера к клиенту. Он позволяет удаленному агенту постоянно отправлять обновления, такие как изменения статуса или частичные результаты, без необходимости для клиента выполнять несколько запросов.
Push-уведомления (Webhooks): Предназначены для очень длительных или ресурсоемких задач, где поддержание постоянного соединения или частый опрос неэффективны. Клиент может зарегистрировать URL веб-хука, и сервер отправит асинхронное уведомление («push») на этот URL, когда статус задачи значительно изменится (например, по завершении).
Карточка агента указывает, поддерживает ли агент возможности потоковой передачи или push-уведомлений. Кроме того, A2A не зависит от модальности, что означает, что он может облегчать эти шаблоны взаимодействия не только для текста, но и для других типов данных, таких как аудио и видео, что позволяет создавать богатые, мультимодальные приложения ИИ. Возможности как потоковой передачи, так и push-уведомлений указываются в Карточке агента.
{
"jsonrpc": "2.0",
"id": "1",
"method": "sendTask",
"params": {
"id": "task-001",
"sessionId": "session-001",
"message": {
"role": "user",
"parts": [
{
"type": "text",
"text": "Каков обменный курс USD к EUR?"
}
]
},
"acceptedOutputModes": ["text/plain"],
"historyLength": 5
}
}
Синхронный запрос использует метод sendTask, где клиент запрашивает и ожидает один полный ответ на свой запрос. В отличие от этого, потоковый запрос использует метод sendTaskSubscribe для установления постоянного соединения, позволяя агенту отправлять несколько инкрементальных обновлений или частичных результатов с течением времени.
{
"jsonrpc": "2.0",
"id": "2",
"method": "sendTaskSubscribe",
"params": {
"id": "task-002",
"sessionId": "session-001",
"message": {
"role": "user",
"parts": [
{
"type": "text",
"text": "Каков сегодня обменный курс JPY к GBP?"
}
]
},
"acceptedOutputModes": ["text/plain"],
"historyLength": 5
}
}
Безопасность: Меж-агентное взаимодействие (A2A): Меж-агентное взаимодействие (A2A) является жизненно важным компонентом системной архитектуры, обеспечивающим безопасный и бесшовный обмен данными между агентами. Оно обеспечивает надежность и целостность посредством нескольких встроенных механизмов.
A2A — это протокол, который дополняет Протокол контекста модели Anthropic (MCP) (см. рис. 1). В то время как MCP фокусируется на структурировании контекста для агентов и их взаимодействии с внешними данными и инструментами, A2A облегчает координацию и связь между агентами, обеспечивая делегирование задач и сотрудничество.
(Изображение: Fig.1: Comparison A2A and MCP Protocols)
