Задержка и стоимость каждого шага
Измеряйте расход токенов и реальное время выполнения каждого узла, чтобы находить медленные и дорогие шаги.
«Задержка и стоимость каждого шага» — бесплатный урок AI Agents на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Agents, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Agents содержит 4 уроков всего.
Зачем измерять каждый шаг?
Суммарные задержка и стоимость показывают, что система медленная или дорогая, но не WHICH шаг медленный или дорогой. Для исправления проблемы необходимо измерять каждый шаг.
Запись задержки
Добавляйте её в каждый span:
start = time.time()
# ... do work ...
span.duration_ms = (time.time() - start) * 1000Категории задержки
Типичные медленные шаги в агентах:
- Вызов LLM — от 500 мс до 10 с
- Веб-поиск — от 200 мс до 2 с
- Создание эмбеддинга — от 50 до 200 мс
- Запрос к базе данных — от 5 до 500 мс
Запись стоимости
Для шагов с LLM умножайте количество токенов на цену:
PRICES = {
'gpt-4o-mini': {'in': 0.150 / 1e6, 'out': 0.600 / 1e6},
'gpt-4o': {'in': 2.50 / 1e6, 'out': 10.00 / 1e6},
'claude-sonnet-4-5': {'in': 3.00 / 1e6, 'out': 15.00 / 1e6}
}
def compute_cost(model, tokens_in, tokens_out):
p = PRICES[model]
return tokens_in * p['in'] + tokens_out * p['out']
cost = compute_cost('gpt-4o-mini', 1000, 500)
print(f"Cost for 1000 in / 500 out tokens on gpt-4o-mini: ${cost:.6f}")
Агрегация на уровне trace
Суммируйте span на уровне trace:
def trace_metrics(spans):
return {
'duration_ms': sum(s.duration_ms for s in spans),
'cost_usd': sum(s.cost_usd or 0 for s in spans),
'tokens': sum((s.tokens_in or 0) + (s.tokens_out or 0) for s in spans),
'step_count': len(spans)
}
from types import SimpleNamespace
spans = [
SimpleNamespace(duration_ms=120, cost_usd=0.002, tokens_in=100, tokens_out=50),
SimpleNamespace(duration_ms=340, cost_usd=0.005, tokens_in=200, tokens_out=80),
]
print(trace_metrics(spans))
p50 / p95 / p99
Не смотрите на средние значения: задержки агентов имеют распределение с тяжёлым хвостом. Отчитывайтесь по процентилям:
import numpy as np
durations = [t.duration_ms for t in last_1000_traces]
print('p50:', np.percentile(durations, 50))
print('p95:', np.percentile(durations, 95))
print('p99:', np.percentile(durations, 99))Стоимость на пользователя
Ежедневно суммируйте стоимость по user_id:
SELECT user_id, SUM(cost_usd) AS daily_cost
FROM traces
WHERE created_at::date = current_date
GROUP BY user_id
ORDER BY daily_cost DESC
LIMIT 100Стоимость по имени шага
Какие шаги определяют основную стоимость? Группируйте по имени:
SELECT name, SUM(cost_usd) AS total
FROM spans
WHERE trace_id IN (SELECT id FROM traces WHERE created_at::date = current_date)
GROUP BY name
ORDER BY total DESCВодопадные диаграммы задержки
Для одного trace стройте водопадную диаграмму span в стиле диаграммы Ганта. Самая длинная полоса — ваше узкое место.
Большинство интерфейсов трассировки строят такую диаграмму автоматически.
Оповещения об аномалиях
- Оповещайте, если задержка p95 за неделю удвоилась
- Оповещайте, если дневная стоимость превысила обычную более чем в 2 раза
- Оповещайте, если стоимость для одного пользователя превышает $X в день
Сравните две модели
Метрики каждого шага позволяют сравнивать модели методом A/B-тестирования:
# Run 100 traces with gpt-4o-mini and 100 with haiku
# Compare p95 latency and average cost
# Pick the winner for the use case
print("Run 100 traces with gpt-4o-mini and 100 with haiku")
print("Compare p95 latency and average cost")
print("Pick the winner for the use case")
Отслеживайте распределение токенов
Гистограмма входных и выходных токенов выявляет проблемы: например, постоянное достижение max_tokens означает обрезание выхода, а значит, является ошибкой.
Зачем нужны процентили?
Зачем сообщать о задержке p95, а не о среднем значении?
Повторим
Задержка и стоимость каждого шага, агрегированные по trace и пользователю; процентили вместо средних значений; оповещения об аномалиях. Это ваша панель мониторинга.
Часто задаваемые вопросы
Урок «Задержка и стоимость каждого шага» бесплатный?
Да — полный текст урока «Задержка и стоимость каждого шага» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Agents, подпишись на CoddyKit PRO. Курс AI Agents содержит 4 уроков всего.
Чему я научусь в уроке «Задержка и стоимость каждого шага»?
Измеряйте расход токенов и реальное время выполнения каждого узла, чтобы находить медленные и дорогие шаги. Ты практикуешь AI Agents с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AI Agents?
Предыдущий опыт не требуется. AI Agents на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Задержка и стоимость каждого шага»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AI Agents?
Да. Каждый урок AI Agents включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Зачем агентам трассировка
- Журналирование вызовов инструментов и входов/выходов
- Задержка и стоимость каждого шага
- Визуализация запусков агентов (Langfuse, LangSmith)