Mise en cache de donnees avec Symfony 6

M

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

A propos de l'auteur

Ajouter un commentaire

Guillaume

Get in touch

Je suis un développeur web passionné par les technologies Symfony et ChatGPT. J'aime partager mes connaissances et mon expérience à travers des articles que j'écris sur ces sujets. Avec une solide expertise en développement web, je m'efforce de fournir des contenus utiles et instructifs pour aider les développeurs à créer des applications web de qualité supérieure.