Strona główna → Pomoc

Brak zużycia tokenów w odpowiedzi strumieniowej

Strumieniowanie domyślnie pomija usage. Ustaw stream_options: {"include_usage": true}, a liczniki przyjdą w jednym dodatkowym fragmencie na samym końcu, po ostatnim fragmencie treści.

Co widzisz

Dlaczego tak się dzieje

Zużycia nie da się poznać, zanim generowanie się nie skończy, więc we wczesnych fragmentach nie ma czego wstawić. Zamiast wysyłać wartość zastępczą, API zostawia pole puste i dodaje ostatni fragment, gdy liczby już istnieją.

Ten ostatni fragment ma pustą tablicę choices. Kod, który przestaje czytać, gdy tylko zobaczy finish_reason, albo pomija fragmenty bez delty, wyrzuca dokładnie ten fragment, którego potrzebuje.

Nie każda implementacja zgodna z OpenAI obsługuje tę opcję. Tam, gdzie jej brak, możesz albo szacować lokalnie, albo czytać wiążące liczby z logu samego dostawcy.

Sprawdź, czy to ta przyczyna

Poproś o usage i spójrz na ostatnią linię strumienia:

curl -N 'YOUR_BASE_URL/chat/completions' \
  -H 'Authorization: Bearer YOUR_KEY' -H 'Content-Type: application/json' \
  -d '{"model":"MODEL","stream":true,"stream_options":{"include_usage":true},"messages":[{"role":"user","content":"hi"}]}' | tail -3

Fragment przed [DONE] powinien zawierać wypełniony obiekt usage z pustą tablicą choices.

Jak to naprawić

  1. Poproś o opcję jawnieDodaj stream_options z include_usage ustawionym na true. Bez tego pole pozostaje puste, niezależnie od tego, jak czytasz strumień.
  2. Czytaj aż do [DONE]Nie wychodź z pętli na finish_reason. Fragment z usage przychodzi po nim.
  3. Traktuj lokalne liczniki jako szacunkiTokenizery po stronie klienta rozjeżdżają się z tym, co nalicza dostawca, zwłaszcza przy wejściu z cache. Uzgadniaj z logiem dostawcy, a nie z własnym licznikiem.
APICLAN zapisuje każde wywołanie po stronie serwera, niezależnie od strumieniowania – czas, model, wejście, wyjście, odczyt z cache, zapis do cache i dokładną pobraną kwotę. Ten log jest wiążącą liczbą do rozliczeń.

Powiązane

Unexpected token '<' przy wywołaniu API zgodnego z OpenAI401 invalid API key – gdy klucz wygląda dobrze, a i tak nie działa

Ostatnio sprawdzono 2026-10-01. Napisane na podstawie problemów zdiagnozowanych na działającej bramce zgodnej z OpenAI, a nie zebrane z innych stron.