Задача (Task)
Единица работы и её состояния
Task — основная единица работы в A2A. У задачи есть текущий статус. Результаты работы сохраняются в артефактах, а если над задачей было несколько обменов, то и в истории.
Поля Task#
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
id |
string |
Да | Уникальный идентификатор (например, UUID). Для новой задачи создаётся сервером. |
contextId |
string |
Нет | Идентификатор контекста: набора связанных взаимодействий (задач и сообщений). |
status |
TaskStatus |
Да | Текущий статус задачи: состояние и необязательное сообщение. |
artifacts |
массив Artifact |
Нет | Набор артефактов, полученных в результате задачи. |
history |
массив Message |
Нет | История взаимодействий в рамках задачи. |
metadata |
object |
Нет | Произвольные метаданные о задаче в виде пар «ключ — значение». |
TaskStatus#
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
state |
TaskState |
Да | Текущее состояние задачи. |
message |
Message |
Нет | Сообщение, связанное со статусом. |
timestamp |
timestamp |
Нет | Время фиксации статуса по ISO 8601, например 2023-10-27T10:00:00Z. |
Состояния#
Перечисление TaskState определяет возможные состояния жизненного цикла задачи. Наведите на состояние на шкале, чтобы прочитать его описание.
В работе#
Агент принял задачу и работает над ней.
Пауза#
Прерванные состояния: чтобы продолжить, агенту нужен ответ клиента.
Конец#
Конечные состояния. Задача не перезапускается: следующее обращение станет новой задачей в том же contextId.
| Значение | Класс | Описание |
|---|---|---|
TASK_STATE_UNSPECIFIED |
не указан | Задача в неизвестном или неопределённом состоянии. |
TASK_STATE_SUBMITTED |
не указан | Задача успешно отправлена и принята. |
TASK_STATE_WORKING |
не указан | Агент активно обрабатывает задачу. |
TASK_STATE_COMPLETED |
конечное | Задача успешно завершена. |
TASK_STATE_FAILED |
конечное | Задача завершена с ошибкой. |
TASK_STATE_CANCELED |
конечное | Задача отменена до завершения. |
TASK_STATE_REJECTED |
конечное | Агент решил не выполнять задачу. Это может произойти при создании задачи или позже, когда агент понял, что не может или не будет продолжать. |
TASK_STATE_INPUT_REQUIRED |
прерванное | Агенту нужен дополнительный ввод пользователя, чтобы продолжить. |
TASK_STATE_AUTH_REQUIRED |
прерванное | Для продолжения требуется аутентификация. |
Сообщения в задачи с конечным состоянием не принимаются: сервер вернёт UnsupportedOperationError. Режимы выполнения, при которых операция ждёт конечного или прерванного состояния, описаны на странице «Методы».
Идентификаторы: контекст и задача#
Идентификатор контекста#
contextId логически объединяет несколько связанных задач и сообщений и обеспечивает непрерывность разговора.
- Агент МОЖЕТ сгенерировать новый
contextId, если пришло сообщение без него. Сгенерированный идентификатор ДОЛЖЕН попасть в ответ (вTaskилиMessage). - Агент МОЖЕТ принять и сохранить
contextId, присланный клиентом. Если принять его нельзя, агент ДОЛЖЕН отклонить запрос ошибкой и НЕ ДОЛЖЕН создавать новыйcontextIdдля ответа. - Клиентам СЛЕДУЕТ НЕ присылать собственный
contextId, пока они не понимают, как сервер его обработает. Идентификаторы, созданные сервером, СЛЕДУЕТ считать непрозрачными. - Все задачи и сообщения с одним
contextIdСЛЕДУЕТ считать частью одного разговора. Агент МОЖЕТ использовать его, чтобы хранить внутреннее состояние, историю или контекст LLM. Агент МОЖЕТ ввести политику истечения срока контекста и СЛЕДУЕТ её описать.
Идентификатор задачи#
taskId — уникальный идентификатор объекта Task.
- Идентификаторы задач создаёт сервер, когда в ответ на сообщение появляется новая задача. Для каждой новой задачи агент ДОЛЖЕН создать уникальный
taskIdи вернуть его в объектеTask. - Если клиент указывает
taskIdв сообщении, он ДОЛЖЕН ссылаться на существующую задачу. Иначе агент ДОЛЖЕН вернутьTaskNotFoundError. - Создавать новые задачи с идентификатором, придуманным клиентом, нельзя.
Многоходовые взаимодействия#
A2A поддерживает диалоги из нескольких обменов через идентификаторы контекста и ссылки на задачи.
- Преемственность контекста. Клиент МОЖЕТ указывать
contextIdв следующих сообщениях, продолжая прежнее взаимодействие. Клиент МОЖЕТ указатьtaskId(сcontextIdили без), чтобы продолжить или уточнить конкретную задачу. Указав толькоcontextId, клиент начинает новую задачу в существующем разговоре. - Состояние «нужен ввод». Агент может запросить дополнительные данные, переведя задачу в
TASK_STATE_INPUT_REQUIRED. Клиент продолжает, отправив новое сообщение с тем жеtaskIdиcontextId. - Уточняющие сообщения. Клиенты могут присылать дополнительные сообщения со ссылкой на
taskId. В полеreferenceTaskIdsсообщения СЛЕДУЕТ явно указывать связанные задачи; агентам СЛЕДУЕТ использовать их, чтобы лучше понять смысл последующих запросов. - Наследование контекста. Новые задачи в том же
contextIdмогут наследовать контекст прежних взаимодействий.
Правила согласованности:
- если указан только
taskId, агент ДОЛЖЕН вывестиcontextIdиз задачи; - сообщения, у которых
contextIdне совпадает с контекстом указанной задачи, агент ДОЛЖЕН отклонять.