Déployez un ChatGPT personnalisé basé sur PHP

bannière déployez un chatgpt PHP

Depuis l’année dernière, OpenAI est sur le devant de la scène avec ses larges modèles de langage (LLM), notamment GPT-3.5 et GPT-4, accessibles via son service ChatGPT. Mais ils sont également proposés sous la forme d’une API, que vous pouvez utiliser dans vos applications. Voici un exemple de la manière d’en profiter sur Clever Cloud.

Nous nous baserons sur le projet open source chat-wtf, créé par Unconventional Coding qui a détaillé les différentes étapes de sa conception dans une série de vidéos. Il se repose principalement sur le langage PHP et un stockage des données via des sessions, SQLite ou MySQL, au choix de l’utilisateur.

Un ChatGPT open source, utilisable à la demande

Il nécessite d’utiliser l’API d’OpenAI, mais vous pouvez lui préférer des modèles compatibles si vous êtes plus aventureux. Le fichier de paramètres permet également de préciser un « message système ». Ainsi, vous pouvez fournir à l’IA des informations sur vous ou vos attentes, qu’elle devra prendre en compte dans ses réponses.

Cette application PHP n’a pas été développée d’une manière spécifique pour Clever Cloud, mais vous pouvez l’héberger dans nos infrastructures en quelques minutes, la configurer selon vos besoins, l’arrêter et le démarrer à la demande. On vous explique comment faire.

Pour commencer, vous devrez disposer d’un compte Clever Cloud, ainsi que d’une clé d’API OpenAI. Vous pouvez créer l’application et suivre ce guide en utilisant notre interface web, la Console, mais aussi à travers notre CLI open source : Clever Tools. C’est ce que nous ferons ci-dessous.

Récupération du code et configuration

Nous partirons ainsi du principe que vous disposez d’une machine avec git et Node.js dans une version récente. Si vous n’avez pas encore installé les Clever Tools sur votre système, tapez (avec les droits administrateur de votre système ou sudo si nécessaire) :

npm i -g clever-tools
clever login

Une fois connecté, vous pourrez vérifier que tout s’est bien passé avec la commande suivante :

clever profile

Ensuite, vous pourrez créer un fork de chat-wtf pouvant être déployé sur Clever Cloud depuis votre compte GitHub. Dans cet exemple, nous allons cloner le dépôt localement et y créer une application Clever Cloud. Un remote nécessaire à son déploiement sera automatiquement ajouté :

git clone https://github.com/unconv/chat-wtf.git && cd chat-wtf
clever create -t php chat-wtf

Ainsi, vous disposez d’une copie locale de la dernière version de l’application chat-wtf, que vous pouvez configurer selon votre besoin. Renommez le fichier settings.sample.php en settings.php. Nous allons opérer des modifications mineures pour commencer.

Placez-y le contenu suivant afin d’utiliser des variables d’environnement :

<?php
return [
    "api_key" => getenv("OPENAI_API_KEY"),
    "system_message" => getenv("SYSTEM_MESSAGE"),
    "model" => "gpt-3.5-turbo",
    "base_uri" => "",
    "storage_type" => "session",
];

Éditez le fichier .gitignore afin d’en retirer settings.php pour qu’il puisse être déployé avec votre application. Celle-ci étant configurée, il ne reste plus qu’à indiquer les variables d’environnement nécessaires à son bon fonctionnement, puis à la déployer. Notez que PHP 8.x est requis. Nous utiliserons la branche 8.2 :

clever env set CC_PHP_VERSION "8.2"
clever env set OPENAI_API_KEY "Votre clé d'API OpenAI"
clever env set SYSTEM_MESSAGE "Votre message système"
git add . && git commit -m "First deploy"
clever deploy && clever open

Une fois les variables d’environnement ajoutées, nous effectuons un simple Git Push. L’application est alors déployée sur Clever Cloud, une archive est créée afin de faciliter son redéploiement, puis elle est ouverte dans votre navigateur si tout s’est bien passé :

Chat WTF on Clever Cloud

Comme pour toute application hébergée au sein de notre service, vous pouvez lui attribuer simplement un domaine qui bénéficiera de notre load balancer Sōzu et d’un certificat Let’s Encrypt, connaître son statut et son activité, l’arrêter ou la redémarrer.

Vous disposez dans la Console de métriques et d’un accès à un dashboard Grafana afin de suivre son état. Vous pouvez également adapter la taille de l’ instance ou activer l’auto-scalabiilté pour répondre à différents niveaux de charge :

clever console

clever domain
clever domain add domain.tld

clever status
clever activity

clever scale --min-instances 1 --max-instances 4 --min-flavor pico --max-flavor M
clever scale --instances 1 --flavor pico

clever restart
clever stop

Ajoutons une base de données à notre instance chat-wtf

Comme indiqué précédemment, ce projet peut stocker ses données au sein de sessions PHP, mais également via SQLite ou MySQL. Dans cet exemple, nous opterons pour la dernière solution afin de vous montrer comment procéder, là aussi de manière très simple.

Tout d’abord créons une base de données (BDD) MySQL au sein de votre compte Clever Cloud en la liant directement à votre application. Par défaut il s’agit d’une instance DEV, partagée et gratuite, mais vous pouvez demander un plan de taille supérieure si vous le désirez :

clever addon create mysql-addon chat-wtf-mysql --link chat-wtf

Ce « lien » permet d’injecter directement les paramètres de connexion dans l’application via des variables d’environnement. Elles sont visibles dans la Console ou via les Clever Tools :

clever env

Ainsi, il suffit de modifier le fichier settings.php comme suit pour l’utiliser :

    "storage_type" => "sql",
    "db" => [
        "dsn" => "mysql:host=" . getenv('MYSQL_ADDON_HOST') . ";
                    port=" . getenv('MYSQL_ADDON_PORT') . ";
                    dbname=" . getenv('MYSQL_ADDON_DB'),
        "username" => getenv('MYSQL_ADDON_USER'),
        "password" => getenv('MYSQL_ADDON_PASSWORD'),
    ],

Rendez-vous ensuite dans le dashboard de cette base MySQL, accessible via la Console. Vous y trouverez un lien vers son interface PHPMyAdmin. En cliquant sur le nom de la base de données dans le menu de gauche vous trouverez la fonction d’import. Elle vous permettra d’initier la structure de la BDD en y important le fichier mysql.sql qui se trouve dans le dossier db du dépôt. Indiquez son emplacement, cliquez sur « Importer ». Ce sera fait :

MySQL Import

Vous pouvez également le faire via un script Shell qui vérifie si la base de données est vide, et importe les données par défaut si nécessaire. Créez un fichier nommé init.sh contenant ce code :

SSE="SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='$MYSQL_ADDON_DB';"
PARAMS="-u $MYSQL_ADDON_USER -h $MYSQL_ADDON_HOST -P $MYSQL_ADDON_PORT -D $MYSQL_ADDON_DB"

TABLE_COUNT=$(MYSQL_PWD=$MYSQL_ADDON_PASSWORD mysql $PARAMS -sse"$SSE")

if [ "$TABLE_COUNT" -eq 0 ]; then
  echo "Database is empty, we fill it with the default data."
  MYSQL_PWD=$MYSQL_ADDON_PASSWORD mysql $PARAMS < db/mysql.sql 
  
else
  echo "Database contains $TABLE_COUNT tables."
fi

rm init.sh

Vous devrez le lancer lors du déploiement de l'application :

clever env set CC_PRE_BUILD_HOOK "bash init.sh"

Vous n'avez alors plus qu'à redéployer votre application qui utilisera désormais la base de données MySQL pour stocker ses données plutôt que les sessions PHP :

git add settings.php && git commit -m "Add MySQL support"
clever deploy && clever open

Si jamais cela ne fonctionne pas, regardez les erreurs dans les logs de votre instance dans la Console ou via :

clever logs

Envie d'en savoir plus ?

Pour découvrir plus en détails l'hébergement d'applications PHP sur Clever Cloud ou nos services de bases de données managées ? Venez nous rencontrer au PHP Forum qui se tient du 12 au 13 octobre à Disneyland Paris. Nous serons également présents à Devoxx Maroc et à Volcamp :

Blog

À lire également

Notre nouvelle interface de logs est disponible en bêta publique

Notre nouvelle interface de logs est désormais disponible en bêta publique, venez la tester dès aujourd'hui !
Entreprise

Métriques : archiver des milliards de points chaque mois

Les métriques sont essentielles à notre fonctionnement. Avec une croissance de 2 To/semaine, il nous a fallu trouver une solution d'archivage automatisée.
Engineering

Déployer depuis GitLab ou GitHub

Déployer depuis GitHub ou GitLab vers Clever Cloud et peaufiner vos CI/CD.
Engineering