Comme vous avez pu le constater dans le dernier article, utiliser l’API de ChatGPT peu 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, il va stocker les données sur votre disque dur, l’avantage c’est qu’il est très simple à mettre en place :
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
...
$cache = new FilesystemAdapter();
Si on applique ce principe à notre code ChatGpt d’hier, 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: \n\n'.implode('\n', $commentairesClients),
'max_tokens' => 1000,
]);
return explode('\n',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.
Petit bonus, vous pouvez savoir quand va expirer votre donnée :
$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'
]);
Vous pouvez retrouver le code complet sur github : https://github.com/gponty/sf6-chatGPT