Przejdź do głównej zawartości

Buforowanie Promptów Zależne od Dostawcy

Superdav AI Agent v1.12.0 wprowadza buforowanie promptów zależne od dostawcy (provider-aware prompt caching), co optymalizuje koszty API i opóźnienia, buforując prompty w różnych dostawcach LLM. Każdy dostawca ma inne mechanizmy i konfiguracje buforowania.

Przegląd

Buforowanie promptów pozwala Ci:

  • Buforować duże, często używane prompty
  • Zmniejszyć koszty API, unikając powtórnej obróbki
  • Poprawić opóźnienia dla żądań z bufora
  • Zarządzać cyklem życia bufora w sposób jawny

Różne dostawcy implementują buforowanie inaczej:

  • Google Gemini: API cachedContents
  • Azure OpenAI: Buforowanie promptów z TTL
  • OpenRouter: Buforowanie specyficzne dla dostawcy
  • Vertex Anthropic: Buforowanie promptów z kontrolą nad buforem (cache control)

Google Gemini: API cachedContents

Google Gemini zapewnia jawne zarządzanie buforem za pomocą API cachedContents.

Konfiguracja

$config = [
'provider' => 'google-gemini',
'model' => 'gemini-2.0-flash',
'caching' => [
'enabled' => true,
'ttl' => 3600, // 1 godzina w sekundach
'max_tokens' => 1000000, // Maksymalna liczba tokenów do buforowania
],
];

Tworzenie Buforowanego Promptu

use Superdav\AI\Providers\GoogleGemini;

$gemini = new GoogleGemini( $config );

$cached_content = $gemini->create_cached_content(
[
'system_prompt' => 'Jesteś pomocnym asystentem...',
'context' => 'Duży dokument kontekstowy...',
'ttl' => 3600,
]
);

// Zwraca: ['cache_id' => 'abc123', 'expires_at' => timestamp]

Użycie Buforowanego Promptu

$response = $gemini->generate(
[
'cache_id' => 'abc123',
'prompt' => 'Pytanie użytkownika tutaj',
]
);

Cykl Życia Bufora

// Wyświetl buforowane treści
$caches = $gemini->list_cached_contents();

// Pobierz szczegóły bufora
$cache = $gemini->get_cached_content( 'abc123' );

// Przedłuż TTL bufora
$gemini->update_cached_content(
'abc123',
['ttl' => 7200] // Przedłużenie na 2 godziny
);

// Usuń bufor
$gemini->delete_cached_content( 'abc123' );

Najlepsze Praktyki dla Gemini

  • Ustaw odpowiedni TTL: Zrównoważ oszczędności kosztów z przestarzałością bufora
  • Buforuj systemowe prompty: Ponownie używaj tego samego promptu systemowego w różnych żądaniach
  • Monitoruj użycie bufora: Śledź, które buforowanie jest używane najczęściej
  • Czyszcz buforowane treści po wygaśnięciu: Okresowo usuwaj nieużywane buforowanie

Azure OpenAI: Buforowanie Promptów

Azure OpenAI obsługuje buforowanie promptów z automatycznym zarządzaniem TTL.

Konfiguracja

$config = [
'provider' => 'azure-openai',
'model' => 'gpt-4-turbo',
'api_version' => '2024-08-01-preview',
'caching' => [
'enabled' => true,
'cache_control' => 'max_age=3600',
],
];

Włączenie Buforowania

use Superdav\AI\Providers\AzureOpenAI;

$azure = new AzureOpenAI( $config );

$response = $azure->generate(
[
'system_prompt' => 'Jesteś pomocnym asystentem...',
'context' => 'Duży dokument kontekstowy...',
'prompt' => 'Pytanie użytkownika tutaj',
'cache_control' => 'max_age=3600',
]
);

// Odpowiedź zawiera informacje o użyciu bufora:
// [
// 'content' => '...',
// 'cache_creation_input_tokens' => 1000,
// 'cache_read_input_tokens' => 500,
// ]

Nagłówki Bufora (Cache Headers)

Azure OpenAI używa nagłówków HTTP do kontroli bufora:

Cache-Control: max_age=3600

Obsługiwane wartości:

  • max_age=<sekundy>: Buforowanie na określony czas
  • no_cache: Nie buforuj tego żądania
  • no_store: Nie buforuj i nie używaj ponownie

Monitorowanie Użycia Bufora

$response = $azure->generate( [...] );

$cache_tokens = $response['cache_creation_input_tokens'] ?? 0;
$cache_hits = $response['cache_read_input_tokens'] ?? 0;

echo "Tworzenie bufora: $cache_tokens tokenów\n";
echo "Użycie bufora: $cache_hits tokenów\n";

Najlepsze Praktyki dla Azure OpenAI

  • Używaj spójnych promptów: Identyczne prompty korzystają z buforowania
  • Ustaw rozsądny TTL: Zrównoważ koszt z świeżością danych
  • Monitoruj metryki bufora: Śledź tworzenie vs. użycie bufora
  • Dziel żądania na partie: Grupuj żądania, aby zmaksymalizować trafienia w bufor

OpenRouter: Buforowanie Specyficzne dla Dostawcy

OpenRouter obsługuje buforowanie poprzez podstawowe dostawcy (OpenAI, Anthropic itp.).

Konfiguracja

$config = [
'provider' => 'openrouter',
'model' => 'openai/gpt-4-turbo',
'caching' => [
'enabled' => true,
'provider_cache' => 'openai', // Użyj buforowania OpenAI
],
];

Użycie Buforowania OpenRouter

use Superdav\AI\Providers\OpenRouter;

$router = new OpenRouter( $config );

$response = $router->generate(
[
'system_prompt' => 'Jesteś pomocnym asystentem...',
'context' => 'Duży dokument kontekstowy...',
'prompt' => 'Pytanie użytkownika tutaj',
'cache_control' => 'max_age=3600',
]
);

Opcje Specyficzne dla Dostawcy

Różne dostawcy mają różne mechanizmy buforowania:

// Buforowanie kompatybilne z OpenAI
$response = $router->generate(
[
'model' => 'openai/gpt-4-turbo',
'cache_control' => 'max_age=3600',
]
);

// Buforowanie kompatybilne z Anthropic
$response = $router->generate(
[
'model' => 'anthropic/claude-3-opus',
'cache_control' => [
'type' => 'ephemeral',
'max_tokens' => 1000000,
],
]
);

Najlepsze Praktyki dla OpenRouter

  • Poznaj buforowanie swojego dostawcy: Każdy dostawca ma inne mechanizmy
  • Testuj działanie buforowania: Sprawdź, czy buforowanie działa z wybranym dostawcą
  • Monitoruj koszty: Śledź oszczędności wynikające z buforowania
  • Używaj spójnych modeli: Zmiana modelu powoduje utratę trafień w bufor

Vertex Anthropic: Buforowanie Promptów z Kontrolą nad Buforem

Vertex Anthropic (Google Cloud) obsługuje buforowanie promptów z jawną kontrolą nad buforem.

Konfiguracja

$config = [
'provider' => 'vertex-anthropic',
'model' => 'claude-3-opus',
'project_id' => 'your-gcp-project',
'region' => 'us-central1',
'caching' => [
'enabled' => true,
'cache_control' => [
'type' => 'ephemeral',
'max_tokens' => 1000000,
],
],
];

Użycie Buforowania Vertex Anthropic

use Superdav\AI\Providers\VertexAnthropic;

$vertex = new VertexAnthropic( $config );

$response = $vertex->generate(
[
'system_prompt' => 'Jesteś pomocnym asystentem...',
'context' => 'Duży dokument kontekstowy...',
'prompt' => 'Pytanie użytkownika tutaj',
'cache_control' => [
'type' => 'ephemeral',
'max_tokens' => 1000000,
],
]
);

// Odpowiedź zawiera metryki bufora:
// [
// 'content' => '...',
// 'usage' => [
// 'input_tokens' => 1000,
// 'cache_creation_input_tokens' => 500,
// 'cache_read_input_tokens' => 300,
// ],
// ]

Typy Kontroli Bufora

  • ephemeral: Buforowanie na czas trwania żądania (domyślne)
  • persistent: Buforowanie przez wiele żądań (jeśli jest obsługiwane)

Monitorowanie Użycia Bufora

$response = $vertex->generate( [...] );

$usage = $response['usage'];
$cache_created = $usage['cache_creation_input_tokens'] ?? 0;
$cache_read = $usage['cache_read_input_tokens'] ?? 0;

echo "Bufor utworzony: $cache_created tokenów\n";
echo "Bufor odczytany: $cache_read tokenów\n";

Najlepsze Praktyki dla Vertex Anthropic

  • Używaj buforowania efemerycznego: Idealne do buforowania sesji
  • Ustaw max_tokens odpowiednio: Zrównoważ rozmiar bufora z kosztem
  • Monitoruj metryki bufora: Śledź skuteczność buforowania
  • Testuj na swoim obciążeniu: Sprawdź, czy buforowanie jest korzystne dla Twojego przypadku użycia

Strategia Buforowania Między Dostawcami

Ujednolicona Konfiguracja

$config = [
'caching' => [
'enabled' => true,
'default_ttl' => 3600,
'providers' => [
'google-gemini' => [
'ttl' => 3600,
'max_tokens' => 1000000,
],
'azure-openai' => [
'cache_control' => 'max_age=3600',
],
'vertex-anthropic' => [
'cache_control' => [
'type' => 'ephemeral',
'max_tokens' => 1000000,
],
],
],
],
];

Wykrywanie Dostawcy

$provider = $config['provider'];

$cache_config = $config['caching']['providers'][ $provider ]
?? $config['caching'];

// Użyj konfiguracji buforowania specyficznej dla dostawcy

Strategia Awaryjna (Fallback)

try {
// Spróbuj buforowania z podstawowym dostawcą
$response = $primary_provider->generate( $request );
} catch ( CacheException $e ) {
// Powrót do żądania bez buforowania
$response = $primary_provider->generate(
array_merge( $request, ['cache_control' => 'no_cache'] )
);
}

Optymalizacja Kosztów

Obliczanie Oszczędności

$cache_created_tokens = $response['cache_creation_input_tokens'] ?? 0;
$cache_read_tokens = $response['cache_read_input_tokens'] ?? 0;
$regular_tokens = $response['input_tokens'] ?? 0;

// Typowe ceny (zmienne w zależności od dostawcy):
$cache_creation_cost = $cache_created_tokens * 0.00001; // 10x taniej
$cache_read_cost = $cache_read_tokens * 0.000001; // 100x taniej
$regular_cost = $regular_tokens * 0.00001;

$total_cost = $cache_creation_cost + $cache_read_cost + $regular_cost;
$savings = ($regular_tokens * 0.00001) - $total_cost;

echo "Szacowane oszczędności: \$$savings\n";

Wskazówki Optymalizacyjne

  • Buforuj duże prompty systemowe: Największe oszczędności kosztów
  • Ponownie używaj kontekstu: Buforuj często używane dokumenty kontekstowe
  • Dziel żądania na partie: Grupuj podobne żądania, aby zmaksymalizować trafienia w bufor
  • Monitoruj skuteczność buforowania: Śledź rzeczywiste oszczędności
  • Dostosuj TTL: Zrównoważ koszt z świeżością danych

Rozwiązywanie Problemów

Buforowanie nie jest używane

  • Sprawdź, czy buforowanie jest włączone w konfiguracji
  • Upewnij się, że prompty są identyczne (buforowanie wymaga dokładnego dopasowania)
  • Sprawdź, czy bufor nie wygasł
  • Sprawdź limity buforowania specyficzne dla dostawcy

Błąd tworzenia bufora

  • Sprawdź, czy rozmiar bufora mieści się w limitach dostawcy
  • Upewnij się, że składnia kontroli bufora jest poprawna
  • Upewnij się, że dostawca obsługuje buforowanie dla Twojego modelu
  • Przejrzyj dokumentację dostawcy pod kątem ograniczeń

Nieoczekiwane koszty

  • Monitoruj tokeny tworzenia bufora vs. tokeny odczytu bufora
  • Sprawdź, czy buforowanie jest faktycznie używane
  • Sprawdź, czy nie ma braków bufora z powodu zmian w promptach
  • Rozważ dostosowanie TTL lub strategii buforowania

Porównanie Dostawców

FunkcjaGeminiAzure OpenAIOpenRouterVertex Anthropic
API BuforacachedContentsNagłówki HTTPSpecyficzne dla dostawcyKontrola bufora
Kontrola TTLJawnaPoprzez nagłówkiZależne od dostawcyEfemeryczne/trwałe
Max rozmiar bufora1M tokenówZależne od dostawcyZależne od dostawcy1M tokenów
Redukcja kosztów90%90%Zależne od dostawcy90%
MonitorowanieSzczegółowePoprzez metrykiZależne od dostawcyPoprzez użycie

Następne Kroki

  1. Wybierz dostawcę: Wybierz na podstawie swoich potrzeb
  2. Skonfiguruj buforowanie: Ustaw buforowanie specyficzne dla dostawcy
  3. Testuj buforowanie: Sprawdź, czy działa z Twoimi promptami
  4. Monitoruj użycie: Śledź trafienia w bufor i oszczędności kosztów
  5. Optymalizuj: Dostosuj TTL i strategię buforowania na podstawie wyników