Отслеживание затрат
PRX включает встроенную систему отслеживания затрат, мониторящую потребление токенов и расходы на API по всем LLM-провайдерам. CostTracker накапливает использование по запросам, сессиям и провайдерам -- обеспечивая полную видимость того, как агенты потребляют ресурсы API.
Обзор
Каждый запрос к LLM в PRX генерирует запись TokenUsage, содержащую входные токены, выходные токены и связанную стоимость. Эти записи агрегируются CostTracker и могут запрашиваться для отчётности, контроля бюджета и обнаружения аномалий.
Запрос к LLM
│
├── Провайдер возвращает метаданные использования
│ (input_tokens, output_tokens, кэш-попадания)
│
▼
Создана запись TokenUsage
│
├── Накопление в CostTracker
│ ├── Разбивка по запросу
│ ├── Итоги по сессии
│ ├── Итоги по провайдеру
│ └── Итоги по модели
│
├── Проверка бюджета (при настроенных лимитах)
│ ├── В пределах бюджета -> продолжить
│ └── Превышен бюджет -> предупреждение / остановка
│
└── Запись в конвейер наблюдаемости
(метрики, журналы, спаны трассировки)Конфигурация
Включение и настройка отслеживания затрат в config.toml:
[cost]
enabled = true
# Валюта для отображения (не влияет на расчёты).
currency = "USD"
# Как часто сбрасывать накопленные затраты в постоянное хранилище.
flush_interval_secs = 60
# Сохранять данные затрат между перезапусками.
persist = true
persist_path = "~/.local/share/openprx/cost.db"Бюджетные лимиты
Установите лимиты расходов для предотвращения неконтролируемых затрат:
[cost.budget]
# Дневной лимит расходов по всем провайдерам.
daily_limit = 10.00
# Месячный лимит расходов.
monthly_limit = 200.00
# Лимит на сессию (сбрасывается при старте новой сессии).
session_limit = 2.00
# Действие при достижении лимита: "warn" или "stop".
# "warn" -- запись предупреждения, запросы продолжаются.
# "stop" -- блокировка дальнейших запросов к LLM до сброса периода.
on_limit = "warn"Лимиты по провайдерам
Переопределение бюджетных лимитов для конкретных провайдеров:
[cost.budget.providers.openai]
daily_limit = 5.00
monthly_limit = 100.00
[cost.budget.providers.anthropic]
daily_limit = 8.00
monthly_limit = 150.00Структура TokenUsage
Каждый запрос к LLM создаёт запись TokenUsage:
| Поле | Тип | Описание |
|---|---|---|
input_tokens | u64 | Количество токенов в промпте (системный + пользовательский + контекст) |
output_tokens | u64 | Количество токенов в ответе модели |
cache_read_tokens | u64 | Токены, обслуженные из кэша провайдера (кэширование промптов Anthropic) |
cache_write_tokens | u64 | Токены, записанные в кэш провайдера |
total_tokens | u64 | input_tokens + output_tokens |
cost | f64 | Расчётная стоимость в настроенной валюте |
provider | string | Имя провайдера (напр., "openai", "anthropic") |
model | string | Идентификатор модели (напр., "gpt-4o", "claude-sonnet-4-20250514") |
timestamp | datetime | Время выполнения запроса |
session_id | string | Сессия агента, сгенерировавшая запрос |
CostTracker
CostTracker -- центральная точка агрегации всего использования токенов. Он поддерживает текущие итоги по провайдеру, по модели, по сессии, дневные (сброс в полночь UTC) и месячные (сброс 1-го числа). Трекер потокобезопасен и обновляется после каждого ответа LLM.
Данные цен
PRX содержит встроенную таблицу цен для распространённых провайдеров и моделей. Цены определены за миллион токенов:
| Провайдер | Модель | Входные (за 1М) | Выходные (за 1М) |
|---|---|---|---|
| OpenAI | gpt-4o | $2.50 | $10.00 |
| OpenAI | gpt-4o-mini | $0.15 | $0.60 |
| OpenAI | o3 | $10.00 | $40.00 |
| Anthropic | claude-sonnet-4-20250514 | $3.00 | $15.00 |
| Anthropic | claude-haiku-35-20241022 | $0.80 | $4.00 |
| Anthropic | claude-opus-4-20250514 | $15.00 | $75.00 |
| gemini-2.0-flash | $0.075 | $0.30 | |
| DeepSeek | deepseek-chat | $0.14 | $0.28 |
Пользовательские цены
Переопределение или добавление цен для моделей, отсутствующих во встроенной таблице:
[cost.pricing."openai/gpt-4o"]
input_per_million = 2.50
output_per_million = 10.00
[cost.pricing."custom/my-model"]
input_per_million = 1.00
output_per_million = 3.00Для самостоятельно размещённых моделей (Ollama, vLLM), где вызовы API бесплатны, установите цены в ноль:
[cost.pricing."ollama/llama3"]
input_per_million = 0.0
output_per_million = 0.0Отчёты об использовании
Команды CLI
# Просмотр сводки затрат текущей сессии
prx cost
# Просмотр дневной разбивки
prx cost --period daily
# Просмотр месячной разбивки по провайдерам
prx cost --period monthly --group-by provider
# Просмотр затрат за конкретный период
prx cost --from 2026-03-01 --to 2026-03-15
# Экспорт в CSV
prx cost --period monthly --format csv > costs.csv
# Экспорт в JSON (для программного потребления)
prx cost --period daily --format jsonПример вывода
PRX Cost Report (2026-03-21)
════════════════════════════════════════════════════
Provider Model Tokens (in/out) Cost
─────────────────────────────────────────────────────────────
anthropic claude-sonnet-4-20250514 45.2K / 12.8K $0.33
openai gpt-4o 22.1K / 8.4K $0.14
openai gpt-4o-mini 8.3K / 3.1K $0.00
─────────────────────────────────────────────────────────────
Total 75.6K / 24.3K $0.47
Budget Status:
Session: $0.47 / $2.00 (23.5%)
Daily: $3.82 / $10.00 (38.2%)
Monthly: $42.15 / $200.00 (21.1%)Бюджетные оповещения
При приближении затрат к бюджетному лимиту PRX предпринимает действия в зависимости от настройки on_limit:
| Порог | on_limit = "warn" | on_limit = "stop" |
|---|---|---|
| 80% лимита | Запись предупреждения | Запись предупреждения |
| 100% лимита | Запись ошибки, продолжение | Блокировка запросов к LLM, уведомление пользователя |
| Сброс лимита (новый день/месяц) | Сброс счётчиков | Сброс счётчиков, разблокировка запросов |
Бюджетные оповещения также передаются как события наблюдаемости. При включённых метриках Prometheus экспортируются следующие датчики:
prx_cost_daily_total{currency="USD"} 3.82
prx_cost_monthly_total{currency="USD"} 42.15
prx_cost_session_total{currency="USD"} 0.47
prx_cost_budget_daily_remaining{currency="USD"} 6.18
prx_cost_budget_monthly_remaining{currency="USD"} 157.85Интеграция с наблюдаемостью
Данные затрат интегрируются со стеком наблюдаемости PRX:
- Prometheus -- счётчики токенов и датчики затрат по провайдерам/моделям
- OpenTelemetry -- атрибуты спанов
prx.tokens.input,prx.tokens.output,prx.cost - Журналы -- затраты по запросам журналируются на уровне DEBUG, предупреждения о бюджете на уровне WARN
Замечания по безопасности
- Данные о затратах могут раскрывать паттерны использования. Ограничьте доступ к отчётам о затратах в многопользовательских развёртываниях.
- Постоянная база данных затрат (
cost.db) содержит историю использования. Включите её в стратегию резервного копирования. - Бюджетные лимиты обеспечиваются локально. Они не взаимодействуют с лимитами расходов на стороне провайдера. Настраивайте оба для эшелонированной защиты.