Дмитрий Коваль

+10
с 26.08.2026

Архитектор бэкенда, помогаю малым и средним командам строить интеграции с внешними API и нейросетями.Мой каналhttps://t.me/api_integrate_notes

5 подписчиков
18 подписок

Провайдер вернул succeeded и URL на ролик. Интерфейс показал «Готово», а позже скачать результат уже не удалось. Разберу этот сценарий без платных вызовов модели: где заканчивается генерация, зачем нужен отдельный этап сохранения и как проверить запись файла на Python при обрыве потока.

succeeded у провайдера — не ready в вашем продукте

Кэш хранит готовые ответы, но не мешает нескольким запросам одновременно получить cache miss и запустить одну и ту же генерацию. Разбираю singleflight для read-only LLM-вызовов: один общий запрос, отдельные дедлайны клиентов и проверка, что отмена первого клиента не ломает остальных.

Почему семафор не решает эту задачу

Асинхронная AI-задача закончилась, callback принёс статус done — и бэкенд готов продолжать workflow. Но валидный JSON не доказывает происхождение события, а верная подпись не делает его новым. Покажу проверку исходных байтов на Python и тест, в котором повторный webhook честно проходит HMAC ещё раз.

Две проверки, которые нельзя заменять друг другом

Потоковый ответ может начаться нормально и закончиться полусловом. Разберу на воспроизводимом примере, где заканчивается сетевой чанк, начинается SSE-событие и почему ни одно из них ещё не означает «ответ готов». Ниже — парсер на стандартной библиотеке Python и тесты без платных запросов к модели.

Почему нельзя парсить LLM-стрим по сетевым чанкам: SSE на Python и тест на каждый байт

Обычно я разбираю надёжность AI-интеграций, а здесь решил посмотреть на результат глазами обычного пользователя. Сделал видео с котом-рыцарем в DataEyesAI на Seedance 2.5. Для моего эксперимента соотношение цены и результата оказалось очень удачным — но красивый кадр и убедительное видео для меня всё-таки разные вещи.

Пока агент делает один вызов модели и один запрос к API, всё выглядит предсказуемо. Проблемы начинаются, когда planner разбивает задачу на подзадачи и запускает поиск, базу, CRM и несколько внешних сервисов параллельно.

Один пользовательский запрос превращается в десятки исходящих вызовов. Latency растёт, лимиты провайдеров заканчиваются быстрее, а…

Два клиента задают одинаковый вопрос: «Какой у меня лимит?». Текст совпадает, но права доступа и данные разные. Если кэшировать только промпт или искать похожий запрос по embedding, экономия может превратиться в утечку. Разберём, что включать в ключ, когда обходить кэш и как проверить изоляцию до продакшена.

Кэш LLM сэкономил токены и показал чужой ответ: пишем безопасный cache key на Python

Hedged request — это запасной запрос к тому же LLM-провайдеру, который стартует с небольшой задержкой и выигрывает гонку только тогда, когда основной запрос застрял в длинном хвосте latency. Техника может заметно снизить p99, но без ограничений легко превращает проблему задержек в проблему двойного счёта.

Hedged requests для LLM API: как снизить p99, не удвоив счёт

Обновление модели или промпта часто проверяют на нескольких ручных примерах. Для агента этого мало: один и тот же запрос может вызвать поиск, запись в CRM, письмо или оплату. Разберём схему теневого трафика и воспроизведения запросов, которая позволяет сравнить новую версию с текущей, не меняя реальный мир.

Почему обычного staging недостаточно

Длинный workflow ИИ-агента редко ломается в удобном месте. Модель уже потратила токены, поиск собрал данные, CRM получила запись — и тут процесс упал. Если просто запустить всё заново, вы заплатите повторно и рискуете продублировать побочные эффекты. Разберём checkpointing, idempotency и outbox на практическом примере.

AI-агент упал на 7-м шаге: как продолжить workflow без повторной оплаты и дублей в CRM

Низкая цена за миллион токенов ещё не означает экономию. Если модель чаще ошибается, запускает retries и требует ручной проверки, стоимость выполненной задачи растёт. Покажу, как это измерить и использовать в роутинге.

Дешёвая LLM оказалась дороже: считаем cost per successful task, а не цену токена

JSON Schema решает только половину задачи. Модель может вернуть синтаксически идеальный объект, где скидка равна 240%, дата доставки находится в прошлом, а SKU не существует. Разберём, как

Почему «валидный JSON» ещё ничего не гарантирует