refactor: обновление системы ML-скоринга и переход на RAG API
- Обновлен Dockerfile для использования Alpine вместо Slim, улучшая размер образа. - Удален устаревший RAGService и добавлен RagApiClient для работы с внешним RAG API. - Обновлены переменные окружения в env.example для настройки нового RAG API. - Обновлен ScoringManager для интеграции с RagApiClient. - Упрощена структура проекта, удалены ненужные файлы и зависимости, связанные с векторным хранилищем. - Обновлены обработчики и функции для работы с новым API, включая получение статистики и обработку ошибок.
This commit is contained in:
@@ -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,
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user