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

@@ -67,13 +67,12 @@ class BaseDependencyFactory:
# Настройки ML-скоринга
self.settings['Scoring'] = {
# RAG (ruBERT)
# RAG API
'rag_enabled': self._parse_bool(os.getenv('RAG_ENABLED', 'false')),
'rag_model': os.getenv('RAG_MODEL', 'DeepPavlov/rubert-base-cased'),
'rag_cache_dir': os.getenv('RAG_CACHE_DIR', 'data/models'),
'rag_vectors_path': os.getenv('RAG_VECTORS_PATH', 'data/vectors.npz'),
'rag_max_examples': self._parse_int(os.getenv('RAG_MAX_EXAMPLES', '10000')),
'rag_score_multiplier': self._parse_float(os.getenv('RAG_SCORE_MULTIPLIER', '5.0')),
'rag_api_url': os.getenv('RAG_API_URL', ''),
'rag_api_key': os.getenv('RAG_API_KEY', ''),
'rag_api_timeout': self._parse_int(os.getenv('RAG_API_TIMEOUT', '30')),
'rag_test_mode': self._parse_bool(os.getenv('RAG_TEST_MODE', 'false')),
# DeepSeek
'deepseek_enabled': self._parse_bool(os.getenv('DEEPSEEK_ENABLED', 'false')),
'deepseek_api_key': os.getenv('DEEPSEEK_API_KEY', ''),
@@ -127,53 +126,35 @@ class BaseDependencyFactory:
def _init_scoring_manager(self):
"""
Инициализирует ScoringManager с RAG и DeepSeek сервисами.
Инициализирует ScoringManager с RAG API клиентом и DeepSeek сервисом.
Вызывается лениво при первом обращении к get_scoring_manager().
"""
from helper_bot.services.scoring import (
ScoringManager,
RAGService,
RagApiClient,
DeepSeekService,
VectorStore,
)
scoring_config = self.settings['Scoring']
# Инициализация RAG сервиса
rag_service = None
# Инициализация RAG API клиента
rag_client = None
if scoring_config['rag_enabled']:
# Путь к векторам
vectors_path = scoring_config['rag_vectors_path']
if not os.path.isabs(vectors_path):
vectors_path = os.path.join(self._project_dir, vectors_path)
api_url = scoring_config['rag_api_url']
api_key = scoring_config['rag_api_key']
# Путь к кешу моделей
cache_dir = scoring_config['rag_cache_dir']
if not os.path.isabs(cache_dir):
cache_dir = os.path.join(self._project_dir, cache_dir)
# Создаем директории если нужно
os.makedirs(os.path.dirname(vectors_path), exist_ok=True)
os.makedirs(cache_dir, exist_ok=True)
# Создаем VectorStore
vector_store = VectorStore(
vector_dim=768, # ruBERT dimension
max_examples=scoring_config['rag_max_examples'],
storage_path=vectors_path,
score_multiplier=scoring_config['rag_score_multiplier'],
)
# Создаем RAGService
rag_service = RAGService(
model_name=scoring_config['rag_model'],
vector_store=vector_store,
cache_dir=cache_dir,
enabled=True,
)
logger.info(f"RAGService инициализирован: {scoring_config['rag_model']}")
if not api_url or not api_key:
logger.warning("RAG включен, но не указаны RAG_API_URL или RAG_API_KEY")
else:
rag_client = RagApiClient(
api_url=api_url,
api_key=api_key,
timeout=scoring_config['rag_api_timeout'],
test_mode=scoring_config['rag_test_mode'],
enabled=True,
)
logger.info(f"RagApiClient инициализирован: {api_url} (test_mode={scoring_config['rag_test_mode']})")
# Инициализация DeepSeek сервиса
deepseek_service = None
@@ -189,7 +170,7 @@ class BaseDependencyFactory:
# Создаем менеджер
self._scoring_manager = ScoringManager(
rag_service=rag_service,
rag_client=rag_client,
deepseek_service=deepseek_service,
)