Ajouter un peu de GenAI dans mon app mobile

Bienvenue en 2025. La GenAI est toujours à la mode et elle s’intègre de plus en plus dans notre quotidien. Mais qu’en est-il de notre poche ? Oui, vous savez, on y glisse nos smartphones - un autre truc qui a eu son moment de gloire il y a quelques années, et avec lequel on est maintenant inséparable.

On a envie d’associer les deux, d’avoir notre IA de poche. En tant que créateur d’applications mobiles (Product Owner, Développeur, Designer), on peut y participer !

J’en profite pour expliciter les différentes interactions qu’il peut y avoir avec l’IA sur un smartphone :

  • Un utilisateur peut jouer avec l’IA du système qui est intégré dans divers composants pour par exemple reformuler une phrase, générer une image, faire une action, etc. Le développeur n’a pas la main dessus, c’est le système qui gère.
  • Le développeur peut apprendre à l’IA du système comment interagir avec son application, en exposant certaines données et intentions. L’utilisateur pourra par exemple lancer une action réalisée par l’application via Siri.
  • Le développeur peut créer des fonctionnalités boostées à l’IA au sein de son application. L’utilisateur pourra s’en servir depuis l’application.

Aujourd’hui, on va se concentrer sur le dernier cas : créer des fonctionnalités augmentées par de la GenAI. On va se donner un aperçu de ce que l’on pourrait faire dans nos applications et des options pour y arriver.

Quelques exemples d’usages

Ce que l’on voit le plus souvent, ce sont des fonctionnalités qui manipulent un contenu textuel déjà présent. On propose de résumer l’article actuellement affiché dans une application de news, par exemple. On pourrait aussi sélectionner un paragraphe et demander plus d’explications. Ou même traduire. On peut également proposer à l’utilisateur d’améliorer le contenu qu’il a créé - il pourrait reformuler, corriger, compléter.

Générer du contenu grâce aux données personnalisées est un autre usage intéressant. Une application de liste de courses pourrait par exemple proposer des idées de recette en fonction des aliments ajoutés par l’utilisateur. Peut-être même que des recommandations pourraient apparaître autour de la nutrition.

Et pourquoi pas un champ de texte voire un chat pour trouver et utiliser des fonctionnalités existantes dans l’application ? Sur une application complexe avec beaucoup de pages et de profondeur, ce pourrait être pratique. L’utilisateur pourrait demander de “réserver un aller-retour à Valence pour demain” ou “envoyer 100€ à ma mère” avec ses propres mots.

De nombreuses possibilités existent aussi du côté des jeux. En faisant varier des dialogues, ou en les créant pleinement. En générant des niveaux, des parties, des quiz. Peut-être même que l’utilisateur pourrait indiquer un thème, non prévu initialement, et le modèle d’IA ferait le reste. On commence tout juste à gratter la surface, à imaginer de nouveaux usages.

État des lieux

Les innovations et les possibilités qui tournent autour de l’IA vont vite (sauf chez Apple, qui a à la fois du retard et un cycle de release long - petite balle perdue gratuite :)). Où en est-on aujourd’hui ?

Commençons du côté de la pomme. Le flagship actuel est l’iPhone 16 Pro. iOS est en version 18.2.1. Apple Intelligence est disponible à partir de iOS 18.1 sur l’ensemble des modèles d’iPhone 16, ainsi que le 15 Pro et le 15 Pro Max. En Europe, on doit cependant attendre le mois d’avril pour accéder au système Apple Intelligence.

Sur Android, la dernière version est actuellement la 15 (API 35). Gemini est l’actuel modèle d’IA de Google, et d’autres constructeurs comme Samsung ajoutent aussi leur propre couche d'intelligence (Galaxy IA). Certains smartphones récents ont le droit à Gemini nano pour une exécution locale : c’est à partir du Google Pixel 8 Pro et Samsung S24, et d’autres appareils s’ajoutent progressivement.

Les deux systèmes proposent bien aux utilisateurs des fonctionnalités augmentées par l’IA. Mais côté développement, on est très limité pour créer. iOS ne propose que les App Intents pour faire découvrir nos applications à Siri et Spotlight. Et sur Android, Gemini nano est au stade expérimental. Il y a très peu d’appareils compatibles et les possibilités sont limitées.

À côté de cela, on voit d’autres solutions légères qui émergent pour être exécutées sur un smartphone. On trouve par exemple les ensembles de modèles Gemma de Google, Phi de Microsoft ou encore Llama de Meta. Ces trois familles de modèles sont d’ailleurs open-source. Plus étonnant, on trouve également des outils comme PicoLLM qui permettent de compresser les modèles !

Évidemment, tout ce que je raconte au-dessus changera avec le temps. Il y aura de nouveaux appareils, des nouvelles versions d’OS, des LLMs, etc. Un prochain rendez-vous que l’on peut prévoir : mai et juin pour les keynotes d’Apple et de Google, puis quelques temps après la sortie des nouvelles majeures d’OS.

Comment avoir accès à un modèle ?

Actuellement, pour créer des fonctionnalités augmentées par l’IA dans une application mobile, il faut interagir avec un modèle. On va créer des prompts adaptés à nos cas d’utilisations puis interpréter la réponse. Une réponse que l’on aura forcée dans un standard (du JSON par exemple).

Pour que notre application communique avec un modèle, nous avons plusieurs options.

Via notre serveur et une API tierce

C’est actuellement un des choix les plus répandus et les plus efficaces. Les applications mobiles ont déjà l’habitude de discuter avec des serveurs, on aura simplement de nouvelles routes pour obtenir des inférences. Notre serveur fait la passerelle vers OpenAI par exemple, et ce sont ces derniers qui hébergent le modèle.

Les intérêts sont multiples. On peut cibler tous les appareils (puissant ou entrée de gamme, récent ou vieux) et tous les systèmes (Android, iOS) peu importe la version (la toute dernière comme la plus vieille). Eh oui, il ne s’agit là que de requêtes HTTP et de stream de données.

On s’assure au passage d’avoir le même comportement entre les différents appareils et systèmes, puisque c’est le même modèle qui est utilisé en bout de chaîne. Les règles métiers et prompts sont aussi partagées. On pourra facilement et rapidement les modifier à distance sans mettre à jour les applications mobiles.

D’ailleurs, on peut changer le modèle utilisé par un autre (une nouvelle version ou un concurrent) sans devoir redéployer notre application. Tout comme on pourrait utiliser plusieurs modèles en parallèle.

Le coût sera cependant élevé. La charge principale viendra de l’utilisation d’un service tiers comme OpenAI. Le coût augmentera selon deux vecteurs : le nombre d’utilisateurs et le nombre d’usages. En effet, les API tiers facturent au nombre de token généré pour l’utilisation de leurs LLMs.

C’est d’autant plus important que notre serveur agisse en tant qu’intermédiaire : une communication directe entre les applications et le service tier impliquerait d'exposer en public nos clés d’APIs. Il serait alors très facile pour une personne d’utiliser nos clés, augmentant ainsi notre facture.

Quelques solutions : OpenAI, Anthropic, Gemini. On peut ajouter Firebase qui est une rare solution à proposer un accès direct (sans serveur) sécurisé à une LLM (Gemini en l’occurrence).

Via notre serveur qui héberge un modèle

Le second choix qui est également très répandu est celui d’héberger soi-même un modèle sur nos serveurs. On garde ainsi les avantages de passer par notre serveur (compatibilités avec tous les appareils, facilité de changement du modèle, utilisation de plusieurs modèles, …) tout en ayant plus de contrôle.

Un des aspects les plus intéressant concerne les données. En hébergeant un modèle open-source, on s’assure un meilleur contrôle sur nos données et la manière dont elles sont utilisées, et surtout par qui.

Le coût sera aussi maîtrisé différemment. Exit un prix au token via une API tierce, cette fois on paie l’hébergement du modèle.

Maintenant, comment choisir entre utiliser une API tierce et héberger un modèle ? Quelques insight possibles pour décider :

  • passer par une API tierce pour prototyper rapidement, quand on est une petite entreprise, qu’il n’y a pas de données confidentielles.
  • héberger un modèle quand on est une plus grande entreprise, quand on veut mieux contrôler l’usage des données.

Quelques solutions : Mistral qui est open-source et français, se balader sur le marketplace de Hugging Face.

En local avec les solutions natives

Il existe aujourd’hui des modèles plus légers qui peuvent fonctionner sur nos ordinateurs et nos téléphones, et certains appareils les intègrent par défaut. On peut donc les utiliser directement pour faire des inférences « __on-device__ ».

Il y a plusieurs avantages à cette exécution locale. Premièrement, le coût. Il n’y en a tout simplement pas. Pas besoin de payer un service tiers ou d’héberger une solution existante, le modèle est déjà présent sur le téléphone. En fait, c’est l’utilisateur qui porte le coût : c’est la puissance de son smartphone, via sa puce et sa batterie, qui réalisera toutes les opérations. On pensera alors à ménager sa batterie.

Deuxièmement, la confidentialité. Le modèle étant sur l’appareil, les données sensibles n’ont pas besoin de transiter sur internet ou d’être lues par un serveur tiers. C’est une des promesses phares de ces modèles. On restera méfiant tout de même s’il faut utiliser des données très sensibles - l’inférence est peut-être locale, mais des logs et données pourraient très bien remonter à des serveurs.

La rapidité est un potentiel troisième avantage. L’inférence locale s’oppose à une inférence sur un serveur distant qui nécessite des aller-retour sur internet. La communication réseau prenant du temps, on tient là un gain intéressant. Je parlerais d’ailleurs plutôt de meilleure latence de réponse. D’une certaine manière, les serveurs d’OpenAI (par exemple) sont bien plus puissants que les puces de nos smartphones. Ce n’est pas l’inférence qui est plus rapide, mais plutôt le délai pour obtenir les réponses (grâce à des étapes en moins) - à condition bien sûr d’avoir un smartphone haut de gamme.

Tient-on alors la solution parfaite ? Aujourd’hui en tout cas, on en est loin. On est très limité en termes de cibles compatibles. Il n’y a rien sur iOS, Apple ne permet pas de prompter avec son Apple Intelligence. C’est réalisable seulement sur Android, et même là, les smartphones disposant d’une solution intégrée (Gemini Nano) sont peu nombreux, récents, et chers. Le pourcentage d’utilisateurs que l’on pourrait atteindre est faible.

C’est également toujours marqué par Google comme expérimental, et selon les smartphones, le modèle n’est pas pleinement intégré par défaut, il faut effectuer quelques actions.

Un point d’attention qu’il faudra garder en tête le jour où les modèles embarqués seront plus répandus : leurs différences. Apple et Google proposeront chacun leurs solutions, et il sera difficile (impossible ?) de reproduire avec certitude les mêmes comportements.

scope.launch {
  // Single string input prompt
  val input = "I want you to act as an English proofreader. I will provide you
    texts, and I would like you to review them for any spelling, grammar, or
    punctuation errors. Once you have finished reviewing the text, provide me
    with any necessary corrections or suggestions for improving the text: These
    arent the droids your looking for."
  val response = generativeModel.generateContent(input)
  print(response.text)

  // Or multiple strings as input
  val response = generativeModel.generateContent(
  content {
    text("I want you to act as an English proofreader. I will provide you texts
      and I would like you to review them for any spelling, grammar, or
      punctuation errors.")
    text("Once you have finished reviewing the text, provide me with any
      necessary corrections or suggestions for improving the text:")
    text("These arent the droids your looking for.")
    }
  )
  print(response.text)
}

En local avec un modèle à intégrer

En attendant qu’une grande majorité des appareils Android et iOS embarquent au sein de leurs systèmes des modèles accessibles aux développeurs, une solution pour avoir une exécution locale serait d’intégrer soi-même un modèle existant dans l’application.

Ainsi, on peut théoriquement cibler bien plus d’appareils et de systèmes / versions ; tant que ceux-ci sont assez puissants. On garderait alors la plupart des avantages d’une inférence locale : la rapidité sur les bons appareils, la confidentialité, et le coût réduit.

Réduit, mais pas inexistant. Le modèle n’étant pas embarqué dans le système de l’appareil, il faut le rendre téléchargeable… et donc l’héberger. On aura un coût de stockage et de bande passante. La bonne nouvelle, c’est que le téléchargement ne doit se faire qu’une seule fois par l’utilisateur au moment où l’application en aura besoin. Chaque usage sera ensuite totalement local et n’aura pas d’impact sur les coûts.

Cette contrainte a un second désavantage : elle requiert un effort pour l’utilisateur. Il devra télécharger un modèle. Même si l’application fait tout le travail, l’utilisateur va devoir patienter - un modèle étant lourd. Il devra aussi réserver de la place sur son appareil pour stocker ce modèle. Modèle qui ne fonctionnera que sur cette application.

Imaginons que plusieurs applications optent pour cette solution, cela représenterait des gigaoctets de téléchargement et de stockage. Ce n’est pas viable.

Quelques solutions : Gemma de Google, Phi de Microsoft, Llama de Meta. PicoLLM pour la compression.

final gemma = FlutterGemmaPlugin.instance;

// Async response
String response = await gemma.getResponse(prompt: 'Tell me something interesting');
print(response);

// Stream response
gemma.getAsyncResponse(prompt: 'Tell me something interesting').listen((String? token) => print(token));

En bref

Les LLMs ne sont plus seulement utilisés à travers des applications de chat où l’utilisateur écrit des prompts. On est dans une phase d’exploration où beaucoup de possibilités restent à être imaginée et testée, mais des premiers usages existent déjà au sein d’applications mobiles.

Et cela va très vite. Les idées fusent, les PoC se multiplient, et les appareils avec des modèles on-device vont se répandre. Les fonctionnalités augmentées par l’IA pourraient devenir un incontournable. Il nous est déjà possible d’en créer, il ne tient qu’à nous d’explorer.