Ответ
Да, в одном из проектов мы использовали ML для автоматической категоризации текстовых обращений пользователей в службу поддержки.
Архитектура решения:
- Обучение модели (Python): Модель на основе
scikit-learn(TF-IDF + классификатор) обучалась на размеченных исторических данных. - ML-микросервис (Python): Обученная модель была обернута в REST API с помощью Flask/FastAPI и развернута как отдельный сервис.
- Интеграция (Java): Основное бизнес-приложение на Java взаимодействовало с ML-сервисом через HTTP.
Код клиента на Java (упрощенно):
@Component
public class MlClassificationClient {
private final RestTemplate restTemplate;
private final String mlServiceUrl;
public String predictCategory(String userText) {
MlRequest request = new MlRequest(userText);
// Синхронный вызов ML-сервиса
ResponseEntity<MlResponse> response = restTemplate.postForEntity(
mlServiceUrl + "/predict",
request,
MlResponse.class
);
return response.getBody().getPredictedCategory(); // Например, "billing", "technical"
}
}
// DTO для запроса
public class MlRequest {
private String text;
// constructor, getter, setter
}
Ключевые моменты и выводы:
- Разделение ответственности: ML-логика изолирована в отдельный сервис, что позволяет переобучать и обновлять модель независимо.
- Производительность: Для снижения задержек (
latency) использовалось кэширование частых запросов и асинхронные вызовы (CompletableFuture) для неблокирующей интеграции. - Сложности: Основные вызовы были связаны с поддержанием актуальности модели (дрейф данных) и мониторингом качества предсказаний в production.