РУКОВОДСТВО · ОБНОВЛЕНО 2026-11-15
Как получить usage в потоке Chat Completions
Запросите stream_options.include_usage и обработайте отдельный фрагмент с итоговыми счётчиками. При разрыве потока итог может не прийти. Сохраните такой запрос со статусом «учёт не подтверждён».
Запросите stream_options.include_usage и обработайте отдельный фрагмент с итоговыми счётчиками. При разрыве потока итог может не прийти. Сохраните такой запрос со статусом «учёт не подтверждён».
1. Включите счётчики
Для совместимого Chat Completions передайте stream: true и stream_options с include_usage: true. Проверьте поддержку у конкретного сервиса. Ответ Responses API обрабатывается по контракту его событий.
2. Отделите usage от текста
Проверьте поле usage до обращения к choices[0]. Дополнительный фрагмент с итогом имеет пустой choices. В остальных фрагментах usage может быть null. Добавляйте текст только из фактического delta.
3. Учтите обрыв соединения
Храните состояние потока, объём полученного текста и доступный ID запроса. Если поток оборвался до итоговых счётчиков, не записывайте нули. Используйте источник фактического учёта, если сервис его предоставляет.
4. Проверьте на сохранённых фрагментах
Создайте три локальных сценария: полный поток с usage, разрыв до счётчиков и фрагмент с пустым choices. Проверьте, что приложение выводит весь полученный текст и сохраняет итог только один раз.
Частые вопросы
Почему usage равно null?
Итог передаётся отдельно от обычных фрагментов.
Обязательно ли будет итог при обрыве?
Нет. Дополнительный фрагмент может не дойти.
Почему choices пуст?
Это фрагмент со счётчиками, а не текстовой дельтой.
Можно ли оценить токены локально?
Можно сохранить оценку отдельно от фактических счётчиков сервиса.