Налаштування моніторингу якості відповідей AI-моделі

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1566 послуг
Налаштування моніторингу якості відповідей AI-моделі
Середній
від 1 дня до 3 днів
Часті запитання

Напрямки AI-розробки

Етапи розробки AI-рішення

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1285
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1198
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    902
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1121
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    589
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    858

Налаштування моніторингу якості відповідей AI-моделі

Моніторинг якості відповідей LLM у production – виявлення деградації до того, як користувачі скаржаться. Автоматичні метрики: довжина відповідей, токсичність, релевантність, hallucination signals.

Метрики якості для моніторингу

Проксі-метрики (обчислюються автоматично, без LLM):

  • Довжина відповіді: різке зменшення → регресія у промпті
  • Refusal rate: зростання відмов відповідати
  • Incomplete response rate: відповіді обрізані max_tokens
  • Repetition rate: петлі у генерації

LLM-as-judge метрики (дорожче, вибірково):

  • Relevance to query
  • Factual consistency
  • Helpfulness score
  • Toxicity / safety
class ResponseQualityMonitor:
    def analyze_response(self, request: str, response: str) -> QualitySignals:
        signals = QualitySignals()

        # Длина
        signals.response_length_tokens = count_tokens(response)
        signals.is_very_short = signals.response_length_tokens < 20

        # Отказ отвечать
        refusal_patterns = ["I cannot", "I'm unable", "I don't have access",
                           "не могу", "не в состоянии", "отказываюсь"]
        signals.is_refusal = any(p.lower() in response.lower() for p in refusal_patterns)

        # Обрезание
        signals.is_truncated = response.endswith(("...", "—", "–"))

        # Повторения (петли)
        words = response.split()
        if len(words) > 20:
            unique_bigrams = len(set(zip(words, words[1:])))
            total_bigrams = len(words) - 1
            signals.repetition_score = 1 - unique_bigrams / total_bigrams
            signals.has_loops = signals.repetition_score > 0.4

        return signals

Дрейф якості з часом

Проблема: LLM API провайдери оновлюють моделі без анонсів. Учорашній gpt-4o – не сьогоднішній. Відстежуємо ковзне середнє метрик якості:

def detect_quality_drift(
    metric: str,
    recent_values: list[float],  # последние N запросов
    baseline_values: list[float]  # исторический baseline
) -> DriftDetection:
    from scipy.stats import ks_2samp

    # Kolmogorov-Smirnov тест на изменение распределения
    statistic, p_value = ks_2samp(baseline_values, recent_values)

    # Среднее значение
    recent_mean = np.mean(recent_values)
    baseline_mean = np.mean(baseline_values)
    relative_change = (recent_mean - baseline_mean) / baseline_mean

    return DriftDetection(
        metric=metric,
        is_drifted=p_value < 0.05,
        relative_change=relative_change,
        direction="improvement" if relative_change > 0 else "degradation",
        severity="high" if abs(relative_change) > 0.10 else "medium" if abs(relative_change) > 0.05 else "low"
    )

Алерти та дашборди

Prometheus метрики публікуються з моніторингу:

from prometheus_client import Histogram, Counter, Gauge

RESPONSE_LENGTH = Histogram("llm_response_length_tokens", "Response length distribution",
                            buckets=[10, 50, 100, 200, 500, 1000, 2000])
REFUSAL_COUNT = Counter("llm_refusal_total", "Refusal responses")
QUALITY_SCORE = Gauge("llm_quality_score", "Rolling quality score", ["model"])

# Алерты
# ALERT если refusal_rate за 15 минут > 5%
# ALERT если средняя длина ответа < 50 токенов (была > 150)
# ALERT если quality_score < baseline - 0.1