refactor: обновление системы ML-скоринга и переход на RAG API

- Обновлен Dockerfile для использования Alpine вместо Slim, улучшая размер образа.
- Удален устаревший RAGService и добавлен RagApiClient для работы с внешним RAG API.
- Обновлены переменные окружения в env.example для настройки нового RAG API.
- Обновлен ScoringManager для интеграции с RagApiClient.
- Упрощена структура проекта, удалены ненужные файлы и зависимости, связанные с векторным хранилищем.
- Обновлены обработчики и функции для работы с новым API, включая получение статистики и обработку ошибок.
This commit is contained in:
2026-01-26 22:03:15 +03:00
parent 7f6f0f028c
commit feee7f010c
17 changed files with 602 additions and 1095 deletions

View File

@@ -66,11 +66,22 @@ async def start_bot(bdf):
# Middleware уже добавлены на уровне dispatcher
dp.include_routers(admin_router, private_router, callback_router, group_router, voice_router)
# Получаем scoring_manager для использования в shutdown
scoring_manager = bdf.get_scoring_manager()
# Добавляем обработчик завершения для корректного закрытия
@dp.shutdown()
async def on_shutdown():
logging.info("Bot shutdown initiated, cleaning up resources...")
try:
# Закрываем ресурсы ScoringManager
if scoring_manager:
try:
await scoring_manager.close()
logging.info("ScoringManager закрыт")
except Exception as e:
logging.error(f"Ошибка закрытия ScoringManager: {e}")
await bot.session.close()
logging.info("Bot session closed successfully")
except Exception as e:
@@ -78,22 +89,6 @@ async def start_bot(bdf):
await bot.delete_webhook(drop_pending_updates=True)
# Загружаем примеры для RAG из базы данных
scoring_manager = bdf.get_scoring_manager()
if scoring_manager and scoring_manager.rag_service and scoring_manager.rag_service.is_enabled:
try:
db = bdf.get_db()
positive_texts = await db.get_approved_posts_texts(limit=5000)
negative_texts = await db.get_declined_posts_texts(limit=5000)
if positive_texts or negative_texts:
await scoring_manager.load_examples_from_db(positive_texts, negative_texts)
logging.info(f"RAG: Загружено {len(positive_texts)} положительных и {len(negative_texts)} отрицательных примеров")
else:
logging.warning("RAG: Нет примеров в базе данных для загрузки")
except Exception as e:
logging.error(f"Ошибка загрузки примеров для RAG: {e}")
# Запускаем HTTP сервер для метрик параллельно с ботом
metrics_host = bdf.settings.get('Metrics', {}).get('host', '0.0.0.0')
metrics_port = bdf.settings.get('Metrics', {}).get('port', 8080)
@@ -113,6 +108,14 @@ async def start_bot(bdf):
logging.error(f"❌ Ошибка запуска бота: {e}")
raise
finally:
# Закрываем ресурсы ScoringManager перед завершением (на случай если shutdown не сработал)
if scoring_manager:
try:
await scoring_manager.close()
logging.info("ScoringManager закрыт в finally")
except Exception as e:
logging.error(f"Ошибка закрытия ScoringManager в finally: {e}")
# Останавливаем метрики сервер при завершении
try:
await stop_metrics_server()