Tu veux intégrer Gemini dans une application PHP sans écrire toi-même le client HTTP de Google ? Le composant Platform de Symfony AI fournit une interface pour envoyer des messages et récupérer une réponse. Ce guide se limite à un premier échange texte, sans agent ni accès à tes données métier.

La vidéo associée date de 2025 et son URL mentionne Gemini 2.5 Pro. Le guide ci-dessous remplace la courte présentation par un exemple fondé sur le dépôt officiel de Symfony AI, avec un modèle configurable. Appel Google documenté, non exécuté : aucun résultat généré ni accès effectif à un modèle n’est garanti ici. Le contrôle local de syntaxe et la construction du client ont été exécutés avec PHP 8.4.26, le bridge Gemini 0.14.0 et Platform 0.14.1 : php -l chat.php n’a signalé aucune erreur et Factory::createPlatform() a construit un objet Platform avec une valeur factice, sans requête réseau.

1. Préparer PHP, Composer et la clé Google

Prévois PHP 8.2 ou une version compatible avec les dépendances résolues par Composer, Composer 2 et un accès sortant HTTPS. Tu peux commencer dans un répertoire séparé : l’exemple utilise le composant seul et ne nécessite pas de contrôleur Symfony.

mkdir gemini-php
cd gemini-php
composer require 'symfony/ai-gemini-platform:^0.14' symfony/http-client
composer check-platform-reqs

La branche 0.14 est le périmètre de l’exemple officiel utilisé ici.[1] Conserve le fichier de verrouillage généré. Ne force pas une installation avec une option ignorant les exigences de PHP : corrige l’environnement si Composer refuse les dépendances.

Crée ensuite une clé dans Google AI Studio en suivant la procédure officielle des clés API. Une clé doit rester côté serveur, jamais dans un bundle JavaScript, un dépôt Git ou une capture d’écran.[3] Dans ton terminal, lis-la sans l’afficher :

read -rs -p 'Clé Gemini : ' GEMINI_API_KEY
export GEMINI_API_KEY
printf '\n'

Cette commande est destinée à Bash. Sur ton hébergement, utilise le gestionnaire de secrets ou les variables d’environnement du service, pas une clé collée dans le fichier PHP.

2. Choisir un modèle réellement accessible

Ne reprends pas un identifiant de modèle uniquement parce qu’il apparaît dans une ancienne vidéo. Google indique que l’accès aux modèles 2.5 est limité aux utilisateurs qui les ont déjà utilisés, et recommande des modèles plus récents pour les nouveaux projets.[2] Consulte la page des dépréciations avant de choisir.

Renseigne un identifiant disponible pour ton projet :

export GEMINI_MODEL='identifiant-du-modele-accessible'

La valeur ci-dessus est un emplacement à remplacer, pas un modèle Google. Si ton projet a encore accès à Gemini 2.5 Pro, son identifiant est gemini-2.5-pro.[2] La disponibilité du modèle et sa prise en charge par ta version du bridge sont deux vérifications distinctes : si tu changes de génération de modèle, consulte aussi les mises à jour de Symfony AI.

3. Écrire le premier appel

Crée chat.php. Ce code adapte le premier échange Gemini du dépôt Symfony AI : clé et modèle viennent de l’environnement, et les préconditions sont contrôlées avant l’appel.[1]

<?php

require __DIR__.'/vendor/autoload.php';

use Symfony\AI\Platform\Bridge\Gemini\Factory;
use Symfony\AI\Platform\Message\Message;
use Symfony\AI\Platform\Message\MessageBag;
use Symfony\Component\HttpClient\HttpClient;

$key = getenv('GEMINI_API_KEY');
$model = getenv('GEMINI_MODEL');

if (!$key || !$model) {
    throw new RuntimeException('Configure la clé et le modèle Gemini.');
}

$platform = Factory::createPlatform($key, HttpClient::create());
$messages = new MessageBag(
    Message::forSystem('Réponds en français, en trois phrases maximum.'),
    Message::ofUser('À quoi sert le conteneur de services de Symfony ?'),
);

$result = $platform->invoke($model, $messages);
echo $result->asText().PHP_EOL;

Lance ensuite :

php -l chat.php
php chat.php

Résultat attendu, non observé ici : le premier contrôle confirme la syntaxe, puis le script affiche une réponse texte si la clé, le modèle et la connexion sont valides. Le texte n’est pas déterministe : vérifie sa pertinence, pas une formulation exacte. Un succès de syntaxe ne valide ni la clé ni l’appel distant.

4. Diagnostiquer sans divulguer les secrets

En cas d’échec, commence par la catégorie du problème :

  • Dépendance ou classe absente : vérifie vendor/autoload.php, le répertoire courant et les paquets installés.
  • Clé ou autorisation refusée : contrôle le projet Google associé et les restrictions de la clé.[3]
  • Modèle indisponible : vérifie son nom et son état dans la documentation, sans supposer qu’un ancien identifiant reste accessible.[2]
  • Quota ou service temporairement indisponible : traite l’erreur dans ton application et évite une boucle de relance sans limite.

Ne journalise ni la clé ni le prompt complet s’il contient des données personnelles. Pour ce premier test, garde une question publique et sans information sensible.

5. Passer du script à Symfony

Une fois l’appel validé sur ton environnement, encapsule le client dans un service injecté dans ton application. Garde l’appel réseau hors du template et ajoute une gestion d’erreur adaptée à l’utilisateur. Ce tutoriel ne met pas en place la configuration du bundle AI, les outils d’un agent ou une conversation persistante.

Pour donner à un client IA des capacités côté application, poursuis avec le serveur MCP Symfony. Tu peux aussi regarder la vidéo associée pour son contexte d’origine, en tenant compte du changement de disponibilité des modèles.

Sources

[1] https://github.com/symfony/ai/blob/v0.14.1/examples/gemini/chat.php [2] https://ai.google.dev/gemini-api/docs/deprecations [3] https://ai.google.dev/gemini-api/docs/api-key