Chatbot recommandation film argentique: Making-of

Logo Debian — Linux, le système qui fait tourner le chatbot pellicule argentique

Il y a quelques mois, j’ai eu une idée un peu folle: et si les clients qui entrent dans mon studio pouvaient utiliser un chatbot de recommandation film argentique pour choisir leur pellicule, exactement comme ils me le demanderaient à moi ?

Mon site référence plus de 570 pellicules argentiques. Autant de films avec leurs caractéristiques propres: sensibilité, grain, rendu des couleurs, contraste, usage recommandé. Une base de données riche, mais statique. Un moteur de recherche classique ne suffit pas pour répondre à une question comme « j’ai un appareil jetable et je pars en vacances au soleil, qu’est-ce que tu me conseilles ? »

Alors j’ai construit un chatbot recommandation film argentique. Local, open source, intégré directement dans WordPress. Voici comment.

Le point de départ: pourquoi pas ChatGPT ou l’API Anthropic ?

La première version du chatbot utilisait effectivement l’API Anthropic (Claude). Ça fonctionnait, mais ça posait deux problèmes concrets:

  • Le coût: chaque requête consomme des tokens, et sur un site public avec un volume de visiteurs imprévisible, la facture peut grimper vite.
  • La dépendance: si l’API est en panne, le service l’est aussi. Et les données de mes clients transitent par un serveur tiers.

J’ai donc basculé vers une solution 100% locale: Ollama, un outil qui permet de faire tourner des modèles de langage open source directement sur sa propre machine, sans aucune connexion à un cloud externe.

L’architecture: une machine dédiée, un modèle local

Le chatbot tourne sur une machine séparée de mon serveur web: un PC équipé d’une NVIDIA RTX 3070 (8 Go de VRAM), dédié exclusivement à l’inférence IA. Le serveur WordPress est lui sur un autre Debian maison.

Le modèle choisi: Qwen2.5 7B, un modèle de 7 milliards de paramètres développé par Alibaba, disponible via Ollama. Pourquoi Qwen2.5 plutôt que Llama ou Mistral ? Essentiellement pour ses performances en français et sa capacité à suivre des instructions structurées, utile quand on veut qu’il réponde avec une recommandation précise plutôt qu’un paragraphe vague.

La communication entre WordPress et la machine IA se fait en local, via l’API REST d’Ollama exposée sur le réseau interne. Aucun paquet ne sort du réseau local.

Un détail qui a son importance: Linux, pas Windows

La machine qui fait tourner tout ça est sous Debian Linux. Pas Windows.

Ce n’est pas un détail anodin, c’est même la condition sine qua non pour que le projet soit pris au sérieux.

Faire tourner Ollama sous Windows, c’est techniquement possible. Faire du vélo en talons aiguilles aussi. Dans les deux cas, on avance, mais on souffre inutilement, on attire des regards inquiets, et on finit par se demander pourquoi on s’est infligé ça alors que la solution évidente existait depuis le début.

Sous Windows, pour faire tourner des outils Linux, Microsoft a eu la brillante idée d’intégrer WSL2 : un sous-système Linux émulé à l’intérieur de Windows. Autrement dit, ils ont reconnu que Linux était nécessaire, car plus performant et efficace, mais plutôt que de s’effacer gracieusement, ils ont décidé de le faire tourner en cage dans leur propre système. C’est l’équivalent informatique d’un restaurant qui ne sait pas cuisiner, mais qui commande des plats chez le voisin et les ressert dans ses propres assiettes en faisant semblant.

Mais le vrai problème de Windows, ce n’est pas la performance. C’est la confiance, ou plutôt son absence totale.

Microsoft est une entreprise dont le modèle consiste, entre autres, à aspirer silencieusement vos données via Telemetry, à vous forcer à créer un compte en ligne pour utiliser votre propre ordinateur, et à vous proposer régulièrement Bing, Edge, et OneDrive comme si vous n’aviez pas déjà dit non trois fois. Windows 11 a même introduit Recall, une fonctionnalité qui fait des captures d’écran de tout ce que vous faites toutes les quelques secondes pour « vous aider à retrouver vos souvenirs ». L’intention affichée est la productivité. L’effet réel est une caméra de surveillance installée sur votre propre machine par votre propre système d’exploitation. On appelle ça de l’aide. On pourrait aussi appeler ça autrement.

Dans ce contexte, faire tourner un chatbot « confidentiel » sur une machine Windows, c’est poser un coffre-fort dans une pièce dont quelqu’un d’autre possède un double de la clé, et qui passe régulièrement vérifier le contenu « pour améliorer votre expérience ».

Et puis il y a les virus. Windows concentre l’écrasante majorité des malwares, ransomwares et autres logiciels malveillants qui circulent sur internet. Non pas parce que les utilisateurs Windows sont moins prudents, mais parce que c’est là que les attaquants concentrent leurs efforts, là où la surface d’attaque est la plus large et la plus lucrative. Un serveur d’inférence sous Windows exposé sur un réseau local, c’est une invitation permanente.

Sous Debian, rien de tout ça. Ollama s’installe en une commande. Les drivers NVIDIA sont stables. Le système démarre sans vous demander si vous voulez essayer le nouveau navigateur Microsoft. Personne ne capture votre écran. Personne ne redémarre la machine au milieu d’une inférence pour installer une mise à jour de l’application Météo. Et la surface d’attaque est infiniment plus réduite.

Pour de l’inférence locale en production, même à petite échelle, même chez soi, Linux n’est pas un choix idéologique. C’est juste le choix de quelqu’un qui préfère que sa machine et ses données lui appartiennent vraiment.

(Cela dit, si vous tenez à votre fond d’écran par défaut bleuté et à vos notifications toutes les dix minutes pour vous rappeler que le stockage OneDrive est « presque plein », faites comme vous voulez. Chacun son niveau de tolérance à la douleur.)

La pièce centrale : les embeddings et la recherche RAG

C’est la partie la plus intéressante techniquement, et la moins visible pour l’utilisateur.

Un modèle de langage comme Qwen2.5 ne « connaît » pas ma base de 570 pellicules. Je ne peux pas lui coller tout le catalogue dans le contexte à chaque requête (trop lourd, trop lent). La solution: le RAG (Retrieval-Augmented Generation), qui fonctionne en deux temps.

Étape 1 — Indexation

Chaque fiche pellicule du site (nom, marque, sensibilité, procédé, description, usage recommandé, tous les champs ACF) est convertie en un vecteur numérique grâce à un modèle d’embeddings: nomic-embed-text, également hébergé localement via Ollama. Ce vecteur capture le « sens » de la fiche plutôt que ses mots exacts. Les 570 vecteurs sont stockés dans une base vectorielle.

Étape 2 — Requête

Quand un utilisateur pose une question (« pellicule pour portrait en intérieur avec un grain marqué »), la question est elle aussi convertie en vecteur. On cherche alors les fiches dont le vecteur est le plus proche: ce sont les pellicules sémantiquement les plus pertinentes. Ces fiches sont ensuite injectées dans le contexte envoyé à Qwen2.5, qui formule la recommandation finale.

En pratique : l’utilisateur pose une question en langage naturel, le chatbot recommandation film argentique récupère les 3 à 5 pellicules les plus pertinentes dans la base, et Qwen2.5 explique pourquoi il les recommande.

L’intégration WordPress: un plugin custom

Le frontend du chatbot est intégré directement dans WordPress via un plugin développé sur mesure, sans dépendance à un service tiers. Il gère:

  • L’interface de chat (une fenêtre flottante sur les pages pellicule)
  • L’envoi de la requête utilisateur vers l’API Ollama locale
  • La réception et l’affichage de la réponse en streaming (les mots apparaissent progressivement, comme dans ChatGPT)
  • Le contexte métier injecté dans chaque prompt: le chatbot sait qu’il est un conseiller pellicule pour un studio photo à Agen, pas un assistant généraliste

Les fiches pellicules elles-mêmes sont un Custom Post Type (CPT) dédié, avec une vingtaine de champs ACF: marque, format, sensibilité ISO, procédé (C-41, E-6, N&B), grain, palette colorimétrique, usage recommandé, disponibilité en boutique… C’est cette richesse de données qui rend les recommandations pertinentes. Vous pouvez explorer l’ensemble du catalogue sur le guide des pellicules argentiques.

Ce que ça donne en pratique

Un visiteur arrive sur la page du guide des pellicules, ouvre le chat et pose une question comme « je débute en argentique, j’ai un budget serré, je veux quelque chose de polyvalent en extérieur ». En quelques secondes, il reçoit deux ou trois suggestions avec une explication adaptée à son niveau, sans avoir à parcourir 570 fiches.

Le tout tourne 24h/24 sur ma machine locale, sans coût variable, sans données qui partent vers un cloud, et sans dépendance à un fournisseur externe. Si le chatbot vous donne envie de vous lancer, les pellicules recommandées sont disponibles en boutique, et on se charge du développement sur place en 24h.

Les limites actuelles

Soyons honnêtes: la solution n’est pas parfaite.

  • La latence peut être légèrement supérieure à une API cloud (2 ou 3 secondes), surtout sur les premières requêtes (chargement du modèle en VRAM).
  • La mise à jour des embeddings doit être déclenchée manuellement quand une fiche pellicule est modifiée ou ajoutée, ce n’est pas encore automatisé.
  • Un modèle 7B reste moins capable qu’un GPT-4 ou Claude Opus sur des questions complexes ou ambiguës.

Mais pour l’usage ciblé (recommander une pellicule parmi un catalogue connu), le rapport qualité/coût/confidentialité est imbattable.

Et pour la suite ?

L’automatisation de la réindexation des embeddings est la prochaine étape. Et pourquoi pas un affinage (fine-tuning) du modèle sur les descriptions pellicule pour améliorer encore la pertinence des recommandations.

FAQ

Le chatbot fonctionne-t-il sans connexion internet ?

Côté serveur, oui, le modèle et les embeddings tournent entièrement en local. L’utilisateur, lui, a besoin d’une connexion pour accéder au site et envoyer ses questions, mais aucune donnée ne transite vers un service cloud externe.

Peut-on utiliser ce type de système sur n’importe quel site WordPress ?

Techniquement oui, à condition de disposer d’une machine capable de faire tourner Ollama (idéalement avec une GPU dédiée). Sur un hébergement mutualisé classique, ce n’est pas envisageable, il faut une infrastructure que l’on contrôle directement.

Pourquoi ne pas utiliser directement ChatGPT ou Claude ?

Ces services fonctionnent très bien, mais impliquent un coût par requête et une dépendance à une API tierce. Pour un usage sur un site public avec un catalogue de données propriétaires, une solution locale offre plus de contrôle, zéro coût variable et une confidentialité totale.

Le chatbot peut-il se tromper dans ses recommandations ?

Oui, comme tout système d’IA. Il peut occasionnellement recommander une pellicule moins adaptée, surtout sur des questions très ambiguës. C’est pourquoi chaque recommandation est accompagnée d’une explication. L’utilisateur reste libre d’affiner sa demande ou de venir en discuter directement en boutique.

Qwen2.5, nomic-embed-text, Ollama: ces outils sont-ils gratuits ?

Entièrement. Ollama est open source, Qwen2.5 et nomic-embed-text sont des modèles disponibles librement. Le seul coût réel est matériel: la machine et la consommation électrique associée.

Le système gère-t-il le français correctement ?

Qwen2.5 a été choisi en partie pour ses bonnes performances en français. Les réponses sont formulées en français, et le modèle comprend les questions posées dans cette langue sans difficulté notable.

Est-ce que ce chatbot pourrait fonctionner pour d’autres catalogues que les pellicules ?

Absolument ! l’architecture RAG + embeddings est générique. Elle s’applique à n’importe quelle base de données structurée: produits, recettes, références techniques… Le catalogue pellicule n’est qu’un cas d’usage parmi d’autres.