Интеграция с 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_ml | Simple RL Model (по умолчанию) | Базовые задачи RL |
dqn | Deep Q-Network | Глубокое обучение с подкреплением |
ddqn | Double Deep Q-Network | Улучшенная версия DQN |
dueling_dqn | Dueling Deep Q-Network | Разделение оценки состояния и действия |
a2c | Advantage Actor-Critic | Actor-Critic алгоритм |
a3c | Asynchronous Advantage Actor-Critic | Асинхронный A2C |
ppo | Proximal Policy Optimization | Оптимизация политики |
advanced_ppo | Advanced PPO | Расширенная версия PPO |
cnn_ppo | CNN-based PPO | PPO с CNN архитектурой |
lstm_ppo | LSTM PPO | PPO с LSTM слоями |
rainbow_dqn | Rainbow DQN | Комбинация улучшений DQN |
sac | Soft Actor-Critic | Алгоритм с энтропийной регуляризацией |
td3 | Twin Delayed DDPG | Улучшенный DDPG |
spago_rl | Spago RL Integration | Интеграция с Spago |
meta | Meta Learning | Мета-обучение |
transfer | Transfer 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- отключить OpenTelemetryOTEL_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 без значительного влияния на производительность