Mise en cache de prompts sensible au fournisseur
Superdav AI Agent v1.12.0 introduit la mise en cache de prompts sensible au fournisseur (provider-aware prompt caching), ce qui optimise les coûts et la latence de l'API en mettant en cache les prompts à travers différents fournisseurs de LLM. Chaque fournisseur dispose de mécanismes et de configurations de mise en cache différents.
Vue d'ensemble
La mise en cache de prompts vous permet de :
- Mettre en cache de grands prompts fréquemment utilisés
- Réduire les coûts de l'API en évitant les traitements redondants
- Améliorer la latence pour les requêtes mises en cache
- Gérer le cycle de vie du cache explicitement
Les différents fournisseurs implémentent la mise en cache différemment :
- Google Gemini: API
cachedContents - Azure OpenAI: Mise en cache de prompts avec TTL
- OpenRouter: Mise en cache spécifique au fournisseur
- Vertex Anthropic: Mise en cache de prompts avec contrôle de cache
Google Gemini: API cachedContents
Google Gemini fournit une gestion explicite du cache via l'API cachedContents.
Configuration
$config = [
'provider' => 'google-gemini',
'model' => 'gemini-2.0-flash',
'caching' => [
'enabled' => true,
'ttl' => 3600, // 1 heure en secondes
'max_tokens' => 1000000, // Tokens maximum à mettre en cache
],
];
Créer un prompt mis en cache
use Superdav\AI\Providers\GoogleGemini;
$gemini = new GoogleGemini( $config );
$cached_content = $gemini->create_cached_content(
[
'system_prompt' => 'You are a helpful assistant...',
'context' => 'Large context document...',
'ttl' => 3600,
]
);
// Returns: ['cache_id' => 'abc123', 'expires_at' => timestamp]
Utiliser un prompt mis en cache
$response = $gemini->generate(
[
'cache_id' => 'abc123',
'prompt' => 'User question here',
]
);
Cycle de vie du cache
// Lister les contenus mis en cache
$caches = $gemini->list_cached_contents();
// Obtenir les détails du cache
$cache = $gemini->get_cached_content( 'abc123' );
// Étendre le TTL du cache
$gemini->update_cached_content(
'abc123',
['ttl' => 7200] // Étendre à 2 heures
);
// Supprimer le cache
$gemini->delete_cached_content( 'abc123' );
Bonnes pratiques pour Gemini
- Définir un TTL approprié : Équilibrer l'économie de coûts et l'obsolescence du cache
- Mettre en cache les prompts système : Réutiliser le même prompt système pour les requêtes
- Surveiller l'utilisation du cache : Suivre les caches les plus utilisés
- Nettoyer les caches expirés : Supprimer périodiquement les caches inutilisés
Azure OpenAI: Mise en cache de prompts
Azure OpenAI prend en charge la mise en cache de prompts avec une gestion automatique du TTL.
Configuration
$config = [
'provider' => 'azure-openai',
'model' => 'gpt-4-turbo',
'api_version' => '2024-08-01-preview',
'caching' => [
'enabled' => true,
'cache_control' => 'max_age=3600',
],
];
Activer la mise en cache
use Superdav\AI\Providers\AzureOpenAI;
$azure = new AzureOpenAI( $config );
$response = $azure->generate(
[
'system_prompt' => 'You are a helpful assistant...',
'context' => 'Large context document...',
'prompt' => 'User question here',
'cache_control' => 'max_age=3600',
]
);
// La réponse inclut l'utilisation du cache :
// [
// 'content' => '...',
// 'cache_creation_input_tokens' => 1000,
// 'cache_read_input_tokens' => 500,
// ]
En-têtes de cache
Azure OpenAI utilise des en-têtes HTTP pour le contrôle du cache :
Cache-Control: max_age=3600
Valeurs supportées :
max_age=<secondes>: Mettre en cache pour la durée spécifiéeno_cache: Ne pas mettre en cache cette requêteno_store: Ne pas mettre en cache et ne pas réutiliser
Surveiller l'utilisation du cache
$response = $azure->generate( [...] );
$cache_tokens = $response['cache_creation_input_tokens'] ?? 0;
$cache_hits = $response['cache_read_input_tokens'] ?? 0;
echo "Création de cache : $cache_tokens tokens\n";
echo "Hits de cache : $cache_hits tokens\n";
Bonnes pratiques pour Azure OpenAI
- Utiliser des prompts cohérents : Les prompts identiques bénéficient de la mise en cache
- Définir un TTL raisonnable : Équilibrer le coût et la fraîcheur
- Surveiller les métriques de cache : Suivre la création par rapport aux hits
- Traiter les requêtes par lots : Grouper les requêtes pour maximiser les hits de cache
OpenRouter: Mise en cache spécifique au fournisseur
OpenRouter prend en charge la mise en cache via les fournisseurs sous-jacents (OpenAI, Anthropic, etc.).
Configuration
$config = [
'provider' => 'openrouter',
'model' => 'openai/gpt-4-turbo',
'caching' => [
'enabled' => true,
'provider_cache' => 'openai', // Utiliser le cache d'OpenAI
],
];
Utiliser la mise en cache OpenRouter
use Superdav\AI\Providers\OpenRouter;
$router = new OpenRouter( $config );
$response = $router->generate(
[
'system_prompt' => 'You are a helpful assistant...',
'context' => 'Large context document...',
'prompt' => 'User question here',
'cache_control' => 'max_age=3600',
]
);
Options spécifiques au fournisseur
Les différents fournisseurs ont des mécanismes de mise en cache différents :
// Mise en cache compatible OpenAI
$response = $router->generate(
[
'model' => 'openai/gpt-4-turbo',
'cache_control' => 'max_age=3600',
]
);
// Mise en cache compatible Anthropic
$response = $router->generate(
[
'model' => 'anthropic/claude-3-opus',
'cache_control' => [
'type' => 'ephemeral',
'max_tokens' => 1000000,
],
]
);
Bonnes pratiques pour OpenRouter
- Connaître le cache de votre fournisseur : Chaque fournisseur a des mécanismes différents
- Tester le comportement de mise en cache : Vérifier que la mise en cache fonctionne avec le fournisseur choisi
- Surveiller les coûts : Suivre les économies réalisées grâce au cache
- Utiliser des modèles cohérents : Changer de modèle annule les hits de cache
Vertex Anthropic: Mise en cache de prompts avec contrôle de cache
Vertex Anthropic (Google Cloud) prend en charge la mise en cache de prompts avec un contrôle de cache explicite.
Configuration
$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,
],
],
];
Utiliser la mise en cache Vertex Anthropic
use Superdav\AI\Providers\VertexAnthropic;
$vertex = new VertexAnthropic( $config );
$response = $vertex->generate(
[
'system_prompt' => 'You are a helpful assistant...',
'context' => 'Large context document...',
'prompt' => 'User question here',
'cache_control' => [
'type' => 'ephemeral',
'max_tokens' => 1000000,
],
]
);
// La réponse inclut les métriques de cache :
// [
// 'content' => '...',
// 'usage' => [
// 'input_tokens' => 1000,
// 'cache_creation_input_tokens' => 500,
// 'cache_read_input_tokens' => 300,
// ],
// ]
Types de contrôle de cache
- ephemeral : Cache pour la durée de la requête (par défaut)
- persistent : Cache sur plusieurs requêtes (si pris en charge)
Surveiller l'utilisation du cache
$response = $vertex->generate( [...] );
$usage = $response['usage'];
$cache_created = $usage['cache_creation_input_tokens'] ?? 0;
$cache_read = $usage['cache_read_input_tokens'] ?? 0;
echo "Cache créé : $cache_created tokens\n";
echo "Cache lu : $cache_read tokens\n";
Bonnes pratiques pour Vertex Anthropic
- Utiliser le cache éphémère : Idéal pour la mise en cache de session unique
- Définir max_tokens de manière appropriée : Équilibrer la taille du cache et le coût
- Surveiller les métriques de cache : Suivre l'efficacité du cache
- Tester avec votre charge de travail : Vérifier que la mise en cache bénéficie à votre cas d'utilisation
Stratégie de mise en cache inter-fournisseurs
Configuration unifiée
$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,
],
],
],
],
];
Détection du fournisseur
$provider = $config['provider'];
$cache_config = $config['caching']['providers'][ $provider ]
?? $config['caching'];
// Utiliser la configuration de mise en cache spécifique au fournisseur
Stratégie de repli (Fallback)
try {
// Essayer de mettre en cache avec le fournisseur principal
$response = $primary_provider->generate( $request );
} catch ( CacheException $e ) {
// Revenir à une requête non mise en cache
$response = $primary_provider->generate(
array_merge( $request, ['cache_control' => 'no_cache'] )
);
}
Optimisation des coûts
Calcul des économies
$cache_created_tokens = $response['cache_creation_input_tokens'] ?? 0;
$cache_read_tokens = $response['cache_read_input_tokens'] ?? 0;
$regular_tokens = $response['input_tokens'] ?? 0;
// Tarification typique (varie selon le fournisseur) :
$cache_creation_cost = $cache_created_tokens * 0.00001; // 10x moins cher
$cache_read_cost = $cache_read_tokens * 0.000001; // 100x moins cher
$regular_cost = $regular_tokens * 0.00001;
$total_cost = $cache_creation_cost + $cache_read_cost + $regular_cost;
$savings = ($regular_tokens * 0.00001) - $total_cost;
echo "Économies estimées : \$$savings\n";
Conseils d'optimisation
- Mettre en cache les prompts système volumineux : Les plus grandes économies de coûts
- Réutiliser le contexte : Mettre en cache les documents de contexte fréquemment utilisés
- Traiter les requêtes par lots : Grouper les requêtes similaires pour maximiser les hits de cache
- Surveiller l'efficacité du cache : Suivre les économies réelles
- Ajuster le TTL : Équilibrer le coût et la fraîcheur
Dépannage
Le cache n'est pas utilisé
- Vérifier que la mise en cache est activée dans la configuration
- S'assurer que les prompts sont identiques (la mise en cache exige une correspondance exacte)
- Vérifier que le cache n'a pas expiré
- Vérifier les limites de cache spécifiques au fournisseur
Échec de la création du cache
- Vérifier que la taille du cache est dans les limites du fournisseur
- S'assurer que la syntaxe de contrôle de cache est correcte
- Confirmer que le fournisseur prend en charge la mise en cache pour votre modèle
- Consulter la documentation du fournisseur pour les limitations
Coûts inattendus
- Surveiller les tokens de création de cache par rapport aux tokens de lecture de cache
- Vérifier que le cache est réellement utilisé
- Rechercher des manques de cache dus à des variations de prompts
- Envisager d'ajuster le TTL ou la stratégie de cache
Comparaison des fournisseurs
| Fonctionnalité | Gemini | Azure OpenAI | OpenRouter | Vertex Anthropic |
|---|---|---|---|---|
| API de cache | cachedContents | En-têtes HTTP | Spécifique au fournisseur | Contrôle de cache |
| Contrôle TTL | Explicite | Via en-têtes | Dépend du fournisseur | Éphémère/persistant |
| Taille max du cache | 1M tokens | Dépend du fournisseur | Dépend du fournisseur | 1M tokens |
| Réduction des coûts | 90% | 90% | Dépend du fournisseur | 90% |
| Surveillance | Détaillée | Via métriques | Dépend du fournisseur | Via utilisation |
Prochaines étapes
- Choisir votre fournisseur : Sélectionner en fonction de vos besoins
- Configurer la mise en cache : Mettre en place la mise en cache spécifique au fournisseur
- Tester la mise en cache : Vérifier qu'elle fonctionne avec vos prompts
- Surveiller l'utilisation : Suivre les hits de cache et les économies de coûts
- Optimiser : Ajuster le TTL et la stratégie de cache en fonction des résultats