Systèmes d'IA composés
Que sont les systèmes d'IA composés ?
Selon la définition du blog Berkeley AI Research (BAIR), les systèmes d'IA composés sont conçus pour accomplir des tâches d'IA en combinant plusieurs composants en interaction. Ces composants peuvent être des appels à des modèles, des extracteurs ou des outils externes. Les applications de génération augmentée par récupération (RAG), par exemple, sont des systèmes d'IA composés : elles combinent au minimum un modèle et un système d'extraction de données. Les systèmes d'IA composés s'appuient sur la puissance d'un éventail de modèles d'IA, d'outils et de pipelines pour gagner en performance, en polyvalence et en réutilisabilité par rapport à l'utilisation de modèles isolés.
Les nouveaux résultats d'IA proviennent de plus en plus de systèmes composés (source)
Les développeurs élaborent de plus en plus souvent des systèmes d'IA composés pour accomplir les tâches d'IA les plus ambitieuses. Les performances de ces systèmes surpassent généralement celles des modèles isolés, mais notre communauté cherche encore le meilleur moyen de concevoir ces systèmes ainsi que leurs composants.
Pourquoi créer des systèmes d'IA composés ?
- Certaines tâches sont plus faciles à améliorer en misant sur la conception de système : on peut naturellement améliorer les applications d'IA en utilisant des modèles plus vastes et plus puissants, mais on atteint généralement un point où la rentabilité de l'opération baisse au point de devenir négative. De plus, améliorer ou personnaliser un modèle par l'entraînement ou l'ajustement prend beaucoup de temps et coûte très cher. En intégrant d'autres modèles et outils au sein d'un système composé, il devient possible d'améliorer la qualité des applications en dépassant les limites d'un modèle unique, aussi puissant soit-il.
- Les systèmes peuvent être dynamiques : les modèles isolés sont fondamentalement limités par leurs données d'entraînement. Ils apprennent un ensemble déterminé d'informations et de comportements et n'ont pas la possibilité d'effectuer des recherches dans des sources de données extérieures ni d'appliquer des contrôles d'accès. Une approche en système peut ajouter des ressources supplémentaires (base de données, interpréteurs de code, systèmes de permissions, etc.) qui rendent les systèmes d'IA composés bien plus flexibles et dynamiques que les modèles seuls.
- Plus de contrôle et de confiance : il peut être difficile d'amener un modèle isolé à produire des informations factuelles de façon fiable ou de présenter des résultats dans un format cohérent. Il faut généralement rédiger soigneusement les prompts, fournir de nombreux exemples, procéder à des ajustements ou même recourir à des pis-aller, par exemple en suggérant au LLM qu'obtenir une bonne réponse est une question de vie ou de mort. L'orchestration de LLM avec d'autres outils et sources de données peut rendre les systèmes plus fiables. Elle permet de leur fournir des informations exactes provenant de sources externes ou d'utiliser des outils pour mieux appliquer les contraintes de format de sortie.
- Plus de souplesse concernant le rapport qualité-prix : les modèles isolés affichent généralement un niveau de qualité défini pour un coût fixe, mais le rapport qualité-prix obtenu ne répond pas nécessairement à tous les cas d'usage. L'intégration d'outils extérieurs au LLM offre davantage de souplesse dans l'arbitrage entre coût et qualité. Par exemple, un modèle moindre, soigneusement ajusté, combiné à différentes heuristiques de recherches, produira sans doute de bons résultats pour un coût inférieur à des modèles plus importants et performants. À l'inverse, avec un budget plus conséquent, l'apport d'outils et de sources de données externes peut améliorer les performances de modèles déjà très vastes et puissants.
Quelle est l'efficacité des systèmes d'IA composés qui sont développés ?
Les systèmes d'IA composés appartiennent encore à la catégorie des applications émergentes, et les bonnes pratiques qui orientent leur développement et leur utilisation évoluent régulièrement. On peut aborder la création de systèmes d'IA composés de nombreuses façons différentes, chacune ayant ses propres avantages et inconvénients. Par exemple :
- Logique de contrôle : dans un système d'IA composé, une base de code définissant une logique de contrôle peut amener un modèle à accomplir des tâches spécifiques selon certaines conditions. Le système offre alors la fiabilité d'un flux de contrôle programmatique tout en bénéficiant de l'expressivité des LLM. D'autres systèmes peuvent utiliser un LLM pour le flux de contrôle. Cette approche offre la possibilité d'interpréter des entrées et d'agir en fonction, en sacrifiant une partie de la fiabilité. Des outils comme les modèles externes Databricks peuvent faciliter la mise en place d'une logique de contrôle en simplifiant le processus d'acheminement des différentes parties d'une application vers différents modèles.
- Ciblage de l'investissement en temps et en ressources : lorsque l'on développe des systèmes d'IA composés, il n'est pas toujours facile de déterminer s'il vaut mieux consacrer davantage de temps et de ressources à l'amélioration des performances du ou des modèles employés dans le système ou à celle d'autres composants. L'ajustement d'un modèle, voire l'adoption d'un modèle plus puissant de façon générale, peut améliorer la performance d'un système d'IA composé, mais ce sera également le cas avec un système d'extraction de données ou d'autres composants.
- Mesure et optimisation : l'évaluation est un aspect essentiel de tout système impliquant des modèles d'IA, mais l'approche adoptée dépend étroitement de l'application. Une métrique discrète évaluant la performance de bout en bout conviendra idéalement à certains systèmes, tandis que dans d'autres cas, il sera plus utile d'évaluer individuellement les différents composants. Dans une application de RAG, par exemple, il est souvent nécessaire d'évaluer séparément les composants d'extraction et de génération. MLflow offre une approche flexible de l'évaluation, compatible avec de nombreux aspects différents des systèmes d'IA composés, dont l'extraction et la génération.
En dépit de l'évolution rapide des approches, on peut dégager quelques principes fondamentaux pour élaborer des systèmes d'IA composés efficaces :
- Développer un système d'évaluation robuste : les systèmes d'IA composés englobent généralement de nombreux composants en interaction, et la moindre modification localisée peut affecter les performances de l'ensemble du système. Il est indispensable de mettre sur pied un moyen efficace de mesurer la performance du système et d'établir l'infrastructure nécessaire pour enregistrer ces évaluations, les consulter et agir en conséquence.
- Expérimenter différentes approches : comme on l'a vu précédemment, il existe trop peu de bonnes pratiques établies pour permettre la création de systèmes d'IA composés. Selon toute vraisemblance, il faudra mettre à l'épreuve différentes façons d'intégrer les modèles d'IA et les autres outils, en testant aussi bien la logique de contrôle globale de l'application que les différents composants. La modularité est une alliée de l'expérimentation : il est plus facile d'expérimenter avec une application qui permet de changer de modèle, d'extracteur de données, d'outils, etc. MLflow propose une suite d'outils dédiés à l'évaluation et à l'expérimentation qui le rendent particulièrement utile à l'élaboration des systèmes d'IA composés.
Quels sont les principaux obstacles à la création de systèmes d'IA composés ?
Les systèmes d'IA composés introduisent des défis de développement spécifiques si on les compare aux modèles seuls :
- Espace de conception plus vaste : les systèmes d'IA composés associent un ou plusieurs modèles d'IA à des outils tels que des extracteurs ou des interpréteurs de code, des sources de données, des librairies de code, etc. Plusieurs options sont généralement disponibles pour chacun de ces composants. Pour développer une application RAG, par exemple, il faut typiquement choisir, au minimum, les modèles à utiliser pour les incorporations et la génération de texte, les sources de données, l'emplacement du stockage des données et le système de récupération. Privés de bonnes pratiques établies, les développeurs doivent souvent consacrer des efforts importants à l'exploration de ce vaste espace de conception pour trouver une solution viable.
- Optimisation conjointe des composants du système : les modèles d'IA doivent souvent être optimisés pour fonctionner au mieux avec des outils spécifiques, et inversement. Il suffit de modifier un composant d'un système d'IA composé pour changer le comportement du système dans son ensemble de façon totalement inattendue. On comprend qu'il puisse être difficile d'assurer la bonne coordination de tous les composants. Dans un système RAG, par exemple, un LLM peut fonctionner parfaitement avec un système d'extraction donné, alors qu'un autre LLM produira des performances médiocres.
- Opérations complexes : les LLM constituent à eux seuls un défi en termes de service, de surveillance et de sécurisation. Lorsqu'on les combine à d'autres modèles et outils d'IA, ces défis sont démultipliés. Pour utiliser ces systèmes composés, les développeurs peuvent être contraints de combiner des outils et des pratiques MLOps et DataOps de façon tout à fait unique pour parvenir à surveiller et déboguer leurs applications. Databricks Lakehouse Monitoring peut apporter une excellente visibilité sur la complexité des pipelines de données et de modélisation dans les systèmes d'IA composés.