Comme vous avez pu le constater dans le dernier article, utiliser l’API de ChatGPT peut vite devenir très coûteux, surtout si vous lui demandez la même requête. Pour éviter cela, nous allons mettre en place un système de cache pour y stocker des données.
Nous allons pour cela utiliser le Filesystem Cache Adapter, qui stockera les données sur votre disque dur. L’avantage est qu’il est très simple à mettre en place :
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
...
$cache = new FilesystemAdapter();
Application au code ChatGPT
Si on applique ce principe à notre code ChatGPT précédent, cela donnerait :
$commentairesClientsTri = $cache->get('commentaires_clients_trie', function (ItemInterface $item) use ($commentairesClients) {
$item->expiresAfter(3600);
$result = $this->openai->completions()->create([
'model' => 'text-davinci-003',
'prompt' => 'Trier les commentaires clients de ce restaurant du plus sympa au plus méchant:
' . implode("
", $commentairesClients),
'max_tokens' => 1000,
]);
return explode("
", trim($result['choices'][0]['text']));
});
Ici, nous interrogerons ChatGPT uniquement lorsque cela fera plus de 3600 secondes que la donnée a été mise en cache.
Bonus : Vérifier l’expiration des données
Vous pouvez également savoir quand une donnée va expirer :
$item = $cache->getItem('commentaires_clients_trie');
$metadata = $item->getMetadata();
$expirationTimeInMinutes = round(($metadata['expiry'] - time()) / 60);
$output->writeln([
'============',
'Cette donnée va expirer dans ' . $expirationTimeInMinutes . ' minutes'
]);
Conclusion
Avec ce système de cache, vous pouvez réduire significativement le coût des appels à l’API de ChatGPT tout en optimisant les performances.
Vous pouvez retrouver le code complet sur GitHub : https://github.com/gponty/sf6-chatGPT
