![]()
Ответ не появился за привычные несколько секунд. Самое простое решение — запустить запрос ещё раз. Но первая задача может всё ещё выполняться, и тогда приложение получит два результата, два расхода и, при неудачной логике, два одинаковых действия.
В Чатиуме стоит хранить каждую попытку отдельно и показывать пользователю её состояние. Повтор и смена модели становятся понятными действиями с историей, а не скрытым бесконечным циклом.
Создай очередь заданий для нейросети с состояниями ожидания, результата и ошибки. Каждую повторную попытку сохраняй отдельно. Ограничь число повторов, показывай причину сбоя и не позволяй старому ответу перезаписать уже выбранный результат.
Сначала определите, что произошло
Неверный формат входа, превышение размера, отсутствие доступа, временная перегрузка и долгое ожидание требуют разных действий. Повтор того же неправильного запроса редко помогает. Смена модели тоже не исправит отсутствующий файл или неверные права.
Сохраняйте доступную информацию об ошибке и отделяйте её от пользовательского объяснения. В интерфейсе достаточно понятного следующего шага: сократить документ, выбрать совместимый формат или повторить позже. Не показывайте секретные настройки и внутренние данные ради подробности сообщения.
Ожидание не всегда является сбоем
В Чатиуме startCompletion возвращает completionId, а результат приходит через onCompletionCompleted или onCompletionFailed. Закрытие вкладки и таймер в браузере не отменяют автоматически задачу на платформе.
Если приложение ещё не получило окончательное событие, называйте состояние честно: «ответ пока не получен». Не записывайте без оснований «модель ничего не сделала». Это особенно важно, если следующий этап меняет данные или отправляет сообщение.
Как устроить повтор
У исходного задания могут быть попытки 1, 2 и 3. Каждая хранит собственный ID, модель, версию исходника и состояние. Пользователь выбирает результат, который будет использован дальше; поздний ответ другой попытки остаётся в истории.
Для автоматических повторов задайте ограничение количества и паузу. Если маршрут сообщает, когда можно повторить запрос, учитывайте эту информацию. Не создавайте дополнительные ключи и аккаунты ради обхода ограничений: это не является корректным способом управления нагрузкой.
| Причина | Разумный следующий шаг |
|---|---|
| Неверный вход | Исправить данные |
| Слишком большой материал | Сократить или разделить с сохранением смысла |
| Временное ограничение | Подождать и повторить в заданных пределах |
| Неподдерживаемая возможность | Выбрать совместимый маршрут |
| Неясное состояние | Проверить текущую попытку до нового действия |
Смена модели требует проверки совместимости
Запасная модель должна принимать нужный тип данных и поддерживать необходимые параметры. Текстовая модель не становится заменой модели с изображениями только потому, что она доступна. Структурированный ответ, инструменты и пределы контекста также проверяются отдельно.
Сохраните фактическую модель рядом с ответом. Пользователь и отчёт качества должны знать, что задача завершилась запасным вариантом. Иначе сравнение расходов и ошибок будет приписывать результат не тому исполнителю.
Повтор генерации и повтор действия — разные вещи
Получить ещё один черновик обычно допустимо. Вторично отправить одно и то же письмо клиенту — уже другое последствие. Разделяйте генерацию и применение результата: у подтверждённого действия должен быть собственный идентификатор, по которому приложение распознаёт повтор.
В учебном сценарии помощник готовит описание товара. Две попытки генерации могут дать два варианта. Но публикация выбранного варианта должна примениться один раз и к проверенной версии карточки. Поздняя генерация не должна автоматически менять опубликованный текст.
Что измерять после запуска
Смотрите долю ошибок по причинам, число повторов, время до принятого результата и расходы на все попытки. Если большинство проблем связано с размером входа, покупка более дорогой модели может оказаться менее полезной, чем правильная подготовка документа.
Проверяйте резервный маршрут на тех же заданиях, что и основной. Сам факт успешного ответа ещё не означает приемлемое качество. Правила выбора и возврата к основной модели должны быть предсказуемыми для сопровождения приложения.
Частые вопросы
Можно ли повторять до первого успеха?
Без ограничений это может создать лишние расходы и нагрузку. Лучше задать предел, показать ошибку и дать человеку понятный выбор дальнейшего действия.
При ошибке расходов точно нет?
Не делайте такой вывод только по статусу интерфейса. Учитывайте фактические события расчёта; подробнее — в стоимости генерации.
Где посмотреть короткий пример асинхронного вызова?
В разборе startCompletion. Он показывает запуск и обработчики, а политика повторов остаётся отдельной логикой приложения.