Архитектура решения
В статье рассматривается подход к классификации форм с использованием моделей машинного обучения (LLM), при этом сохраняя низкую задержку и минимизируя влияние на производительность.
Основные требования:
- Минимизация задержки обработки формы.
- Изоляция вызовов LLM от критического пути выполнения.
- Обработка ошибок без нарушения основного процесса подачи данных.
- Стоимость менее одного цента за классификацию.
- Защита от инъекций через пользовательский ввод.
Решение основано на использовании функции after() в Next.js версии 16, которая позволяет выполнять асинхронные задачи после того, как ответ был отправлен пользователю.
Реализация
Процесс выглядит следующим образом:
User submit → Server Action → Validate → Rate Limit → Capacity Check & Insert → File Upload → Return 200 → after() → Email Send → Spam Classification → Webhook / Workflow → A/B Submit Count
После отправки ответа пользователю запускаются следующие действия:
- Отправка электронного письма.
- Классификация спама с помощью модели LLM.
- Выполнение веб-хуков или рабочих процессов.
- Сбор статистики о количестве отправленных форм.
Таким образом, все операции, связанные с обработкой данных и их анализом, выполняются параллельно и не влияют на время отклика пользователя.
Пример кода
Пример реализации асинхронной обработки с использованием функции after():
import { after } from 'next/server';
//...
bloc
Этот подход обеспечивает высокую масштабируемость и надежность системы, позволяя эффективно использовать ресурсы сервера и минимизировать затраты.