Hasina Razafintsalama

Hasina RAZAFINTSALAMA

← Retour au Blog
AI & RAG

Intégrer un chatbot IA dans une application Laravel ou Symfony

Ajouter un chatbot IA à une application PHP existante ne veut pas dire réécrire son backend en Python. Voici une architecture concrète pour brancher un LLM sur Laravel ou Symfony sans complexité inutile.

2026-07-27·8 min

La plupart des tutoriels sur les chatbots IA supposent un backend Python. En réalité, la majorité des applications métier tournent sur Laravel ou Symfony, et il n'y a aucune raison de les réécrire pour ajouter une fonctionnalité de chat. Le LLM vit derrière une API, votre backend PHP existant reste le point d'entrée.

Architecture : où vit le LLM

Deux options réalistes. La première : appeler directement l'API d'un fournisseur (OpenAI, Anthropic, Mistral) depuis Laravel/Symfony via HTTP,le plus simple, aucune infrastructure IA à gérer. La seconde : passer par un micro-service Python dédié (FastAPI) quand la logique RAG devient complexe,découplage propre, mais un service de plus à opérer.

php
// app/Services/ChatService.php
final class ChatService
{
    public function __construct(private readonly Http $http) {}

    public function ask(string $question, array $history = []): string
    {
        $response = Http::withToken(config('services.anthropic.key'))
            ->withHeaders(['anthropic-version' => '2026-01-01'])
            ->post('https://api.anthropic.com/v1/messages', [
                'model' => 'claude-sonnet-5',
                'max_tokens' => 1024,
                'messages' => [...$history, ['role' => 'user', 'content' => $question]],
            ]);

        return $response->json('content.0.text');
    }
}

Streamer la réponse plutôt que d'attendre

Un appel LLM peut prendre plusieurs secondes. Attendre la réponse complète avant d'afficher quoi que ce soit dégrade l'expérience,streamer les tokens au fur et à mesure via Server-Sent Events (SSE) donne une sensation de réactivité immédiate, même si la génération complète prend le même temps.

  • Laravel : `response()->stream()` avec un flush après chaque chunk reçu du LLM.
  • Symfony : `StreamedResponse`, même principe,écrire dans le buffer de sortie au fil de la réception.
  • Frontend : consommer le flux via `EventSource` ou `fetch` avec un `ReadableStream`, pas de polling.

Contexte métier : le vrai travail n'est pas le LLM

Le plus gros du travail n'est pas d'appeler l'API du modèle,c'est de lui donner le bon contexte. Injecter les données pertinentes de l'application (historique client, catalogue produit, documentation interne) dans le prompt, ou brancher une recherche vectorielle légère (pgvector, directement dans PostgreSQL, sans service supplémentaire) avant d'appeler le LLM.

Ne donnez jamais au LLM un accès direct en écriture à votre base de données via des function calls non validés. Toute action destructive (annuler une commande, supprimer un compte) doit repasser par votre couche métier existante avec ses propres règles de validation,le LLM propose l'action, votre code l'exécute ou la refuse.

Coût, latence et fallback

  • Mettre en cache les réponses aux questions fréquentes,inutile de repayer un appel LLM pour la même question posée cent fois.
  • Toujours prévoir une réponse de repli (FAQ statique, formulaire de contact) si le LLM timeout ou échoue.
  • Suivre la consommation de tokens par utilisateur pour éviter les mauvaises surprises de facturation à l'échelle.

Un chatbot IA bien intégré dans du Laravel ou du Symfony existant n'ajoute qu'une fine couche,un service HTTP, un endpoint de streaming, un peu de contexte métier. Le reste de votre architecture, votre authentification, votre base de données, vos règles métier, reste inchangé.

Besoin d'aide sur ce sujet ? Intégration IA & RAG

Découvrir ce service