Выберите polling, streaming или push осознанно
A2A поддерживает три механизма доставки обновлений задачи, и выбор между ними - инженерное решение, а не вкус. Polling проще всего. Streaming быстрее для интерактивного UX. Push подходит очень долгим server-to-server задачам. При этом любой выбранный механизм должен быть объявлен в Agent Card - клиент не имеет права предполагать то, чего агент не обещал.
Сравнение по цене и надёжности помогает не ошибиться.
Механизм · Когда брать · Цена · Надежность
- Get Task polling - Редкие updates, строгий firewall; Лишние запросы и latency; Просто восстанавливается
- Streaming/SSE - Интерактивный UI, частые events; Долгое соединение и reconnect logic; После disconnect часть messages может быть потеряна
- Push webhook - Очень долгая server-to-server работа; Публичный receiver, retries, verification; Нужны idempotency и delivery policy
Многоходовой сценарий - когда агент попросил ввод и продолжил после ответа - на уровне провода выглядит так.
1. SendMessage → Task(input_required)
2. Client показывает status.message
3. Client sends a new Message
taskId = existing task
contextId = server-issued context
4. Agent resumes → working
5. Artifact update → completedА отмена задачи проходит через проверку владения и не отменяет уже совершённые downstream-эффекты.
client CancelTask(taskId)
server verifies task ownership
server rejects terminal/non-cancelable tasks
executor observes cancellation
server publishes canceled terminal state
already committed downstream effects require reconciliationДве оговорки здесь особенно дорогие. Первая - про streaming.
Streaming messages не являются durable-журналом. Спецификация предупреждает: клиент после disconnect может не получить все status-сообщения. Критический результат храните в Task status/history/artifacts и получайте повторно через Get Task, а не надейтесь на поток.
Вторая - про push, который открывает наружу новую поверхность.
Push открывает SSRF surface. Проверяйте callback URL, блокируйте private- и link-local-диапазоны, используйте HTTPS, подписывайте callbacks, ограничивайте redirects и повторно разрешайте DNS по безопасной политике.
Доставку выбрали. Теперь свяжем воедино то, что проходит через все эти механизмы, - безопасность, задачи и принадлежность tenant.