{"id":13024,"date":"2026-09-13T18:25:00","date_gmt":"2026-09-13T16:25:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=13024"},"modified":"2026-09-09T13:23:36","modified_gmt":"2026-09-09T11:23:36","slug":"tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/tutorials-pl-cloud-ai-pl\/tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego\/","title":{"rendered":"Tutorial: Pomiar zu\u017cycia token\u00f3w na \u017c\u0105danie i egzekwowanie bud\u017cetu miesi\u0119cznego"},"content":{"rendered":"<p>Faktura za API przychodzi raz w miesi\u0105cu i podaje sum\u0119. Mi\u0119dzy t\u0105 sum\u0105 a kodem, kt\u00f3ry j\u0105 wytworzy\u0142, zwykle nie stoi nic &#8211; \u017cadnej notatki, kt\u00f3ra funkcja ile zu\u017cy\u0142a, i \u017cadnej mo\u017cliwo\u015bci odr\u00f3\u017cnienia drogiego tygodnia od drogiego nawyku.<\/p>\n<p>Luk\u0119 da si\u0119 \u0142atwo domkn\u0105\u0107, bo informacja tkwi ju\u017c w ka\u017cdej odpowiedzi. Poni\u017csza praca to dwadzie\u015bcia linii zapisu, jedna tabela cen i jedno sprawdzenie dzia\u0142aj\u0105ce przed \u017c\u0105daniem, a nie po nim.<\/p>\n<figure class=\"lw-diagram\">\n<img src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/tokenverbrauch-messen-pl.png\" width=\"1120\" height=\"580\" decoding=\"async\" loading=\"lazy\"\n     alt=\"Paragon za pojedyncze \u017c\u0105danie z czterema osobno wycenionymi klasami token\u00f3w, obok pasek bud\u017cetu miesi\u0119cznego z progiem ostrzegawczym i twardym zatrzymaniem\"><figcaption>To samo \u017c\u0105danie, cztery ceny. 96 000 token\u00f3w odczytanych z pami\u0119ci podr\u0119cznej kosztuje mniej ni\u017c 12 400 wys\u0142anych na \u015bwie\u017co &#8211; dlatego jedna zbiorcza liczba token\u00f3w niczego nie wyja\u015bnia.<\/figcaption><\/figure>\n<h2>Gdzie prawdziwa liczba ju\u017c stoi<\/h2>\n<p>Ka\u017cda odpowied\u017a uzupe\u0142nienia czatu niesie blok usage. Nie jest to szacunek ani zaokr\u0105glenie, lecz to, co zapisa\u0142 licznik.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code>{\n  \"usage\": {\n    \"input_tokens\": 12400,\n    \"cache_creation_input_tokens\": 8200,\n    \"cache_read_input_tokens\": 96000,\n    \"output_tokens\": 1850\n  }\n}<\/code><\/pre>\n<p>Te cztery pola to cztery r\u00f3\u017cne ceny, a podzia\u0142 wa\u017cy wi\u0119cej ni\u017c suma. \u015awie\u017co wys\u0142ane wej\u015bcie to stawka podstawowa. Tokeny zapisane do pami\u0119ci podr\u0119cznej promptu kosztuj\u0105 jednorazow\u0105 dop\u0142at\u0119. Tokeny z niej odczytane kosztuj\u0105 u\u0142amek stawki podstawowej. Wyj\u015bcie jest klas\u0105 najdro\u017csz\u0105 ze wszystkich, zwykle wielokrotno\u015bci\u0105 ceny wej\u015bcia.<\/p>\n<p>Inni dostawcy nazywaj\u0105 te same rzeczy inaczej &#8211; <code>prompt_tokens<\/code>, <code>completion_tokens<\/code> i zagnie\u017cd\u017cone <code>cached_tokens<\/code> to zwyk\u0142a odmiana &#8211; lecz budowa jest ta sama, a wniosek r\u00f3wnie\u017c: pojedynczej liczby z etykiet\u0105 \u201etokeny&#8221; nie da si\u0119 przeliczy\u0107 na pieni\u0105dze.<\/p>\n<p>Do strumieniowania nale\u017cy jedna uwaga. Blok usage nie przychodzi z pierwszym kawa\u0142kiem, lecz na ko\u0144cu, w zdarzeniu zamykaj\u0105cym strumie\u0144. Kod czytaj\u0105cy tekst i odrzucaj\u0105cy reszt\u0119 traci wi\u0119c dok\u0142adnie t\u0119 cz\u0119\u015b\u0107, kt\u00f3ra co\u015b kosztuje.<\/p>\n<h2>Liczenie przed wys\u0142aniem<\/h2>\n<p>Czasem liczba potrzebna jest, zanim \u017c\u0105danie w og\u00f3le powstanie &#8211; aby rozstrzygn\u0105\u0107, czy dokument jeszcze si\u0119 mie\u015bci albo czy rozmow\u0119 trzeba skr\u00f3ci\u0107. S\u0142u\u017cy do tego punkt zliczaj\u0105cy, bezp\u0142atny i zwracaj\u0105cy to, co zobaczy\u0142by model.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code>curl https:\/\/api.anthropic.com\/v1\/messages\/count_tokens \\\n  -H \"x-api-key: $API_KEY\" \\\n  -H \"anthropic-version: 2023-06-01\" \\\n  -H \"content-type: application\/json\" \\\n  -d '{\n    \"model\": \"claude-sonnet-5\",\n    \"messages\": [{\"role\": \"user\", \"content\": \"...\" }]\n  }'<\/code><\/pre>\n<p>Lokalny tokenizer odpowiada na to samo pytanie bez wywo\u0142ania sieciowego i wystarcza do sprawdzenia d\u0142ugo\u015bci, ale nie jest licznikiem. Instrukcje systemowe, definicje narz\u0119dzi i bloki obraz\u00f3w wnosz\u0105 tokeny, kt\u00f3rych tokenizer tekstu nigdy nie widzi, a r\u00f3\u017cnica przy \u017c\u0105daniu z do\u0142\u0105czonymi narz\u0119dziami idzie w tysi\u0105ce. Dla bud\u017cetu liczy si\u0119 wy\u0142\u0105cznie blok usage.<\/p>\n<h2>Jeden wiersz na \u017c\u0105danie<\/h2>\n<p>Sam zapis jest niewidowiskowy, a jego warto\u015b\u0107 le\u017cy w ca\u0142o\u015bci w polach opisuj\u0105cych kontekst, a nie \u017c\u0105danie. Model i liczby token\u00f3w same z siebie nie odpowiadaj\u0105 na nic; oznaczenie, kt\u00f3ra funkcja wywo\u0142a\u0142a \u017c\u0105danie, odpowiada niemal na wszystko.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code>import json, sqlite3, time, uuid\n\nDB = sqlite3.connect(\"verbrauch.db\")\nDB.execute(\"\"\"CREATE TABLE IF NOT EXISTS aufrufe (\n    id TEXT PRIMARY KEY, zeit INTEGER, modell TEXT, zweck TEXT,\n    ein INTEGER, cache_neu INTEGER, cache_gelesen INTEGER, aus INTEGER,\n    kosten REAL, versuch INTEGER)\"\"\")\n\ndef buchen(antwort, modell, zweck, versuch=1):\n    u = antwort[\"usage\"]\n    zeile = dict(\n        id=str(uuid.uuid4()), zeit=int(time.time()), modell=modell, zweck=zweck,\n        ein=u[\"input_tokens\"],\n        cache_neu=u.get(\"cache_creation_input_tokens\", 0),\n        cache_gelesen=u.get(\"cache_read_input_tokens\", 0),\n        aus=u[\"output_tokens\"], versuch=versuch)\n    zeile[\"kosten\"] = kosten(modell, zeile)\n    DB.execute(\"INSERT INTO aufrufe VALUES (:id,:zeit,:modell,:zweck,:ein,\"\n               \":cache_neu,:cache_gelesen,:aus,:kosten,:versuch)\", zeile)\n    DB.commit()\n    return zeile[\"kosten\"]<\/code><\/pre>\n<p>Kolumna <code>versuch<\/code> zwraca si\u0119 w spos\u00f3b nieoczekiwany. Ponowna pr\u00f3ba po przekroczeniu czasu wysy\u0142a ca\u0142e wej\u015bcie jeszcze raz i zostaje naliczona jeszcze raz, podczas gdy aplikacja widzi jedno logiczne wywo\u0142anie. Bez tej kolumny powt\u00f3rki chowaj\u0105 si\u0119 w \u015bredniej, a z\u0142y popo\u0142udniowy przebieg wygl\u0105da jak droga funkcja.<\/p>\n<h2>Zamiana token\u00f3w na pieni\u0105dze<\/h2>\n<p>Ceny nale\u017c\u0105 do jednego miejsca, wed\u0142ug modelu i klasy token\u00f3w, podane za milion token\u00f3w &#8211; bo tak s\u0105 publikowane.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code># Przyk\u0142adowe stawki za milion token\u00f3w - prawdziwe stoj\u0105\n# w cenniku dostawcy i zmieniaj\u0105 si\u0119 w czasie.\nPREISE = {\n    \"claude-sonnet-5\": {\"ein\": 3.00, \"cache_neu\": 3.75, \"cache_gelesen\": 0.30, \"aus\": 15.00},\n}\n\ndef kosten(modell, z):\n    p = PREISE[modell]\n    return round(sum(z[k] * p[k] for k in (\"ein\", \"cache_neu\", \"cache_gelesen\", \"aus\")) \/ 1e6, 6)<\/code><\/pre>\n<p>Zastosowane do powy\u017cszego \u017c\u0105dania, cztery klasy daj\u0105 0,0372, 0,0308, 0,0288 oraz 0,0278 &#8211; razem 0,1245 na wywo\u0142anie. Pouczaj\u0105ce jest zestawienie trzeciej warto\u015bci z pierwsz\u0105: 96 000 token\u00f3w odczytanych z pami\u0119ci podr\u0119cznej kosztuje mniej ni\u017c 12 400 wys\u0142anych na \u015bwie\u017co. Dzia\u0142aj\u0105ca pami\u0119\u0107 podr\u0119czna nie tylko obni\u017ca wi\u0119c rachunek, lecz przesuwa te\u017c to, kt\u00f3ra cz\u0119\u015b\u0107 \u017c\u0105dania go wyznacza.<\/p>\n<p>Gdy w tabeli le\u017cy kilka dni wierszy, w\u0142a\u015bciwe pytanie daje si\u0119 rozstrzygn\u0105\u0107 jedn\u0105 instrukcj\u0105.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code>SELECT zweck,\n       COUNT(*)                          AS aufrufe,\n       ROUND(SUM(kosten), 2)             AS gesamt,\n       ROUND(AVG(kosten), 4)             AS je_aufruf,\n       ROUND(100.0 * SUM(cache_gelesen) \/\n             NULLIF(SUM(ein + cache_neu + cache_gelesen), 0), 1) AS cache_anteil\nFROM aufrufe\nWHERE zeit &gt;= strftime('%s', 'now', 'start of month')\nGROUP BY zweck ORDER BY gesamt DESC;<\/code><\/pre>\n<h2>Blokada, kt\u00f3ra naprawd\u0119 co\u015b zatrzymuje<\/h2>\n<p>Bud\u017cet, kt\u00f3ry jedynie ostrzega, jest raportem. Zatrzymanie wymaga, by sprawdzenie sta\u0142o przed wywo\u0142aniem &#8211; i by liczba by\u0142a bie\u017c\u0105ca, a nie z ostatniej nocy.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code>class BudgetErschoepft(Exception):\n    pass\n\nMONATSBUDGET = 400.0\nWARNSCHWELLE = 0.80\n\ndef monatssumme():\n    (s,) = DB.execute(\n        \"SELECT COALESCE(SUM(kosten), 0) FROM aufrufe \"\n        \"WHERE zeit &gt;= strftime('%s', 'now', 'start of month')\").fetchone()\n    return s\n\ndef pruefen(geschaetzte_kosten):\n    verbraucht = monatssumme()\n    if verbraucht + geschaetzte_kosten &gt; MONATSBUDGET:\n        raise BudgetErschoepft(f\"{verbraucht:.2f} von {MONATSBUDGET:.2f} verbraucht\")\n    if verbraucht &gt; MONATSBUDGET * WARNSCHWELLE:\n        logging.warning(\"Budget zu %.0f %% verbraucht\", 100 * verbraucht \/ MONATSBUDGET)<\/code><\/pre>\n<p>Trzy rozstrzygni\u0119cia czyni\u0105 z tego co\u015b wi\u0119cej ni\u017c formalno\u015b\u0107. Przekazywany szacunek powinien by\u0107 pesymistyczny &#8211; najwy\u017csza mo\u017cliwa liczba token\u00f3w wyj\u015bcia po cenie wyj\u015bcia &#8211; bo wywo\u0142anie jest albo dozwolone, albo nie, a zgoda na podstawie optymistycznej to droga do przekroczenia bud\u017cetu o dok\u0142adnie jedno \u017c\u0105danie.<\/p>\n<p>Drugie dotyczy tego, co dzieje si\u0119 po zg\u0142oszeniu wyj\u0105tku. Przebieg wsadowy powinien si\u0119 zatrzyma\u0107 i powiedzie\u0107, gdzie stan\u0105\u0142. Funkcja w dialogu powinna ust\u0105pi\u0107, a nie polec: mniejszy model, kr\u00f3tszy kontekst albo kolejka wznawiana w nast\u0119pnym miesi\u0105cu. Jedno i drugie jest lepsze ni\u017c \u015blad b\u0142\u0119du docieraj\u0105cy do czytelnika.<\/p>\n<p>Trzecie: wsp\u00f3lny bud\u017cet potrzebuje wsp\u00f3lnego licznika. Kilka proces\u00f3w z w\u0142asnymi sumami ka\u017cdy z osobna zmie\u015bci si\u0119 pod granic\u0105 i wsp\u00f3lnie j\u0105 przekroczy. Jedna tabela z transakcj\u0105 obejmuj\u0105c\u0105 odczyt i zapis albo licznik we wsp\u00f3lnej pami\u0119ci to ca\u0142a naprawa.<\/p>\n<h2>Czego blokada nie widzi<\/h2>\n<p>Trzy rodzaje wydatk\u00f3w nigdy nie przechodz\u0105 przez sprawdzenie, a ka\u017cdy ma w\u0142asn\u0105 drog\u0119, by mimo to zosta\u0107 uj\u0119ty.<\/p>\n<p>Przetwarzanie wsadowe naliczane jest z rabatem i biegnie cz\u0119sto w tle, wi\u0119c blok usage przychodzi wiele godzin p\u00f3\u017aniej wraz z wynikami. Jego koszt nale\u017cy do tej samej tabeli, wpisany przy odbiorze wynik\u00f3w, ale z czasem zg\u0142oszenia, a nie odbioru &#8211; inaczej na granicy miesi\u0119cy wydatek trafi do niew\u0142a\u015bciwego miesi\u0105ca.<\/p>\n<p>Drugim przypadkiem s\u0105 \u017c\u0105dania nieudane. Wywo\u0142anie wpadaj\u0105ce w przekroczenie czasu po tym, jak model wytworzy\u0142 ju\u017c wi\u0119kszo\u015b\u0107 odpowiedzi, i tak zostaje naliczone, a bloku usage do odczytu nie dostarcza. Dostarcza natomiast identyfikator \u017c\u0105dania w nag\u0142\u00f3wkach odpowiedzi, a raport zu\u017cycia u dostawcy go prowadzi. Comiesi\u0119czne uzgodnienie w\u0142asnej tabeli z tym raportem kosztuje dziesi\u0119\u0107 minut i znajduje dok\u0142adnie t\u0119 klas\u0119 rozbie\u017cno\u015bci.<\/p>\n<p>Trzecim przypadkiem jest wszystko, co nie jest uzupe\u0142nieniem czatu: osadzenia, transkrypcje, generowanie obraz\u00f3w, narz\u0119dzie wyszukiwania wywo\u0142ane po stronie serwera. Ka\u017cde ma w\u0142asny licznik i w\u0142asn\u0105 cen\u0119, a \u017cadne z nich nie pojawia si\u0119 w zapisywanym tutaj bloku usage. Uzgodnienie wy\u0142apuje i te &#8211; i to praktyczny pow\u00f3d, by je w og\u00f3le prowadzi\u0107.<\/p>\n<div class=\"lw-quellen\">\n<h2>\u0179r\u00f3d\u0142a<\/h2>\n<ul>\n<li><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9110.html\" target=\"_blank\" rel=\"noopener noreferrer\">RFC 9110: HTTP Semantics<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Ka\u017cda odpowied\u017a API podaje dok\u0142adnie, ile token\u00f3w kosztowa\u0142a, w podziale na cztery klasy. Zapisywanie tej liczby zamiast jej szacowania to dwadzie\u015bcia linii &#8211; i jedyna podstawa, na kt\u00f3rej bud\u017cet mo\u017ce by\u0107 czym\u015b wi\u0119cej ni\u017c ostrze\u017ceniem.<\/p>\n","protected":false},"author":1,"featured_media":13224,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[92640],"tags":[92343,92358,92346,92238],"class_list":["post-13024","post","type-post","status-publish","format-standard","hentry","category-tutorials-pl-cloud-ai-pl","tag-artificial-intelligence-pl","tag-budgeting-pl","tag-llm-pl","tag-tutorial-pl"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Tutorial: Pomiar zu\u017cycia token\u00f3w na \u017c\u0105danie i egzekwowanie bud\u017cetu miesi\u0119cznego - Lukas Wojcik - Blog<\/title>\n<meta name=\"description\" content=\"Odczyt bloku usage, jeden wiersz na \u017c\u0105danie, przeliczenie token\u00f3w na pieni\u0105dze i zatrzymanie przebiegu przed przekroczeniem bud\u017cetu miesi\u0119cznego.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/tutorials-pl-cloud-ai-pl\/tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tutorial: Pomiar zu\u017cycia token\u00f3w na \u017c\u0105danie i egzekwowanie bud\u017cetu miesi\u0119cznego - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Odczyt bloku usage, jeden wiersz na \u017c\u0105danie, przeliczenie token\u00f3w na pieni\u0105dze i zatrzymanie przebiegu przed przekroczeniem bud\u017cetu miesi\u0119cznego.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/tutorials-pl-cloud-ai-pl\/tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-13T16:25:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-13024-tutorial-pomiar-zuzycia-tokenow-na-zadan.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"luky\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"luky\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/cloud-ai-pl\\\/tutorials-pl-cloud-ai-pl\\\/tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/cloud-ai-pl\\\/tutorials-pl-cloud-ai-pl\\\/tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego\\\/\"},\"author\":{\"name\":\"luky\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Tutorial: Pomiar zu\u017cycia token\u00f3w na \u017c\u0105danie i egzekwowanie bud\u017cetu miesi\u0119cznego\",\"datePublished\":\"2026-09-13T16:25:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/cloud-ai-pl\\\/tutorials-pl-cloud-ai-pl\\\/tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego\\\/\"},\"wordCount\":1033,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/cloud-ai-pl\\\/tutorials-pl-cloud-ai-pl\\\/tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/hero-13024-tutorial-pomiar-zuzycia-tokenow-na-zadan.png\",\"keywords\":[\"Artificial Intelligence\",\"Budgeting\",\"LLM\",\"Tutorial\"],\"articleSection\":[\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/cloud-ai-pl\\\/tutorials-pl-cloud-ai-pl\\\/tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/cloud-ai-pl\\\/tutorials-pl-cloud-ai-pl\\\/tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/cloud-ai-pl\\\/tutorials-pl-cloud-ai-pl\\\/tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego\\\/\",\"name\":\"Tutorial: Pomiar zu\u017cycia token\u00f3w na \u017c\u0105danie i egzekwowanie bud\u017cetu miesi\u0119cznego - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/cloud-ai-pl\\\/tutorials-pl-cloud-ai-pl\\\/tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/cloud-ai-pl\\\/tutorials-pl-cloud-ai-pl\\\/tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/hero-13024-tutorial-pomiar-zuzycia-tokenow-na-zadan.png\",\"datePublished\":\"2026-09-13T16:25:00+00:00\",\"description\":\"Odczyt bloku usage, jeden wiersz na \u017c\u0105danie, przeliczenie token\u00f3w na pieni\u0105dze i zatrzymanie przebiegu przed przekroczeniem bud\u017cetu miesi\u0119cznego.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/cloud-ai-pl\\\/tutorials-pl-cloud-ai-pl\\\/tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/cloud-ai-pl\\\/tutorials-pl-cloud-ai-pl\\\/tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/cloud-ai-pl\\\/tutorials-pl-cloud-ai-pl\\\/tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/hero-13024-tutorial-pomiar-zuzycia-tokenow-na-zadan.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/hero-13024-tutorial-pomiar-zuzycia-tokenow-na-zadan.png\",\"width\":1200,\"height\":630,\"caption\":\"Tutorial: Pomiar zu\u017cycia token\u00f3w na \u017c\u0105danie i egzekwowanie bud\u017cetu miesi\u0119cznego\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/cloud-ai-pl\\\/tutorials-pl-cloud-ai-pl\\\/tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tutorial: Pomiar zu\u017cycia token\u00f3w na \u017c\u0105danie i egzekwowanie bud\u017cetu miesi\u0119cznego\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"luky\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"luky\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"],\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/author\\\/luky\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Tutorial: Pomiar zu\u017cycia token\u00f3w na \u017c\u0105danie i egzekwowanie bud\u017cetu miesi\u0119cznego - Lukas Wojcik - Blog","description":"Odczyt bloku usage, jeden wiersz na \u017c\u0105danie, przeliczenie token\u00f3w na pieni\u0105dze i zatrzymanie przebiegu przed przekroczeniem bud\u017cetu miesi\u0119cznego.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/tutorials-pl-cloud-ai-pl\/tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego\/","og_locale":"en_US","og_type":"article","og_title":"Tutorial: Pomiar zu\u017cycia token\u00f3w na \u017c\u0105danie i egzekwowanie bud\u017cetu miesi\u0119cznego - Lukas Wojcik - Blog","og_description":"Odczyt bloku usage, jeden wiersz na \u017c\u0105danie, przeliczenie token\u00f3w na pieni\u0105dze i zatrzymanie przebiegu przed przekroczeniem bud\u017cetu miesi\u0119cznego.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/tutorials-pl-cloud-ai-pl\/tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-09-13T16:25:00+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-13024-tutorial-pomiar-zuzycia-tokenow-na-zadan.png","type":"image\/png"}],"author":"luky","twitter_card":"summary_large_image","twitter_misc":{"Written by":"luky","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/tutorials-pl-cloud-ai-pl\/tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/tutorials-pl-cloud-ai-pl\/tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego\/"},"author":{"name":"luky","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Tutorial: Pomiar zu\u017cycia token\u00f3w na \u017c\u0105danie i egzekwowanie bud\u017cetu miesi\u0119cznego","datePublished":"2026-09-13T16:25:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/tutorials-pl-cloud-ai-pl\/tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego\/"},"wordCount":1033,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/tutorials-pl-cloud-ai-pl\/tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-13024-tutorial-pomiar-zuzycia-tokenow-na-zadan.png","keywords":["Artificial Intelligence","Budgeting","LLM","Tutorial"],"articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/tutorials-pl-cloud-ai-pl\/tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/tutorials-pl-cloud-ai-pl\/tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/tutorials-pl-cloud-ai-pl\/tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego\/","name":"Tutorial: Pomiar zu\u017cycia token\u00f3w na \u017c\u0105danie i egzekwowanie bud\u017cetu miesi\u0119cznego - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/tutorials-pl-cloud-ai-pl\/tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/tutorials-pl-cloud-ai-pl\/tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-13024-tutorial-pomiar-zuzycia-tokenow-na-zadan.png","datePublished":"2026-09-13T16:25:00+00:00","description":"Odczyt bloku usage, jeden wiersz na \u017c\u0105danie, przeliczenie token\u00f3w na pieni\u0105dze i zatrzymanie przebiegu przed przekroczeniem bud\u017cetu miesi\u0119cznego.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/tutorials-pl-cloud-ai-pl\/tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/tutorials-pl-cloud-ai-pl\/tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/tutorials-pl-cloud-ai-pl\/tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-13024-tutorial-pomiar-zuzycia-tokenow-na-zadan.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-13024-tutorial-pomiar-zuzycia-tokenow-na-zadan.png","width":1200,"height":630,"caption":"Tutorial: Pomiar zu\u017cycia token\u00f3w na \u017c\u0105danie i egzekwowanie bud\u017cetu miesi\u0119cznego"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/tutorials-pl-cloud-ai-pl\/tutorial-pomiar-zuzycia-tokenow-na-zadanie-i-egzekwowanie-budzetu-miesiecznego\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Tutorial: Pomiar zu\u017cycia token\u00f3w na \u017c\u0105danie i egzekwowanie bud\u017cetu miesi\u0119cznego"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"luky","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"luky"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"],"url":"https:\/\/www.lukaswojcik.com\/blog\/author\/luky\/"}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/13024","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=13024"}],"version-history":[{"count":1,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/13024\/revisions"}],"predecessor-version":[{"id":17295,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/13024\/revisions\/17295"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/13224"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=13024"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=13024"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=13024"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}