Tokeny wejściowe
Każdy plik, prompt i kontekst zużywa tokeny wejściowe. Z Claude Sonnet 4 po $3 za milion tokenów wejściowych, jeden duży skan bazy kodu może kosztować dolary.
Wydajność w Claude Code to nie tylko szybkość – to maksymalizowanie wartości z każdego tokena, minimalizowanie 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 kosztownego 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. Z Claude Sonnet 4 po $3 za milion tokenów wejściowych, jeden duży skan bazy kodu może kosztować dolary.
Tokeny wyjściowe
Każda odpowiedź, edycja i generowanie kosztuje tokeny wyjściowe po $15 za milion. Gadatliwe wyjaśnienia i generowanie dużych plików szybko się sumuje.
Okno kontekstu
Limit 200K tokenów oznacza strategiczne zarządzanie kontekstem. Nie możesz po prostu rzucić wszystkiego na Claude – musisz być selektywny.
Korzyści cache'owania
90% zniżka na treści z cache zmienia ekonomię. Strategiczne cache’owanie może zmniejszyć koszty o rząd wielkości.
Zacznij minimalnie, rozszerzaj w razie potrzeby:
# ŹLE: Podejście kuchenne zlewuclaude "refaktoryzuj całe uwierzytelnianie" auth/ middleware/ utils/ tests/
# DOBRZE: Progresywne rozszerzanieclaude "przeanalizuj wzorce auth" auth/core.ts# Następnie: "teraz sprawdź integrację middleware" middleware/auth.ts# Następnie: "zaktualizuj powiązane testy" tests/auth/
Używaj wzorców .claudeignore
efektywnie:
# .claudeignore - Wyklucz szum, zachowaj sygnałnode_modules/dist/build/coverage/*.test.js # Dołączaj testy tylko gdy potrzeba*.spec.ts # Podobnie dla speców*.min.js # Nigdy nie dołączaj zminifikowanych plików*.map # Source mapy marnują tokenypackage-lock.jsonyarn.lockpnpm-lock.yaml
# Duże wygenerowane pliki*.generated.ts*.pb.go*_gen.go
# Dokumentacja (dołączaj tylko gdy istotna)docs/**/*.mdREADME.md # Zachowaj główne README
Używaj ponownie kosztowny kontekst w wielu operacjach:
# Załaduj kontekst raz, używaj wielokrotnieclaude-code --repl "przeanalizuj architekturę serwisu użytkowników" services/user/
# W trybie REPL:> "zidentyfikuj wąskie gardła wydajności"> "zasugeruj strategie cache'owania"> "wygeneruj plan optymalizacji"> "zaimplementuj top 3 optymalizacje"
Bądź konkretny
Niejasne prompty prowadzą do gadatliwych odpowiedzi. Konkretne prompty dają konkretne odpowiedzi.
Pomijaj wyjaśnienia
Gdy wiesz czego chcesz, pomiń tutorial: “zaimplementuj X (nie potrzeba wyjaśnień)”
Używaj szablonów
Szablony promptów wielokrotnego użytku redukują tokeny wejściowe i poprawiają spójność.
Żądaj formatów
“Odpowiedz tylko kodem” lub “Tylko odpowiedź JSON” znacznie redukuje tokeny wyjściowe.
# NIEEFEKTYWNE: Gadatliwe żądanie"Czy mógłbyś proszę pomóc mi zrefaktoryzować ten middlewareuwierzytelniania aby używał nowej biblioteki JWT? Chciałbymzrozumieć zmiany i upewnić się że jest kompatybilny wstecz..."
# EFEKTYWNE: Bezpośrednie i konkretne"Refaktoryzuj middleware auth: stara-jwt → nowa biblioteka jwt.Zachowaj kompatybilność API. Tylko kod."
# NIEEFEKTYWNE: Opowiadanie historii"Mam ten dziwny błąd gdy użytkownicy logują się naurządzeniach mobilnych. Czasami działa, czasami nie.Błąd mówi coś o tokenach..."
# EFEKTYWNE: Strukturalny raport"Błąd: Sporadyczne niepowodzenie auth na mobileBłąd: 'Invalid token format'Kontekst: Walidacja JWT w mobile-auth.ts:42Wymagana poprawka. Pokaż tylko poprawioną funkcję."
# NIEEFEKTYWNE: Otwarte pytanie"Zaimplementuj system cache'owania dla naszego API"
# EFEKTYWNE: Konkretne wymagania"Zaimplementuj cache'owanie Redis:- getThing() → sprawdź cache → miss? pobierz & przechowaj- 5min TTL, eksmisja LRU- TypeScript, obsługa błędów dołączonaTylko kod, bez wyjaśnień"
Cache’owanie Claude Code może dramatycznie zredukować koszty gdy używane strategicznie:
Utrzymuj często używany kontekst w cache:
# Pierwszy run: Pełny kosztclaude "przeanalizuj strukturę bazy kodu" --include-types --include-interfaces
# Kolejne runy: 90% taniej jeśli kontekst nie zmienionyclaude "zaimplementuj nowe funkcje użytkowników" # Używa ponownie cache'owanej analizy typów
Strukturyzuj operacje aby zmaksymalizować trafienia cache:
Początkowy przebieg analizy
claude "przeanalizuj wszystkie serwisy, zidentyfikuj wzorce" services/
Przebiegi implementacji (używając cache’owanej analizy)
claude "dodaj logowanie do serwisu użytkowników na podstawie wzorców"claude "dodaj logowanie do serwisu zamówień na podstawie wzorców"claude "dodaj logowanie do serwisu płatności na podstawie wzorców"
Przebieg weryfikacji (wciąż używając cache)
claude "zweryfikuj spójność logowania we wszystkich serwisach"
Utwórz szablony z cache dla częstych operacji:
# Cache'uj kontekst szablonuclaude "przeanalizuj nasze wzorce API" templates/api-template.ts
# Używaj ponownie dla wielu endpointów (90% taniej każdy)claude "utwórz endpoint użytkowników zgodnie z szablonem"claude "utwórz endpoint zamówień zgodnie z szablonem"claude "utwórz endpoint płatności zgodnie z szablonem"
# NIEEFEKTYWNE: Wiele oddzielnych operacjiclaude "zaktualizuj model użytkownika" models/user.tsclaude "zaktualizuj serwis użytkownika" services/user.tsclaude "zaktualizuj kontroler użytkownika" controllers/user.tsclaude "zaktualizuj testy użytkownika" tests/user.test.ts
# EFEKTYWNE: Jedna skoordynowana operacjaclaude "dodaj weryfikację email do systemu użytkowników" \ models/user.ts \ services/user.ts \ controllers/user.ts \ tests/user.test.ts \ --plan "1. Dodaj pole emailVerified 2. Dodaj serwis weryfikacji 3. Dodaj endpointy 4. Zaktualizuj testy"
Zarządzaj oknem kontekstu strategicznie:
// Niestandardowy skrypt 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; } }};
Utwórz system śledzenia tokenów:
#!/bin/bash# Owij claude-code aby śledzić użycieclaude_tracked() { local start_time=$(date +%s) local temp_log=$(mktemp)
# Uruchom z logowaniem claude "$@" 2>&1 | tee "$temp_log"
# Wyciągnij użycie tokenów (założenie że claude-code wypisuje 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
# Sprzątanie 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 codziennych kosztów daily_cost = df.groupby('date')['cost'].sum()
# Efektywność tokenów (cache 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_ops
Używaj właściwego modelu do zadania:
# Złożona refaktoryzacja: Używaj SonnetCLAUDE_MODEL=claude-4-sonnet claude "refaktoryzuj system uwierzytelniania"
# Proste poprawki: Mógłby używać Haiku (gdy dostępny w CLI)CLAUDE_MODEL=claude-haiku claude "napraw literówkę w README"
# Przegląd kodu: Opus dla najgłębszej analizyCLAUDE_MODEL=claude-4.1-opus claude "audyt bezpieczeństwa systemu auth"
Dziel duże zadania na kawałki efektywne tokenowo:
// Skrypt migracji przyrostowejasync function migrateCodebase() { const files = await glob('src/**/*.js'); const batchSize = 10; // Plików na partię
for (let i = 0; i < files.length; i += batchSize) { const batch = files.slice(i, i + batchSize);
// Przetwarzaj partię z skoncentrowanym kontekstem await claudeCode([ 'zmigruj na 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']); } }}
“Zredukowaliśmy zadanie refaktoryzacji 2 milionów tokenów do 400K tokenów (80% redukcja) używając tych technik:”
Faza pre-analizy
Refaktoryzacja dzielona
Przebieg weryfikacji
Zoptymalizowany codzienny przepływ pracy redukujący koszty o 75%:
# Przygotowanie porannego standupu: 100K tokenówclaude "podsumuj wszystkie wczorajsze zmiany" .
# Rozwój funkcji: 500K tokenówclaude "zaimplementuj dashboard użytkownika" src/
# Naprawy błędów: 300K tokenówclaude "napraw wszystkie błędy lintingu" .
# Łącznie: 900K tokenów/dzień ($3.60)
# Przygotowanie porannego standupu: 20K tokenówclaude "podsumuj zmiany" --since yesterday --format brief
# Rozwój funkcji: 150K tokenówclaude "zaimplementuj dashboard użytkownika" \ src/components/Dashboard.tsx \ src/api/dashboard.ts \ --reuse-context
# Naprawy błędów: 50K tokenówclaude "napraw tylko krytyczne linty" --severity error
# Łącznie: 220K tokenów/dzień ($0.88)
Codzienna lista kontrolna optymalizacji
.claudeignore
dla nowych wygenerowanych plikówOptymalizacja wydajności w Claude Code polega na pracy mądrzej, nie ciężej. Rozumiejąc ekonomię tokenów, wykorzystując cache’owanie i strukturyzując przepływy pracy efektywnie, możesz zredukować koszty o 80% lub więcej jednocześnie faktycznie poprawiając szybkość rozwoju. Kluczem jest traktowanie tokenów jako cennego zasobu i optymalizowanie ich użycia tak jak optymalizowałbyś wydajność kodu.