Оценка, стоимость и безопасность агентов

Прежде чем доверить агенту работу, его нужно оценить, посчитать его стоимость и понять риски. Об этом — последний теоретический урок.

Оценка агента (evaluation) — измерение того, насколько хорошо агент решает задачи: чаще всего через долю успешно выполненных заданий на тестовом наборе.

Как оценивать агента

Агент сложнее обычной модели: он многошаговый, и «правильность» — это не один ответ, а успех всей задачи. Основные подходы:

  • Success rate — доля задач, решённых верно (главная метрика).
  • Проверка результата — объективный критерий: прошли ли тесты, верен ли итог, выполнены ли все требования.
  • Эффективность — за сколько шагов и какой ценой решено (меньше шагов при том же успехе — лучше).
  • LLM-as-judge — отдельная модель оценивает качество там, где нет объективной проверки (с осторожностью: судья тоже ошибается).

Считаем success rate

Простейшая оценка: прогнать агента по набору задач с известными ответами и посчитать долю верных.

# задача -> правильный ответ
test_set = {"2+2": "4", "10*5": "50", "100-1": "99"}

def agent(task):
    # агент-заглушка: одну задачу решает неверно
    wrong = {"10*5": "60"}
    return wrong.get(task, str(eval(task)))

correct = 0
for task, expected in test_set.items():
    got = agent(task)
    ok = (got == expected)
    correct += ok
    print(f"{task:8} ожидали {expected:3} получили {got:3} -> {'верно' if ok else 'НЕВЕРНО'}")

rate = correct / len(test_set)
print(f"Success rate: {correct}/{len(test_set)} = {rate:.0%}")

Вывод:

2+2      ожидали 4   получили 4   -> верно
10*5     ожидали 50  получили 60  -> НЕВЕРНО
100-1    ожидали 99  получили 99  -> верно
Success rate: 2/3 = 67%

Почему агенты дорогие и медленные

Один запрос пользователя = много вызовов LLM (мысль, действие, наблюдение, снова мысль…). Стоимость и латентность растут с числом шагов.

cost_per_call = 0.01     # условная цена одного вызова LLM
latency_per_call = 1.5   # секунд на вызов

for steps in [1, 3, 8]:
    print(f"{steps} шаг(ов): цена ~${steps*cost_per_call:.2f}, "
          f"задержка ~{steps*latency_per_call:.1f}с")

Вывод:

1 шаг(ов): цена ~$0.01, задержка ~1.5с
3 шаг(ов): цена ~$0.03, задержка ~4.5с
8 шаг(ов): цена ~$0.08, задержка ~12.0с

На масштабе это серьёзно: тысячи запросов по 8 шагов — заметные деньги и секунды ожидания. Поэтому оптимизируют число шагов, кешируют, берут модель подешевле для простых решений.

Риски безопасности

РискСутьЗащита
Prompt injectionвредная инструкция во внешнем текстене доверять внешнему как команде
Утечка данныхагент выдаёт лишнее наружугардрейл выхода, ограничение данных
Опасные действиянеобратимые шагиправа, человек-в-цикле
Зацикливание/расходыбесконтрольные вызовылимиты шагов и бюджета

Итог

  • Главная метрика агента — success rate; опираться лучше на объективную проверку результата.
  • Агенты дорогие и медленные: один запрос — много вызовов LLM; число шагов оптимизируют.
  • Ключевые риски — prompt injection, утечки, опасные действия, расходы; на каждый есть защита из урока 6.3.
Проверьте себя
1. Какая метрика — главная при оценке агента?
AДлина ответа
BSuccess rate — доля задач, решённых верно
CЧисло использованных инструментов
DРазмер контекстного окна
2. Почему агенты дороже и медленнее одного вызова модели?
AОни используют более крупные модели всегда
BОдин запрос превращается в несколько вызовов LLM (мысль, действие, наблюдение…), и стоимость с задержкой растут с числом шагов
CИнструменты стоят денег сами по себе
DПарсинг текста очень медленный
3. С какой оговоркой стоит использовать LLM-as-judge для оценки?
AСудья всегда точнее объективной проверки
BСудья — тоже модель и может ошибаться, поэтому где можно лучше опираться на объективный критерий
CLLM-as-judge бесплатен
DЕго нельзя применять никогда
Поддержать проект