refactor: обновление системы ML-скоринга и переход на RAG API
- Обновлен Dockerfile для использования Alpine вместо Slim, улучшая размер образа. - Удален устаревший RAGService и добавлен RagApiClient для работы с внешним RAG API. - Обновлены переменные окружения в env.example для настройки нового RAG API. - Обновлен ScoringManager для интеграции с RagApiClient. - Упрощена структура проекта, удалены ненужные файлы и зависимости, связанные с векторным хранилищем. - Обновлены обработчики и функции для работы с новым API, включая получение статистики и обработку ошибок.
This commit is contained in:
@@ -110,12 +110,63 @@ logger.error(f"Критическая ошибка: {e}", exc_info=True)
|
||||
|
||||
### Уровни логирования
|
||||
|
||||
- `logger.debug()` - отладочная информация
|
||||
- `logger.info()` - информационные сообщения о работе
|
||||
- `logger.warning()` - предупреждения о потенциальных проблемах
|
||||
- `logger.error()` - ошибки, требующие внимания
|
||||
- `logger.debug()` - отладочная информация (детали выполнения, промежуточные значения, HTTP запросы(не используется в проекте))
|
||||
- `logger.info()` - информационные сообщения о работе (успешные операции, важные события)
|
||||
- `logger.warning()` - предупреждения о потенциальных проблемах (некритичные ошибки, таймауты)
|
||||
- `logger.error()` - ошибки, требующие внимания (исключения, сбои)
|
||||
- `logger.critical()` - критические ошибки
|
||||
|
||||
### Паттерн логирования в сервисах
|
||||
|
||||
При работе с внешними API и сервисами используйте следующий паттерн:
|
||||
|
||||
```python
|
||||
from logs.custom_logger import logger
|
||||
|
||||
class ApiClient:
|
||||
async def calculate_score(self, text: str) -> Score:
|
||||
# Логируем начало операции (debug)
|
||||
logger.debug(f"ApiClient: Отправка запроса на расчет скора (text_preview='{text[:50]}')")
|
||||
|
||||
try:
|
||||
response = await self._client.post(url, json=data)
|
||||
|
||||
# Логируем статус ответа (debug)
|
||||
logger.debug(f"ApiClient: Получен ответ (status={response.status_code})")
|
||||
|
||||
# Обрабатываем ответ
|
||||
if response.status_code == 200:
|
||||
result = response.json()
|
||||
# Логируем успешный результат (info)
|
||||
logger.info(f"ApiClient: Скор успешно получен (score={result['score']:.4f})")
|
||||
return result
|
||||
else:
|
||||
# Логируем ошибку (error)
|
||||
logger.error(f"ApiClient: Ошибка API (status={response.status_code})")
|
||||
raise ApiError(f"Ошибка API: {response.status_code}")
|
||||
|
||||
except httpx.TimeoutException:
|
||||
# Логируем таймаут (error)
|
||||
logger.error(f"ApiClient: Таймаут запроса (>{timeout}с)")
|
||||
raise
|
||||
except httpx.RequestError as e:
|
||||
# Логируем ошибку подключения (error)
|
||||
logger.error(f"ApiClient: Ошибка подключения: {e}")
|
||||
raise
|
||||
except Exception as e:
|
||||
# Логируем неожиданные ошибки (error)
|
||||
logger.error(f"ApiClient: Неожиданная ошибка: {e}", exc_info=True)
|
||||
raise
|
||||
```
|
||||
|
||||
**Принципы:**
|
||||
- `logger.debug()` - для деталей выполнения (URL, параметры запроса, статус ответа)
|
||||
- `logger.info()` - для успешных операций с важными результатами
|
||||
- `logger.warning()` - для некритичных проблем (валидация, таймауты в неважных операциях)
|
||||
- `logger.error()` - для всех ошибок перед пробросом исключения
|
||||
- Всегда логируйте ошибки перед `raise`
|
||||
- Используйте `exc_info=True` для критических ошибок
|
||||
|
||||
## Метрики ошибок
|
||||
|
||||
Декоратор `@track_errors` автоматически отслеживает ошибки:
|
||||
|
||||
Reference in New Issue
Block a user