Как вы измеряете «cost of reasoning» у агента (не только токены, но и шаги, время, ошибки)?
Краткий тезис
Cost of reasoning — это совокупная стоимость выполнения агентом цепочки действий (шагов) для решения задачи. Она включает не только стоимость токенов LLM, но и задержки (latency), количество шагов, а также штрафы за ошибки (повторные попытки, откаты). Измерение ведётся через формулу Cost = Σ(шаг_i)[токены_i × цена + latency_i + penalty_за_ошибку_i], а ключевой метрикой является cost per successful task (стоимость одного успешно выполненного задания). Оптимизация достигается pruning'ом (отсечением) ненужных шагов, кэшированием и улучшением планирования.
1. Термин: Cost of reasoning (стоимость рассуждения)
Cost of reasoning — это метрика, которая оценивает все ресурсы, затраченные агентом на генерацию ответа или выполнение действия. В отличие от простого RAG, где стоимость — это в основном токены на retrieval + генерацию, у агента добавляются:
- Шаги (steps): количество вызовов LLM, вызовов инструментов, циклов планирования.
- Задержка (latency): время выполнения каждого шага (включая ожидание API, выполнение кода).
- Ошибки (errors): неудачные попытки, которые требуют повторных шагов или отката (rollback).
Почему это важно: без учёта этих компонентов можно получить агента, который формально решает задачу, но тратит в 10 раз больше ресурсов, чем необходимо. На production это ведёт к высоким финансовым затратам и плохому UX из-за долгого ожидания.
2. Формула стоимости и её компоненты
Базовая формула:
Cost = Σ(шаг_i) [токены_i × цена_токена + latency_i + penalty_за_ошибку_i]
Где:
| Компонент | Описание | Единица измерения |
|---|---|---|
токены_i | Количество входных + выходных токенов на шаге i | токены |
цена_токена | Стоимость одного токена для используемой модели (например, $0.01/1K токенов) | $/токен |
latency_i | Время выполнения шага i (включая сетевые задержки) | секунды |
penalty_за_ошибку_i | Штраф за неудачный шаг (может быть равен стоимости повторного шага или фиксированной величине) | $ или баллы |
Пример расчёта:
- Шаг 1: планирование — 500 токенов, цена $0.005, latency 2 с, без ошибок.
- Шаг 2: вызов инструмента — 200 токенов (запрос), latency 5 с, ошибка → penalty = стоимость повторного шага (700 токенов + 5 с).
- Шаг 3: повторный вызов — 700 токенов, latency 5 с, успех.
Итоговая стоимость: (500×0.00001 + 2) + (200×0.00001 + 5 + (700×0.00001+5)) + (700×0.00001+5) = ... (в условных единицах).
3. Мониторинг cost per successful task
Cost per successful task (CPST) — это средняя стоимость одного успешно завершённого задания. Формула:
CPST = (суммарная стоимость всех попыток) / (количество успешных задач)
Зачем: позволяет сравнивать эффективность разных агентов или версий одного агента. Если CPST растёт, значит агент стал делать больше лишних шагов или чаще ошибаться.
Пример:
- 100 задач, 80 успешных, 20 неудачных.
- Суммарная стоимость всех 100 попыток = $50.
- CPST = $50 / 80 = $0.625 за успешную задачу.
Дополнительно: можно считать cost per attempt (стоимость одной попытки) и success rate (доля успешных попыток). Комбинация этих метрик даёт полную картину.
4. Оптимизация через pruning ненужных шагов
Pruning (отсечение) — это удаление шагов, которые не влияют на результат или могут быть объединены. Методы:
- Статический pruning: на основе анализа логов убираются шаги, которые никогда не меняют ответ (например, избыточные проверки).
- Динамический pruning: агент сам решает, какие шаги пропустить, используя confidence score или early stopping.
Пример: агент для ответа на вопрос сначала ищет в БД, потом проверяет факты, потом генерирует ответ. Если поиск дал высокую уверенность, шаг проверки можно пропустить.
Инструменты: логирование всех шагов (с помощью tracing — трассировки) и анализ графа выполнения. Популярные библиотеки: LangSmith, Weights & Biases, OpenTelemetry.
5. Метрики для измерения ошибок (penalty)
Ошибки в контексте агента делятся на:
- Execution errors: инструмент вернул ошибку (например, API timeout).
- Reasoning errors: агент сделал неверный вывод (например, выбрал неправильный инструмент).
- Hallucination errors: агент выдал факт, не подтверждённый контекстом.
Penalty может быть:
- Финансовый: стоимость повторного шага (токены + время).
- Временной: добавление фиксированного штрафа за каждый неудачный шаг (например, +10 секунд к latency).
- Комбинированный: penalty = cost_retry + α × latency_retry, где α — вес времени.
Метрики ошибок:
- Error rate: доля шагов, завершившихся ошибкой.
- Retry count: среднее количество повторных попыток на задачу.
- Rollback frequency: как часто агент откатывается к предыдущему состоянию.
6. Инструменты и подходы для измерения
| Инструмент | Назначение | Пример использования |
|---|---|---|
| LangSmith | Трейсинг шагов, логирование токенов и времени | Визуализация цепочек вызовов, подсчёт стоимости |
| Weights & Biases | Мониторинг экспериментов, сравнение агентов | Логирование CPST, error rate |
| OpenTelemetry | Сбор метрик latency и ошибок в production | Интеграция с Prometheus + Grafana |
| Custom logging | Специфичные метрики (penalty, pruning) | JSON-логи каждого шага с полями: step_id, tokens, latency, error, penalty |
Пример кода для логирования (Python):
import time
import json
class AgentLogger:
def __init__(self):
self.steps = []
def log_step(self, step_name, tokens, latency, error=False):
step = {
"step": step_name,
"tokens": tokens,
"latency": latency,
"error": error,
"penalty": 0
}
if error:
# penalty = стоимость повторного шага (оценивается позже)
step["penalty"] = self._estimate_retry_cost(tokens, latency)
self.steps.append(step)
def _estimate_retry_cost(self, tokens, latency):
# упрощённо: штраф равен стоимости ещё одного такого же шага
return tokens * TOKEN_PRICE + latency * TIME_PENALTY
def total_cost(self):
return sum(s["tokens"] * TOKEN_PRICE + s["latency"] * TIME_PENALTY + s["penalty"] for s in self.steps)
7. Сравнение с простым RAG (без агента)
| Параметр | Простой RAG | Agentic RAG |
|---|---|---|
| Количество шагов | 2 (retrieval + generation) | 3–10+ (планирование, вызовы инструментов, проверки) |
| Основные затраты | Токены retrieval + generation | Токены + latency + penalty за ошибки |
| Измерение стоимости | токены × цена | Σ(шаг)[токены×цена + latency + penalty] |
| Оптимизация | Улучшение retrieval, кэширование | Pruning шагов, early stopping, better planning |
Вывод: в Agentic RAG cost of reasoning — более сложная метрика, требующая учёта динамики выполнения.
8. Пет-проект для закрепления
Задача: Разработать агента для ответа на вопросы по документации (например, по Python), который умеет искать в нескольких источниках (веб, локальная БД, код). Измерить и оптимизировать его cost of reasoning.
Инструменты:
- Python + LangChain или собственный фреймворк.
- LangSmith для трейсинга.
- SQLite для хранения логов.
- Модель: GPT-4o-mini (дешёвая) для экспериментов.
Шаги:
- Реализовать агента с 3 шагами: анализ запроса → поиск → генерация ответа.
- Добавить логирование каждого шага (токены, latency, ошибки).
- Посчитать CPST на 50 вопросах.
- Ввести pruning: если поиск дал высокий score (например, >0.9), пропустить шаг проверки фактов.
- Сравнить CPST до и после pruning.
Ожидаемый результат: снижение CPST на 20–40% без потери качества ответов (проверить accuracy на тестовом наборе).
9. Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 5 | Оценка retrieval — основа для понимания влияния ошибок поиска на cost |
| 7 | Latency — один из компонентов cost of reasoning |
| 9 | Обновление документов может влиять на количество шагов (например, переиндексация) |
| 1 | Архитектура RAG — база для построения агента |
| 2 | Проблема контекста может увеличивать количество шагов (разбиение запроса) |
| 3 | Chunking влияет на retrieval и, косвенно, на cost (больше чанков → больше шагов) |
10. Навигация
- Предыдущий: 392
- Следующий: 394
- Индекс: 00. Индекс разборов
Навигация
- Предыдущий: 392
- Следующий: 394
- Индекс: 00. Индекс разборов