
Optymalizacja kosztów API modeli AI - cache, dobór modelu, tryb wsadowy i kompresja kontekstu
Projekt AI działa, testy przeszły, wdrożenie na produkcję - i po miesiącu rachunek za API jest kilka razy wyższy niż w budżecie. Zwykle nie winna jest cena modelu, tylko to, co wysyłasz przy każdym wywołaniu: długi prompt systemowy, definicje narzędzi, rosnąca historia rozmowy i fragmenty dokumentów. Pięć technik - cache, dobór modelu do zadania, tryb wsadowy, kompresja kontekstu i limity - potrafi obniżyć rachunek o połowę albo bardziej bez pogorszenia jakości, a cache sam w sobie tnie koszt powtarzanego kontekstu o 90-97,5%.
Jak obniżyć rachunek za API OpenAI, Claude i Gemini bez utraty jakości: rozbicie kosztu jednego wywołania przed i po (-68%), cache u trzech dostawców, dobór modelu, tryb wsadowy i Flex, kompresja historii i plan na dwa tygodnie.
W tym wpisie pokazuję, skąd biorą się koszty, jak działa cache u OpenAI, Anthropic i Google, jak dobierać model do zadania, kiedy używać trybu wsadowego, jak kompresować historię rozmowy i jak monitorować wydatki. Na przykładzie jednego wywołania agenta rozkładam koszt przed i po optymalizacji.
Skąd biorą się koszty
Każde wywołanie to tokeny wejściowe (prompt systemowy, definicje narzędzi, historia, kontekst z bazy wiedzy, wiadomość użytkownika) i tokeny wyjściowe (odpowiedź). Wyjście jest zwykle około 5 razy droższe za token, ale w aplikacjach z czatem i agentami to wejście stanowi większość rachunku, bo te same elementy wysyłasz przy każdym kroku.
Typowy rozkład tokenów wejściowych w aplikacji agentowej:
- Prompt systemowy - kilkaset do kilku tysięcy tokenów, taki sam przy każdym wywołaniu.
- Definicje narzędzi - od 100 do kilkuset tokenów na narzędzie, wysyłane zawsze.
- Historia rozmowy - rośnie z każdą turą.
- Kontekst z bazy wiedzy - od kilkuset do kilku tysięcy tokenów.
- Wiadomość użytkownika - zwykle najmniejsza część.
/// OPTYMALIZACJA KOSZTU WYWOŁANIA API
Koszt 1000 wywołań agenta na GPT-6.1 Sol - przed i po optymalizacji
Rozbicie jednego wywołania - przed i po
Przykład: agent obsługi klienta na modelu GPT-6.1 Sol ($2 za milion tokenów wejścia, $10 za milion wyjścia, odczyt z cache $0,10). Dziesiąta tura rozmowy:
| Element | Tokeny przed | Koszt przed | Po optymalizacji | Koszt po |
|---|---|---|---|---|
| Prompt systemowy | 3 000 | $0,0060 | 3 000 z cache | $0,0003 |
| Definicje 12 narzędzi | 2 400 | $0,0048 | 4 potrzebne narzędzia, z cache | $0,0001 |
| Historia 9 tur | 5 400 | $0,0108 | podsumowanie 400 + ostatnie 3 tury 1 800 | $0,0044 |
| Kontekst z bazy wiedzy | 3 000 | $0,0060 | 3 najlepsze fragmenty, 1 200 | $0,0024 |
| Wiadomość i odpowiedź | 100 + 500 | $0,0052 | 100 + 300 (limit długości) | $0,0032 |
| Razem | 14 400 | $0,0328 | $0,0104 |
Przy 100 000 takich wywołań miesięcznie to różnica między około $3 280 a $1 040 - o 68% mniej, bez zmiany modelu. Dodatkowe przejście prostych zapytań na tańszy model obniża rachunek jeszcze bardziej.
Cache - największa i najtańsza oszczędność
Cache pozwala nie płacić pełnej ceny za ten sam początek promptu w kolejnych wywołaniach. Działa u wszystkich trzech dużych dostawców, ale na różnych zasadach:
| Dostawca | Jak włączyć | Minimalna długość | Cena odczytu z cache | Jak długo działa |
|---|---|---|---|---|
| OpenAI | Automatycznie | 1 024 tokeny | 10% ceny wejścia (5% w GPT-6.1 Sol) | Co najmniej 30 minut w najnowszych modelach, w starszych 5-10 minut lub do 24 godzin |
| Anthropic | Automatycznie albo przez cache_control | zależnie od modelu | 10% ceny wejścia (5% w Opus 5.5, 2,5% w Fable 5.1) | 5 minut lub 1 godzina |
| Google Gemini | Automatycznie w Gemini 2.5 i nowszych, ręcznie przez cache kontekstu | 2 048-4 096 tokenów | niższa cena za tokeny z cache | zależnie od ustawień |
Zapis do cache bywa nieco droższy niż zwykłe wejście (u OpenAI i Anthropic 1,25 ceny), więc cache opłaca się już po pierwszym ponownym użyciu.
Najważniejsza zasada: stałe elementy na początku, zmienne na końcu. Kolejność w prompcie:
- 1.Prompt systemowy - stały dla całej aplikacji.
- 2.Definicje narzędzi - stałe.
- 3.Dokumenty kontekstowe - stałe w ramach sesji.
- 4.Historia rozmowy - zmienia się z każdą turą.
- 5.Wiadomość użytkownika - zawsze nowa.
Częsty błąd: wstawianie daty, identyfikatora sesji albo imienia użytkownika do promptu systemowego. Każda taka zmiana unieważnia cache. Przenieś te dane na koniec, do wiadomości użytkownika.
from openai import OpenAIfrom anthropic import AnthropicSYSTEM_PROMPT = "Jesteś asystentem obsługi klienta firmy Acme. [...stały opis produktów, procedur i cennika...]"def chat_openai(history: list, message: str): r = OpenAI().chat.completions.create( model="gpt-6.1-sol", messages=[{"role": "system", "content": SYSTEM_PROMPT}, *history, {"role": "user", "content": message}], ) details = r.usage.prompt_tokens_details return r.choices[0].message.content, {"input": r.usage.prompt_tokens, "cached": details.cached_tokens if details else 0}def chat_anthropic(history: list, message: str): r = Anthropic().messages.create( model="claude-sonnet-5-5", max_tokens=1024, system=[{"type": "text", "text": SYSTEM_PROMPT, "cache_control": {"type": "ephemeral"}}], messages=[*history, {"role": "user", "content": message}], ) return r.content[0].text, {"input": r.usage.input_tokens, "cached": r.usage.cache_read_input_tokens}
Loguj liczbę tokenów z cache przy każdym wywołaniu i licz odsetek trafień. Jeśli spada, zwykle ktoś dodał zmienny element na początek promptu.
Właściwy model do zadania
Najtańsze modele kosztują dziś 10-30 centów za milion tokenów wejściowych, a najmocniejsze 2-10 dolarów. W typowej aplikacji biznesowej większość zapytań to proste zadania - klasyfikacja, krótkie odpowiedzi z dostarczonego kontekstu, wyciąganie danych - które tani model wykona równie dobrze.
- Tania półka (GPT-6 Luna, Gemini 3.1 Flash-Lite, Claude Haiku 4.5) - klasyfikacja, routing, proste FAQ, ekstrakcja danych ze schematem.
- Środkowa półka (GPT-6.1 Sol, Claude Sonnet 5.5, Gemini 3.8 Flash) - analiza dokumentów, odpowiedzi wpływające na decyzję klienta, generowanie treści.
- Najmocniejsze modele (GPT-6 Astra, Claude Opus 5.5, Gemini 3.1 Pro) - tylko najtrudniejsze, wieloetapowe kroki, gdzie błąd kosztuje więcej niż wywołanie.
Router, w którym tani model decyduje, która półka jest potrzebna, oraz test wyboru modelu na własnych danych opisuję szczegółowo we wpisie jak wybrać model LLM. Zanim przełączysz ruch na tańszy model, uruchom go przez tydzień w trybie cienia: odpowiedź nadal daje mocniejszy model, a tańszy generuje swoją w tle do porównania.
/// STRATEGIA ROUTINGU MODELI
Routing zapytań — rozkład ruchu w typowej aplikacji B2B
Tryb wsadowy i Flex - połowa ceny za cierpliwość
Zadania, które nie muszą być wykonane od razu, możesz wysłać w trybie wsadowym (Batch API). OpenAI, Anthropic i Google dają w nim 50% zniżki, a wyniki zwykle wracają w ciągu doby. To dobre rozwiązanie do generowania opisów produktów, klasyfikacji archiwum dokumentów, nocnych raportów czy ewaluacji.
OpenAI ma też tryb Flex - pojedyncze zapytania w cenach trybu wsadowego, ale z dłuższym czasem odpowiedzi i ryzykiem chwilowej niedostępności. Pasuje do zadań w tle, które mogą poczekać i być ponowione.
Rabaty się sumują: zadanie w trybie wsadowym z promptem w cache kosztuje ułamek ceny standardowej.
Kompresja kontekstu - zatrzymaj rosnący rachunek
W agentach i czatach historia rośnie z każdą turą. Trzy strategie, od najprostszej:
- Okno przesuwne. Wysyłasz tylko ostatnie N wiadomości. Zero dodatkowych kosztów, ale model zapomina początek rozmowy. Dobre, gdy starszy kontekst ma małe znaczenie.
- Podsumowanie. Co kilka tur tani model streszcza starszą część rozmowy do kilkuset tokenów, a ostatnie tury zostają w całości. Zachowuje kluczowe fakty przy dużej oszczędności.
- Wybór po trafności. Do kontekstu trafiają tylko te wcześniejsze fragmenty, które są najbliższe bieżącemu pytaniu (porównanie embeddingów). Najbardziej precyzyjne przy bardzo długich i różnorodnych sesjach.
from openai import OpenAIdef compress_history(history: list[dict], keep_last: int = 6, max_words: int = 200) -> list[dict]: if len(history) <= keep_last: return history old, recent = history[:-keep_last], history[-keep_last:] text = "\n".join(f"{m['role']}: {m['content']}" for m in old) r = OpenAI().chat.completions.create( model="gpt-6-luna", messages=[ {"role": "system", "content": f"Streść rozmowę w maksymalnie {max_words} słowach. Zachowaj fakty, ustalenia i otwarte sprawy, pomiń powitania."}, {"role": "user", "content": text}, ], ) summary = r.choices[0].message.content return [{"role": "user", "content": f"[Podsumowanie wcześniejszej rozmowy] {summary}"}, *recent]
Podsumowanie wstawiaj po stałej części promptu, żeby nie psuć cache. Jakość sprawdzaj na zestawie testowym: porównaj odpowiedzi z pełną i skompresowaną historią. Więcej o zarządzaniu kontekstem agentów piszę we wpisie o context engineering.
Limity i monitoring
- Limit długości odpowiedzi dopasowany do zadania, zamiast domyślnego.
- Tylko potrzebne narzędzia w danym kroku - każda definicja to tokeny przy każdym wywołaniu.
- Krótszy prompt systemowy - usuń powtórzenia i instrukcje, które nie zmieniają wyników.
- Budżet na zadanie i na użytkownika - zabezpieczenie przed pętlą agenta, która w nocy wygeneruje wysoki rachunek.
- Koszt na punkt końcowy - loguj tokeny i koszt każdego wywołania (własne logi albo narzędzia takie jak Helicone czy Langfuse) i ustaw alert, gdy koszt jednego zapytania przekroczy próg.
Plan na dwa tygodnie
| Krok | Trudność | Typowa oszczędność | Czas |
|---|---|---|---|
| Analiza logów - które 20% wywołań generuje 80% kosztów | Niska | Wskazuje, od czego zacząć | pół dnia |
| Uporządkowanie promptu pod cache | Niska | Do 90% kosztu stałej części wejścia | 2-4 godziny |
| Limit długości odpowiedzi i usunięcie zbędnych narzędzi | Niska | 10-30% | 1-2 godziny |
| Kompresja historii | Średnia | Znaczna przy długich sesjach | 1 dzień |
| Tańszy model dla prostych zapytań | Średnia | Duża na przeniesionych zapytaniach | 2-3 dni z testem w trybie cienia |
| Tryb wsadowy dla zadań w tle | Niska | 50% na tych zadaniach | kilka godzin |
| Monitoring kosztów z alertami | Niska | Zapobiega niespodziankom | kilka godzin |
---
Przeprowadzam audyty kosztów AI: analizuję logi wywołań, wskazuję, gdzie ucieka budżet, i wdrażam cache, dobór modeli, kompresję kontekstu i monitoring. Robię to w ramach budowy aplikacji AI i doradztwa AI. Napisz do mnie - zaczynam od analizy Twoich logów API.
Warto przeczytać dalej:
- Jak wybrać model LLM w 2026 - OpenAI, Anthropic, Google czy otwarte wagi (ceny, test, router)
- Context engineering - jak zarządzać kontekstem modelu, żeby agent AI nie gubił wątku
- Monitoring AI na produkcji: metryki, tracing i alerty dla aplikacji LLM
- Ollama, vLLM i self-hosted LLM - jak uruchomić lokalny model AI w firmie
/// RELATED_SERVICES
Potrzebujesz wdrożenia tych koncepcji? Zobacz usługi powiązane z tym tematem.
Budowa Aplikacji AI
Dedykowane oprogramowanie AI i aplikacje webowe z silnikiem AI — MVP, full stack development, programowanie systemów AI od zera do produkcji.
Zobacz usługęUsługaDoradztwo AI
Niezależny konsultant sztucznej inteligencji dla firm. Audyt gotowości na AI, strategia wdrożenia i doradztwo dla zarządów — zanim zaangażujesz wykonawców.
Zobacz usługę/// RELATED_RECORDS
Modele embeddingów po polsku - bge-m3, multilingual-e5 czy PolDense? Test na 900 pytaniach
Który model embeddingów wybrać do polskiego RAG? Przetestowałem 10 modeli i BM25 na 900 prawdziwych pytaniach klientów: wyniki, odporność na brak polskich znaków i literówki, prefiks, który zabiera 30 punktów, ranking PIRB, ceny API, koszt przy dwóch skalach, licencje i kod.
Adopcja AI w zespole - dlaczego licencje leżą nieużywane i jak przekonać ludzi do AI
Według Gartnera tylko 5% firm po pilotażu Copilota planowało szersze wdrożenie, a z AI codziennie korzysta 8% pracowników. Pięć oporów i co na nie działa, rola menedżerów, program liderów AI, pomiar adopcji na trzech poziomach i plan na 90 dni.
Jak wybrać wykonawcę wdrożenia AI - 15 pytań, sygnały ostrzegawcze i zapisy w umowie
Według MIT NANDA 95% pilotaży AI nie daje efektu finansowego, ale wdrożenia z partnerami udają się w 67% przypadków. Zespół wewnętrzny, partner czy hybryda, 15 pytań do wykonawcy, sygnały ostrzegawcze, zapisy w umowie i pilotaż z kryteriami sukcesu.
Signal received?
Przerwij
Ciszę
Zainicjuj protokół. Nawiąż połączenie. Zbudujmy coś głośnego.
