Tokeny wejściowe
Każdy plik, prompt i kontekst zużywa tokeny wejściowe. Przy Claude Sonnet 4.5 po 3 USD za milion tokenów wejściowych, pojedyncze skanowanie dużej bazy kodu może kosztować dolary.
Wydajność w Claude Code to nie tylko szybkość – to maksymalizacja wartości każdego tokena, minimalizacja zanieczyszczenia kontekstu i orkiestracja przepływów pracy, które skalują się efektywnie. Ten przewodnik ujawnia strategie optymalizacji, które przekształcają Claude z pomocnego, ale drogiego asystenta w opłacalną potęgę rozwoju.
Każda interakcja z Claude Code zużywa tokeny – podstawową jednostkę obliczeń AI. Zrozumienie ekonomii tokenów jest kluczowe dla zrównoważonego rozwoju wspomaganego przez AI:
Tokeny wejściowe
Każdy plik, prompt i kontekst zużywa tokeny wejściowe. Przy Claude Sonnet 4.5 po 3 USD za milion tokenów wejściowych, pojedyncze skanowanie dużej bazy kodu może kosztować dolary.
Tokeny wyjściowe
Każda odpowiedź, edycja i generowanie kosztuje tokeny wyjściowe po 15 USD za milion. Rozwlekłe wyjaśnienia i generowanie dużych plików szybko się sumują.
Okno kontekstu
Limit 200K tokenów oznacza strategiczne zarządzanie kontekstem. Nie możesz po prostu wrzucić wszystkiego do Claude – musisz być selektywny.
Korzyści z cache'owania
90% zniżki na treści z cache’a przekształca ekonomię. Strategiczne cache’owanie może zmniejszyć koszty o rząd wielkości.
Zacznij minimalnie, rozszerzaj w miarę potrzeb:
# ŹLE: Podejście kuchenne zlewuclaude "refactor all authentication" auth/ middleware/ utils/ tests/
# DOBRZE: Progresywne rozszerzanieclaude "analyze auth patterns" auth/core.ts# Następnie: "now check middleware integration" middleware/auth.ts# Następnie: "update related tests" tests/auth/Efektywnie używaj wzorców .claudeignore:
# .claudeignore - Wyklucz szum, zachowaj sygnałnode_modules/dist/build/coverage/*.test.js # Dołącz testy tylko gdy potrzebne*.spec.ts # Podobnie dla spec*.min.js # Nigdy nie dołączaj zminifikowanych plików*.map # Mapy źródeł marnują tokenypackage-lock.jsonyarn.lockpnpm-lock.yaml
# Duże wygenerowane pliki*.generated.ts*.pb.go*_gen.go
# Dokumentacja (dołącz tylko gdy istotna)docs/**/*.mdREADME.md # Zachowaj główny READMEUżywaj ponownie kosztownego kontekstu w wielu operacjach:
# Załaduj kontekst raz, użyj wielokrotnieclaude-code --repl "analyze user service architecture" services/user/
# W trybie REPL:> "identify performance bottlenecks"> "suggest caching strategies"> "generate optimization plan"> "implement top 3 optimizations"Bądź konkretny
Niejasne prompty prowadzą do rozwlekłych odpowiedzi. Konkretne prompty dają konkretne odpowiedzi.
Pomiń wyjaśnienia
Gdy wiesz, czego chcesz, pomiń tutorial: “implement X (no explanation needed)”
Używaj szablonów
Szablony promptów do wielokrotnego użytku zmniejszają tokeny wejściowe i poprawiają spójność.
Żądaj formatów
“Reply with code only” lub “JSON response only” znacząco zmniejsza tokeny wyjściowe.
# NIEEFEKTYWNE: Rozwlekłe żądanie"Could you please help me refactor this authenticationmiddleware to use the new JWT library? I'd like tounderstand the changes and make sure it's backwardscompatible..."
# EFEKTYWNE: Bezpośrednie i konkretne"Refactor auth middleware: old-jwt → new-jwt library.Maintain API compatibility. Code only."# NIEEFEKTYWNE: Opowiadanie historii"I'm getting this weird error when users log in onmobile devices. Sometimes it works, sometimes not.The error says something about tokens..."
# EFEKTYWNE: Ustrukturyzowany raport"Bug: Intermittent auth failure on mobileError: 'Invalid token format'Context: JWT validation in mobile-auth.ts:42Fix required. Show only the corrected function."# NIEEFEKTYWNE: Otwarte"Implement a caching system for our API"
# EFEKTYWNE: Konkretne wymagania"Implement Redis caching:- getThing() → check cache → miss? fetch & store- 5min TTL, LRU eviction- TypeScript, error handling includedCode only, no explanation"Cache’owanie Claude Code może dramatycznie zmniejszyć koszty, gdy jest używane strategicznie:
Utrzymuj często używany kontekst w cache:
# Pierwsze uruchomienie: Pełny kosztclaude "analyze codebase structure" --include-types --include-interfaces
# Kolejne uruchomienia: 90% taniej jeśli kontekst się nie zmieniłclaude "implement new user features" # Używa ponownie cache'owanej analizy typówStrukturyzuj operacje, aby maksymalizować trafienia cache:
Początkowy przebieg analizy
claude "analyze all services, identify patterns" services/Przebiegi implementacji (używające cache’owanej analizy)
claude "add logging to user service based on patterns"claude "add logging to order service based on patterns"claude "add logging to payment service based on patterns"Przebieg weryfikacji (nadal używający cache)
claude "verify logging consistency across all services"Twórz cache’owane szablony dla typowych operacji:
# Cache'uj kontekst szablonuclaude "analyze our API patterns" templates/api-template.ts
# Używaj ponownie dla wielu endpointów (90% taniej każdy)claude "create user endpoint following template"claude "create order endpoint following template"claude "create payment endpoint following template"# NIEEFEKTYWNE: Wiele oddzielnych operacjiclaude "update user model" models/user.tsclaude "update user service" services/user.tsclaude "update user controller" controllers/user.tsclaude "update user tests" tests/user.test.ts
# EFEKTYWNE: Pojedyncza skoordynowana operacjaclaude "add email verification to user system" \ models/user.ts \ services/user.ts \ controllers/user.ts \ tests/user.test.ts \ --plan "1. Add emailVerified field 2. Add verification service 3. Add endpoints 4. Update tests"Strategicznie zarządzaj oknem kontekstu:
// Skrypt niestandardowego zarządzania kontekstemconst contextManager = { maxTokens: 150000, // Zostaw bufor currentTokens: 0,
addFile(path: string, priority: number) { const tokens = estimateTokens(readFile(path)); if (this.currentTokens + tokens > this.maxTokens) { this.evictLowPriority(); } this.files.push({ path, tokens, priority }); this.currentTokens += tokens; },
evictLowPriority() { // Usuń pliki o najniższym priorytecie, aż będzie miejsce this.files.sort((a, b) => b.priority - a.priority); while (this.currentTokens > this.maxTokens * 0.8) { const removed = this.files.pop(); this.currentTokens -= removed.tokens; } }};Stwórz system śledzenia tokenów:
#!/bin/bash# Owijka claude-code do śledzenia użyciaclaude_tracked() { local start_time=$(date +%s) local temp_log=$(mktemp)
# Uruchom z logowaniem claude "$@" 2>&1 | tee "$temp_log"
# Wyodrębnij użycie tokenów (zakłada, że claude-code wyświetla użycie) local input_tokens=$(grep "Input tokens:" "$temp_log" | awk '{print $3}') local output_tokens=$(grep "Output tokens:" "$temp_log" | awk '{print $3}') local cached_tokens=$(grep "Cached tokens:" "$temp_log" | awk '{print $3}')
# Oblicz koszty local input_cost=$(echo "$input_tokens * 0.003 / 1000" | bc -l) local output_cost=$(echo "$output_tokens * 0.015 / 1000" | bc -l) local cached_cost=$(echo "$cached_tokens * 0.0003 / 1000" | bc -l) local total_cost=$(echo "$input_cost + $output_cost + $cached_cost" | bc -l)
# Loguj do pliku śledzenia echo "$(date +%Y-%m-%d\ %H:%M:%S),\"$*\",$input_tokens,$output_tokens,$cached_tokens,$total_cost" >> ~/.claude-usage.csv
# Posprzątaj rm "$temp_log"}
alias claude-code="claude_tracked"import pandas as pdimport matplotlib.pyplot as pltfrom datetime import datetime, timedelta
def analyze_usage(): df = pd.read_csv('~/.claude-usage.csv', names=[ 'timestamp', 'command', 'input_tokens', 'output_tokens', 'cached_tokens', 'cost' ])
df['timestamp'] = pd.to_datetime(df['timestamp']) df['date'] = df['timestamp'].dt.date
# Trend dziennych kosztów daily_cost = df.groupby('date')['cost'].sum()
# Efektywność tokenów (cache'owane vs świeże) token_efficiency = df.groupby('date').agg({ 'input_tokens': 'sum', 'cached_tokens': 'sum' }) token_efficiency['cache_rate'] = ( token_efficiency['cached_tokens'] / (token_efficiency['input_tokens'] + token_efficiency['cached_tokens']) )
# Najdroższe operacje expensive_ops = df.nlargest(10, 'cost')[['timestamp', 'command', 'cost']]
return daily_cost, token_efficiency, expensive_opsUżyj odpowiedniego modelu do zadania:
# Złożona refaktoryzacja: Użyj SonnetCLAUDE_MODEL=claude-sonnet-4.5 claude "refactor authentication system"
# Proste poprawki: Można użyć Haiku (gdy dostępny w CLI)CLAUDE_MODEL=claude-haiku claude "fix typo in README"
# Przegląd kodu: Opus dla najgłębszej analizyCLAUDE_MODEL=claude-opus-4.5 claude "security audit auth system"Podziel duże zadania na części efektywne tokenowo:
// Skrypt przyrostowej migracjiasync function migrateCodebase() { const files = await glob('src/**/*.js'); const batchSize = 10; // Pliki na partię
for (let i = 0; i < files.length; i += batchSize) { const batch = files.slice(i, i + batchSize);
// Przetwórz partię z ukierunkowanym kontekstem await claudeCode([ 'migrate to TypeScript', ...batch, '--context-limit', '50000', // Mniejszy kontekst na partię '--cache-strategy', 'aggressive' ]);
// Wyczyść cache między partiami jeśli potrzeba if (i % 50 === 0) { await claudeCode(['--clear-cache']); } }}“Zmniejszyliśmy zadanie refaktoryzacji o 2 milionach tokenów do 400K tokenów (80% redukcji) używając tych technik:”
Faza wstępnej analizy
Podzielona refaktoryzacja
Przebieg weryfikacji
Zoptymalizowany codzienny przepływ pracy zmniejszający koszty o 75%:
# Przygotowanie do standup: 100K tokenówclaude "summarize all yesterday's changes" .
# Rozwój funkcji: 500K tokenówclaude "implement user dashboard" src/
# Naprawy bugów: 300K tokenówclaude "fix all linting errors" .
# Razem: 900K tokenów/dzień ($3.60)# Przygotowanie do standup: 20K tokenówclaude "summarize changes" --since yesterday --format brief
# Rozwój funkcji: 150K tokenówclaude "implement user dashboard" \ src/components/Dashboard.tsx \ src/api/dashboard.ts \ --reuse-context
# Naprawy bugów: 50K tokenówclaude "fix critical lints only" --severity error
# Razem: 220K tokenów/dzień ($0.88)Codzienna lista kontrolna optymalizacji
.claudeignore dla nowych wygenerowanych plikówOptymalizacja wydajności w Claude Code polega na inteligentniejszej pracy, a nie cięższej. Rozumiejąc ekonomię tokenów, wykorzystując cache’owanie i strukturyzując przepływy pracy efektywnie, możesz zmniejszyć koszty o 80% lub więcej, jednocześnie faktycznie poprawiając prędkość rozwoju. Kluczem jest traktowanie tokenów jako cennego zasobu i optymalizowanie ich użycia tak samo, jak optymalizowałbyś wydajność kodu.