/
Вопросы и ответы
/
Промт-инжиниринг
/

Как сравнивать два варианта запроса на живом трафике

Как сравнивать два варианта запроса на живом трафике

17 дней назад

Никита Вихров

Ответы

0

Как сравнивать два варианта запроса на живом трафике

Иногда непонятно, какой из двух запросов лучше работает для реальных пользователей. Статичный проверочный набор не всегда отражает живые данные. Решение — A/B тест: разные пользователи получают разные варианты, и вы замеряете результаты.

Схема

  1. Делите пользователей на две группы.
  2. Каждая группа получает свою версию запроса.
  3. Замеряете: оценки, повторные вопросы, жалобы, клики.
  4. Через неделю сравниваете числа.

Пример реализации

import hashlib
from openai import OpenAI

client = OpenAI()

PROMPT_A = "Ты помощник службы поддержки. Отвечай кратко."
PROMPT_B = "Ты помощник службы поддержки. Отвечай кратко. Если не знаешь ответа — скажи об этом прямо."

def get_variant(user_id: str) -> str:
    """Стабильно делим пользователей на две группы по хешу ID."""
    digest = int(hashlib.md5(user_id.encode()).hexdigest(), 16)
    return "B" if digest % 2 == 0 else "A"

def ask(user_id: str, user_text: str) -> dict:
    вариант = get_variant(user_id)
    system = PROMPT_A if вариант == "A" else PROMPT_B

    resp = client.chat.completions.create(
        model="gpt-4.1",
        temperature=0.3,
        max_tokens=512,
        messages=[
            {"role": "system", "content": system},
            {"role": "user", "content": user_text}
        ]
    )

    ответ = resp.choices[0].message.content

    # Логируем для последующего анализа
    log = {
        "user_id": user_id,
        "variant": вариант,
        "user_text": user_text,
        "answer": ответ
    }

    return {"answer": ответ, "variant": вариант, "log": log}

Пример подсчёта результатов

from collections import defaultdict

def analyze_results(logs: list[dict]) -> dict:
    """Подсчитывает среднюю оценку и число запросов по вариантам."""
    группы = defaultdict(lambda: {"count": 0, "score_sum": 0})

    for запись in logs:
        вариант = запись["variant"]
        группы[вариант]["count"] += 1
        # score берётся из базы — оценка пользователя (1–5)
        группы[вариант]["score_sum"] += запись.get("user_score", 0)

    итог = {}
    for вариант, данные in группы.items():
        count = данные["count"]
        итог[вариант] = {
            "requests": count,
            "avg_score": данные["score_sum"] / count if count > 0 else None
        }

    return итог

Правила

  • Не меняйте варианты в процессе теста: пользователь должен всегда получать один и тот же вариант.
  • Дайте тесту достаточно времени: минимум 500–1000 запросов на вариант для значимых выводов.
  • Тестируйте одно изменение за раз: если менять и запрос, и модель одновременно, непонятно, что сработало.
  • После победы одного варианта переводите всех пользователей на него и фиксируйте новый baseline.

17 дней назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845