AI-инжиниринг
A2A Protocol: как AI-агенты общаются друг с другом
Цели урока
- Понять разницу между MCP и A2A: разные уровни стека, не конкуренты
- Изучить A2A примитивы: AgentCard, Task lifecycle, Message streaming
- Написать минимальный A2A-совместимый сервер на Node.js
- Освоить production паттерны: топологии сетей, защита от петель, trust модель
Апрель 2025. Google публикует A2A Protocol. До этого Anthropic выпустил MCP. Оба открытые. Оба adopted индустрией. Вместе они формируют полный стек: MCP соединяет агента с инструментами, A2A соединяет агентов между собой. Первый раз в истории AI - стандартный протокол для agent networks.
- Google A2A Protocol (апрель 2025) - открытый стандарт поддержан Salesforce, SAP, Cohere, LangChain и 50+ компаниями
- Vertex AI Agent Builder поддерживает A2A нативно - агенты на Google Cloud автоматически совместимы
- Anthropic Claude совместим с A2A как сервер - Claude-агент может принимать задачи от любого A2A оркестратора
- LangChain выпустил A2A адаптер в 2025 - существующие LangChain агенты стали A2A-совместимыми
Эволюция agent protocols
**2023**: OpenAI выпускает function calling - первый стандарт для агентов. Но только в рамках одной модели. **2024**: Anthropic публикует MCP (Model Context Protocol) - стандарт для инструментов. Быстро adopted VSCode, Claude Desktop, сотнями инструментов. **Апрель 2025**: Google публикует A2A Protocol - горизонтальный стандарт для агентских сетей. За 3 месяца - поддержка 50+ компаний. Теперь агент может быть написан на Python с Anthropic, получить задачу от Java-оркестратора, использовать MCP-инструмент на Rust - и всё это через открытые стандарты.
Предварительные знания
MCP vs A2A: разные уровни стека
2025 год. Anthropic публикует MCP. Google публикует A2A. Многие воспринимают их как конкурентов. Это неверная рамка. MCP и A2A решают разные задачи на разных уровнях стека inter-agent коммуникации.
**MCP (Model Context Protocol)** - Anthropic, 2024. Вертикальный протокол: один агент подключает внешние инструменты. Файловая система, база данных, браузер, код-интерпретатор - всё через стандартный интерфейс. Агент - клиент. Инструменты - серверы.
**A2A (Agent-to-Agent Protocol)** - Google, апрель 2025. Горизонтальный протокол: агент A делегирует задачу агенту B. Не вызывает инструмент - нанимает специалиста. Агент B может быть реализован на другом стеке, другой LLM, в другой компании.
| Критерий | MCP | A2A |
|---|---|---|
| Что соединяет | Агент и инструменты | Агент и агент |
| Отношение | Клиент-сервер (инструмент) | Peer-to-peer (коллега) |
| Автор | Anthropic | |
| Год | 2024 | 2025 |
| Транспорт | stdio / HTTP SSE | HTTP / WebSocket |
| Состояние | Stateless | Stateful (Tasks) |
| Открытый стандарт | Да | Да (spec на GitHub) |
A2A spec открыт на GitHub (google/A2A). Поддержан не только Google - к разработке подключились Salesforce, SAP, Cohere. Anthropic официально совместим: Claude-агент может быть A2A-сервером.
Главное архитектурное различие MCP и A2A:
A2A механика: Agent Cards, Tasks, Messages
A2A строится на трёх примитивах: **AgentCard** (кто я и что умею), **Task** (единица работы со статусом), **Message** (поток данных внутри задачи). Аналогия с HTTP: AgentCard - это API documentation, Task - request/response, Message - streaming chunks.
AgentCard: capability discovery
AgentCard - JSON-документ, опубликованный на `/.well-known/agent.json`. Любой агент может найти его и понять, что умеет другой агент - без предварительной договорённости.
Task: жизненный цикл
A2A использует JSON-RPC 2.0 как транспортный формат - это намеренно. JSON-RPC хорошо известен, легко отлаживается, поддерживает streaming через SSE. Не нужно изучать новый бинарный протокол.
Для чего нужен AgentCard в A2A?
Практика: A2A сервер на Node.js
Минимальный A2A-совместимый агент-сервер на Node.js. Три обязательных компонента: AgentCard endpoint, tasks/send handler, streaming через SSE.
Клиентская сторона - оркестратор, который делегирует задачи агентам через A2A:
Какой HTTP endpoint обязателен для A2A-совместимого агента?
Agent networks в production: паттерны и failure modes
Сеть агентов - это распределённая система. Всё что ломается в микросервисах - ломается и здесь, плюс новые проблемы: бесконечные петли, накапливающиеся токены, неясный trust между агентами.
| Проблема | Причина | Решение |
|---|---|---|
| Бесконечная петля | Агент A вызывает B, B вызывает A | Depth limit + цикл-детекция по session graph |
| Token budget взрыв | Каждый агент добавляет токены в контекст | Max tokens per task + context compression |
| Trust escalation | Агент B получает доступ к данным агента A | Explicit capability grants, не наследование |
| Orphaned tasks | Оркестратор упал, задачи висят | Timeout + dead letter queue для незавершённых tasks |
| Slow agent | Агент занят, клиент ждёт бесконечно | Task status polling + timeout + fallback агент |
Trust между агентами не наследуется автоматически. Если оркестратор имеет доступ к sensitive данным - это не значит, что делегированный агент тоже должен его иметь. Принцип минимальных привилегий работает и в agent networks.
Почему Hub-and-Spoke топология предпочтительнее Mesh для начала?
A2A и MCP конкурируют - нужно выбрать один
MCP и A2A работают на разных уровнях и дополняют друг друга. Агент использует MCP для инструментов и A2A для делегирования задачам другим агентам
MCP = вертикаль (агент-инструмент). A2A = горизонталь (агент-агент). Типичная производственная система 2026 года: оркестратор получает задачу через A2A, делегирует подзадачи специализированным агентам через A2A, каждый агент использует MCP-инструменты для работы.
Agent network надёжнее одного агента - больше компонентов = больше возможностей
Каждый дополнительный агент добавляет точку отказа. Сложность растёт нелинейно. Начинать нужно с простейшей топологии
Distributed systems failures применимы к agent networks: network partition, timeout, cascading failures. Плюс новые: бесконечные петли между агентами, накопление токенов, trust escalation. Один хорошо настроенный агент часто лучше сети плохо координированных.
Итоги
- MCP = агент-инструмент (вертикаль), A2A = агент-агент (горизонталь) - вместе полный стек
- A2A примитивы: AgentCard (discovery на /.well-known/agent.json), Task (submitted/working/completed/failed), Message (streaming)
- JSON-RPC 2.0 транспорт - стандартный, легко отлаживается, поддерживает SSE streaming
- Hub-and-Spoke надёжнее Mesh для начала - нет риска циклических зависимостей
- Обязательные guards: MAX_DEPTH, token budget, cycle detection, explicit trust model
Вопросы для размышления
- Какие задачи в существующих системах выиграли бы от разделения на специализированных агентов - и где граница, после которой координация стоит дороже выгоды?
- Если агент A доверяет агенту B, должен ли агент B автоматически получить доступ к тем же данным что и агент A? Почему нет?
- Чем A2A отличается от обычного микросервисного HTTP API - и зачем нужен отдельный протокол?
Что дальше
Агенты умеют общаться. Но сколько данных реально нужно передавать - контекст или ссылки на него?
- Long Context vs RAG — Когда весь контекст в одном запросе, а когда нужен поиск
- MCP Protocol — Фундамент: вертикальный протокол агент-инструмент
- Multi-Agent Systems — Паттерны координации нескольких агентов