Динамическая очередь асинхронных задач.
Сейчас запрос к ИИ всегда идет по одному сценарию и отрабатывает неточно, нужно чтобы в рамках одного запроса мы:
- парсили промпт от пользователя
- определяли, насколько понятен запрос
- если не понятен - задавали уточняющие вопросы
- если запрос очень простой - сразу обрабатывли его без лишних запросов к ИИ
- иначе подгружали проект для контекста и обрабатывали запрос
- в итоге возвщали пользователю результат в виде фронтенд экшенов
После некоторых обсуждений решили, что будем использовать очередь задач для такого процесса.
- Задачи выполняются последовательно
- Каждая задача может быть асинхронной
- Задачи могут добавлять новые задачи в очередь во время выполнения
- Поддерживается таймаут выполнения
- Задачи должны логироваться
Главное требование - простота кода и его расширяемость. Основной кейс для расширения - добавление новых типов задач, и новые зависимости между ними. Также важно, чтобы была возможность легко тестировать отдельные задачи и их взаимодействия. Очень важно не переусложнить решение и реализовать его максимально быстро с учетом требований.
- Неявное управление зависимостями между задачами
- Сложная реализация очереди
- Использование готовых решений для очереди
- Отсутствие четкой декомпозиции и разделения ответственностей в коде
- Логирование, которое не позволяет воспроизвести процесс
- Много кастов типизации
- Сложная иерархия классов
- Много условий в коде
- Ограничения в функционале задач
- Миграция текущей обработки запроса (обычный асинхронный обработчик)
- Реализовать диалог 2х LLM
- Циклические зависимости между задачами
- Параллельная работа нескольких разработчиков над задачами
- Описание текущих задач и зависимостей без кода
- Для простоты и очередь будет реализована на основе простого js массива.
- Каждый запрос на сервис - создание очереди c одной задачей, которая запускает процесс.
- Очередь отвечает за итерацию по таскам.
- Метод обрабатывающий запрос - использует очередь(создание и добавление), обрабатывает результат тасок
- Зависимости между задачами односторонние - задача создает другую задачу
- Обработка конкретного запроса - полностью в рамках одной задачи
- Ветвления, циклы - реализуются с помощью создания новых задач
- Реализация очереди, вспомогательных классов
AbstractTaskиRootTask(не больше пары дней) - Добавление логирования (пара дней с настройкой бд)
- Создание таски для текущей реализации (создать таску -> вставить текущий код)
- По требования к новому процессу описать список тасок
- Оценить реализацию каждой таски (не должно быть оценок больше дня, иначе декомпозируем задачу)