Get started
Если вы настраиваете агента впервые, сначала установите Youka CLI, затем установите навык Youka karaoke:Prompt your agent
После установки CLI и навыка вы можете дать агенту прямую задачу, например так:Operating rules
Always use --json
В CLI всегда передавайте
--json. В API всегда устанавливайте Accept: application/json. Никогда не парсите человекочитаемый вывод.Always send an idempotency key
Каждая операция записи должна содержать стабильный ключ идемпотентности, чтобы повтор после таймаута возвращал исходный результат вместо дублирования работы.
Re-read durable state
Не доверяйте устаревшим ответам на мутации. После завершения задачи перечитайте проект или экспорт, чтобы получить финальное состояние.
Poll with backoff
Начинайте с интервала 2–3 секунды. Экспоненциально увеличивайте интервал для длительных задач.
Учитывайте ответы 429.
Output contract
Каждая команда CLI в режиме--json пишет ровно один конверт в stdout.
Успех:
| Code | Meaning | Retry? |
|---|---|---|
0 | Успех. | N/A |
1 | Ошибка выполнения (сеть, API, рендер). | Проверьте error.retryable. |
2 | Некорректный ввод (плохие флаги, нечитаемый payload). | Нет — исправьте ввод. |
End-to-end workflow
Канонический рабочий процесс агента: создать проект, дождаться, экспортировать, скачать результат. Ниже — полный шаблон с реализациями и для CLI, и для SDK.Polling guidance
Большинство операций записи в SDK возвращают дескрипторы операций. Предпочитайтеclient.projects.wait(...) и client.exports.wait(...) и опускайтесь до client.tasks.* только когда вам явно нужен низкоуровневый доступ к задачам.
| Job type | Recommended initial interval | Max wait |
|---|---|---|
| Создание проекта (stems + синхронизация текста) | 3 s | 15 min |
| Только разделение stems | 3 s | 10 min |
| Только синхронизация текста | 2 s | 5 min |
| Рендер экспорта | 3 s | 30 min |
--wait делает polling за вас. В SDK wait-хелперы по умолчанию используют интервал 2 s и принимают pollIntervalMs.
Idempotency keys
Каждая операция создания и обновления поддерживает ключ идемпотентности. Правила:- Используйте стабильный, уникальный, детерминированный ключ на одну логическую мутацию. Хорошо:
create-song-${sourceHash}. Плохо: новый UUID на каждый повтор. - При повторах используйте тот же самый ключ. Сервер распознаёт повтор и возвращает исходный результат.
- Ключи действуют в рамках одного аккаунта и истекают через 24 часа.
- Если сервер возвращает
IDEMPOTENT_REPLAY_IN_PROGRESS(HTTP 202), исходный запрос всё ещё выполняется. Подождите и повторите с тем же ключом.
Error recovery
Ветвитесь поerror.code и error.retryable. Частые случаи:
| Code | Cause | Action |
|---|---|---|
INVALID_REQUEST | Тело запроса не прошло валидацию схемы. | Исправьте payload. Без повтора. |
UNAUTHORIZED | Отсутствует или неверный API key. | Передайте вызывающей стороне. Без повтора. |
NOT_FOUND | Ресурс не существует или нет доступа. | Без повтора. |
CONFLICT (409) | Конфликт версий или коллизия идемпотентности. | Повторите с тем же ключом идемпотентности. |
TOO_MANY_REQUESTS (429) | Rate limit. | Back off по Retry-After или 30 s. |
INTERNAL_SERVER_ERROR (500) | Временный сбой сервера. | Повторить до 3 раз с backoff. |
IDEMPOTENT_REPLAY_IN_PROGRESS (202) | Предыдущий запрос всё ещё выполняется. | Подождать и повторить с тем же ключом. |
TASK_FAILED | Асинхронная задача завершилась неуспехом. | Передайте error.task.error вызывающей стороне. Без повтора. |
TASK_TIMED_OUT | Асинхронная задача превысила лимит времени. | Можно безопасно повторить один раз. |
Discovering mutable fields
Перед изменением пресетов запросите схему пресета, чтобы модель знала допустимые поля и типы значений:youka project settings <id> --body ....
Запрашивайте один раз на сессию агента и кэшируйте результат.
Parallel agents
Когда несколько агентов работают параллельно в рамках одного аккаунта:- Делайте idempotency keys привязанными и к идентичности агента, и к логической мутации:
agent-${agentId}-create-${sourceHash}. Это предотвращает коллизию повтора одного агента с новым запросом другого. - Оставляйте чтения неограниченными —
GET-запросы дешёвые и не имеют побочных эффектов. - Используйте одну очередь для
POST /projects/{projectId}/exportsна проект, если вам нужна упорядоченная история экспортов. Иначе экспорты могут приходить не по порядку.
What’s next
- CLI global options — все флаги, доступные агентам
- SDK errors — полный справочник классов ошибок
- API async jobs — контракт polling
- API idempotency — контракт идемпотентности
