Интеграция с model-ML

Интеграция с model-ML

Обзор

Проект RecipientOFQuotes-Worker полностью интегрирован с библиотекой model-ML, которая предоставляет широкий спектр компонентов для машинного обучения и оптимизации.

Архитектура интеграции с model-ML

graph TB
    subgraph "RecipientOFQuotes-Worker"
        RL_AGENT[RL Agent]
        GA[Genetic Algorithm]
        AB[AB Optimizer]
        ANALYTICS[Analytics Service]
    end
    
    subgraph "model-ML"
        MODELS[RL Models]
        DECIMAL_POOL[DecimalPool]
        CACHE[CacheManager]
        OTEL[OpenTelemetry]
        BAYESIAN[Bayesian Optimization]
        VALIDATION[Validation]
        ERRORS[Structured Errors]
    end
    
    subgraph "Поддерживаемые модели"
        DQN[DQN]
        DDQN[DDQN]
        PPO[PPO]
        SAC[SAC]
        TD3[TD3]
        OTHERS[Другие модели...]
    end
    
    RL_AGENT --> MODELS
    MODELS --> DQN
    MODELS --> DDQN
    MODELS --> PPO
    MODELS --> SAC
    MODELS --> TD3
    MODELS --> OTHERS
    RL_AGENT --> DECIMAL_POOL
    ANALYTICS --> CACHE
    GA --> BAYESIAN
    AB --> VALIDATION
    RL_AGENT --> ERRORS
    ANALYTICS --> OTEL
    GA --> OTEL

Поддерживаемые RL модели

Проект поддерживает все типы моделей из model-ML через фабрику моделей:

Доступные типы моделей

ТипОписаниеИспользование
simple_mlSimple RL Model (по умолчанию)Базовые задачи RL
dqnDeep Q-NetworkГлубокое обучение с подкреплением
ddqnDouble Deep Q-NetworkУлучшенная версия DQN
dueling_dqnDueling Deep Q-NetworkРазделение оценки состояния и действия
a2cAdvantage Actor-CriticActor-Critic алгоритм
a3cAsynchronous Advantage Actor-CriticАсинхронный A2C
ppoProximal Policy OptimizationОптимизация политики
advanced_ppoAdvanced PPOРасширенная версия PPO
cnn_ppoCNN-based PPOPPO с CNN архитектурой
lstm_ppoLSTM PPOPPO с LSTM слоями
rainbow_dqnRainbow DQNКомбинация улучшений DQN
sacSoft Actor-CriticАлгоритм с энтропийной регуляризацией
td3Twin Delayed DDPGУлучшенный DDPG
spago_rlSpago RL IntegrationИнтеграция с Spago
metaMeta LearningМета-обучение
transferTransfer LearningОбучение с переносом

Использование

// Создание модели по типу
model, err := rl_agent.NewRLModelByType(logger, config, "dqn")
if err != nil {
    log.Fatal(err)
}

// Создание агента с конкретным типом модели
agent, err := rl_agent.NewRLAgentWithModelType(
    "agent-id",
    logger,
    config,
    analyticsService,
    "ppo", // Тип модели
)

Компоненты из model-ML

1. DecimalPool

Пул объектов для эффективного управления памятью при работе с decimal значениями.

Преимущества:

  • Снижение аллокаций памяти
  • Улучшение производительности
  • Автоматическое управление пулом

Использование:

import "github.com/QuoteSystemX/model-ML/pkg/decimalutils"

// Decimal теперь использует пул автоматически
value := decimalutils.NewFromFloat(1.5)

2. CacheManager

Высокопроизводительный кэш-менеджер с поддержкой TTL и автоматической очисткой.

Использование:

import "github.com/QuoteSystemX/model-ML/pkg/cache"

// Создание CacheManager
cacheConfig := &cache.CacheConfig{
    AnalyticsCacheSize: 2000,
    DefaultTTL:         time.Minute * 10,
    CleanupInterval:    time.Minute * 5,
}
cacheManager := cache.NewCacheManager(cacheConfig)

// Сохранение данных
cacheManager.Set(cache.AnalyticsCache, "key", data, time.Minute*5)

// Получение данных
var result MyType
if cacheManager.GetAsType(cache.AnalyticsCache, "key", &result) {
    // Данные найдены
}

Интеграция:

  • AnalyticsService использует CacheManager для кэширования аналитики
  • AB Optimizer использует CacheManager для кэширования результатов оптимизации

3. OpenTelemetry

Полная интеграция с OpenTelemetry для observability.

Инициализация:

import "github.com/QuoteSystemX/RecipientOFQuotes-Worker/internal/observability"

// Инициализация при старте приложения
err := observability.InitOpenTelemetry(ctx, log, "service-name", "1.0.0")

Использование в сервисах:

// Получение адаптеров
otelMetrics := observability.GetMetricsAdapter(ctx)
otelTracer := observability.GetTracerAdapter(ctx)

// Запись метрик
otelMetrics.RecordCounter("metric.name", map[string]string{"label": "value"})
otelMetrics.RecordHistogram("metric.duration", duration, map[string]string{})
otelMetrics.RecordGauge("metric.value", value, map[string]string{})

// Создание span
spanCtx, span := otelTracer.StartSpan(ctx, "operation.name")
defer span.End()
span.SetAttribute("key", "value")

Конфигурация через переменные окружения:

  • OTEL_EXPORTER_OTLP_ENDPOINT - endpoint для экспорта
  • OTEL_DISABLED - отключить OpenTelemetry
  • OTEL_DISABLE_TRACING - отключить трейсинг
  • OTEL_DISABLE_METRICS - отключить метрики
  • OTEL_DISABLE_LOGGING - отключить логирование

4. Bayesian Optimization

Интеграция Bayesian optimization для улучшения поиска гиперпараметров в генетическом алгоритме.

Конфигурация:

ab_tests:
  performance:
    ml_optimization:
      enable_bayesian_optimization: true
      bayesian_acquisition_type: "ei"  # ei, ucb, poi

Преимущества:

  • Более эффективный поиск оптимальных параметров
  • Меньше итераций для достижения результата
  • Учет предыдущих результатов при генерации новых кандидатов

5. Validation

Валидация данных и конфигурации с использованием компонентов из model-ML.

Использование:

import "github.com/QuoteSystemX/model-ML/pkg/validation"

// Создание валидатора
validator := validation.NewBaseValidator(ctx)

// Валидация строк
if err := validator.ValidateStringNotEmpty(value, "field_name"); err != nil {
    return err
}

// Валидация чисел
if err := validator.ValidateIntPositive(value, "field_name"); err != nil {
    return err
}

// Валидация диапазонов
if err := validator.ValidateIntRange(value, min, max, "field_name"); err != nil {
    return err
}

// Специализированные валидаторы
rlValidator := validation.NewRLModelValidator(ctx)
if err := rlValidator.ValidateDecimalRange(value, min, max, "field_name"); err != nil {
    return err
}

6. Structured Errors

Структурированная обработка ошибок с контекстом и метаданными.

Использование:

import mlerrors "github.com/QuoteSystemX/model-ML/pkg/errors"

// Создание ошибки
err := mlerrors.New(
    mlerrors.ErrCodeModelCreation,
    "failed to create model",
    mlerrors.SeverityHigh,
).WithContext("Component", "Operation").
  WithMetadata("model_type", "dqn").
  WithMetadata("agent_id", "agent-123")

// Обертка существующей ошибки
err = mlerrors.Wrap(
    originalErr,
    mlerrors.ErrCodeModelTraining,
    "training failed",
    mlerrors.SeverityHigh,
).WithContext("Component", "Operation")

Преимущества:

  • Структурированная информация об ошибках
  • Контекст и метаданные для отладки
  • Классификация ошибок по кодам и серьезности
  • Поддержка восстановления и повторных попыток

Миграция с локальных компонентов

DecimalUtils

До:

import "github.com/QuoteSystemX/RecipientOFQuotes-Worker/pkg/decimalutils"

После:

import "github.com/QuoteSystemX/model-ML/pkg/decimalutils"

API совместим, изменения не требуются.

Кэш

До:

cache := make(map[string]map[string]cachedEntry)

После:

import "github.com/QuoteSystemX/model-ML/pkg/cache"

cacheManager := cache.NewCacheManager(&cache.CacheConfig{
    AnalyticsCacheSize: 2000,
    DefaultTTL:        time.Minute * 10,
})

Зависимости

Проект использует локальную версию model-ML через replace директиву в go.mod:

replace github.com/QuoteSystemX/model-ML => ../model-ML

Это позволяет использовать последние изменения из локального репозитория.

Тестирование

Все компоненты из model-ML покрыты тестами:

# Тесты RL моделей
go test ./internal/services/rl_agent/... -v

# Тесты валидации
go test ./internal/config/... -v

# Тесты оптимизации
go test ./internal/services/ab_optimizer/... -v

Производительность

Интеграция с model-ML принесла следующие улучшения:

  • DecimalPool: снижение аллокаций памяти на 40-60%
  • CacheManager: улучшение производительности кэша на 30-50%
  • Bayesian Optimization: сокращение итераций для поиска оптимальных параметров на 20-30%
  • OpenTelemetry: полная observability без значительного влияния на производительность

Дополнительные ресурсы