- Début 2023, LinkedIn a commencé à lancer un portefeuille de produits exploitant des fonctionnalités GenAI
- Les premiers produits GenAI sont partis d’un simple modèle de type « saisie de prompt, sortie de chaîne de caractères » avant d’évoluer vers des expériences d’agents conversationnels prenant en charge la mémoire contextuelle
- En construisant une pile technologique d’applications GenAI, LinkedIn a mis en œuvre une approche visant à maintenir un équilibre entre le time-to-market et l’effet de levier à long terme
Genèse et évolution
- Il était nécessaire de construire un framework fournissant des mécanismes standard pour les tâches communes
- Comme la majeure partie de la pile de serving en ligne de LinkedIn était programmée en Java, le point de départ a été un midtier Java partagé
- À mesure que les cas d’usage augmentaient, ce midtier est devenu un goulot d’étranglement pour le développement et l’exploitation, et a été scindé en plusieurs services midtier Java spécifiques à chaque cas d’usage
- Les ingénieurs IA préfèrent Python pour les workflows hors ligne basés sur des LLM, le prompt engineering et l’évaluation
- À court terme, LinkedIn a décidé de conserver des piles en ligne et hors ligne fragmentées, tout en choisissant à long terme d’utiliser aussi Python pour le serving en ligne
- Construction d’un framework Python pour le serving en ligne sur la base du projet open source LangChain
- Lancement d’un projet d’activation du support Python pour les dépendances d’infrastructure critiques, avec un accent mis sur Python
- Aujourd’hui, le framework d’applications GenAI est un wrapper léger construit au-dessus de LangChain
Gestion des prompts
- Le prompt engineering est le principal mécanisme pour « programmer » les LLM
- Au début, des interpolations manuelles de chaînes dans le code étaient utilisées, mais elles étaient sujettes aux erreurs et impossibles à faire évoluer
- Introduction d’un composant Prompt Source of Truth et standardisation de l’usage du langage de templates Jinja
- Réécriture de la bibliothèque de résolution des prompts de Java vers Python
- Avec l’apparition des interfaces conversationnelles, il a fallu fournir davantage de structure aux rôles humain et IA dans la conversation
- Le tout a finalement convergé vers l’API OpenAI Chat Completions
Automatisation des tâches via les skills
- L’abstraction de skill a été étendue aux applications GenAI et utilisée comme mécanisme d’automatisation des tâches
- Au départ, cela a été construit avec du code personnalisé encapsulant les API internes et externes de LinkedIn à l’aide de schémas JSON adaptés aux LLM
- Des problèmes sont apparus, comme des implémentations de skills dupliquées, des changements dans les skills en aval et la spécification manuelle des skills par les développeurs
- Introduction du concept de Skill Inversion pour permettre aux systèmes en aval de définir les skills et de les exposer aux applications appelantes
- Simplification des processus d’accès, de développement et d’exploitation des skills grâce à un service centralisé de registre des skills, des plugins de build et des outils LangChain dynamiques
- La pile technologique continue d’évoluer afin de générer progressivement des abstractions de skills pour toutes les API et permettre aux LLM d’interagir de manière fluide avec elles
Conscience du contexte et personnalisation
- Comme les LLM sont fondamentalement stateless, il est difficile d’assurer la prise en compte du contexte et la personnalisation
- Au départ, Couchbase ou Espresso DB étaient utilisés comme stockage, et chaque équipe gérait la configuration de la base, les écritures/lectures, etc.
- La fenêtre de contexte des LLM étant limitée, des fonctions de recherche sémantique (via des embeddings) et de résumé sont devenues nécessaires
- Construction d’une infrastructure de mémoire conversationnelle en s’appuyant sur la pile de messagerie de LinkedIn
- Introduction du concept d’Experiential Memory, dérivé de l’expérience d’interaction entre l’utilisateur et l’application
- Intégration dans le framework d’applications GenAI afin de permettre aux développeurs de l’utiliser de manière fluide
Inférence de modèles et fine-tuning
- Au départ, seuls les LLM fournis par le service Azure OpenAI étaient utilisés
- Des LLM comme Llama, fine-tunés pour des tâches spécifiques à LinkedIn, ont montré une qualité comparable, voire supérieure, à celle de modèles commerciaux
- Des efforts sont en cours pour rendre transparente l’expérience des développeurs d’applications entre les modèles externes et internes
- La couche d’inférence expose l’API OpenAI Chat Completions pour tous les LLM
- Il est facile de basculer entre des modèles on-premise et externes grâce aux hooks de configuration du framework applicatif
Migration
- Il est essentiel de migrer rapidement des solutions legacy personnalisées vers des solutions standardisées
- Une équipe restreinte composée d’ingénieurs ayant une connaissance approfondie de la pile Java et de la nouvelle pile s’est chargée de la migration
- Une approche progressive a été utilisée pour migrer les composants un par un
- Le processus a commencé par des applications simples et petites avant de passer à des applications complexes et de grande taille
- Des ingénieurs seniors ont été mis en binôme avec de nouveaux développeurs Python afin qu’ils puissent apprendre Python directement dans la pratique
Réflexions finales
- La nouvelle pile technologique d’applications GenAI pose des bases solides pour adopter un développement orienté IA et construire des applications GenAI de manière efficace et responsable
- Elle jouera un rôle important dans la concrétisation de la vision consistant à créer des opportunités économiques pour chaque membre de la main-d’œuvre mondiale
- Il reste encore de nombreux défis à résoudre
- À mesure que la pointe de l’expérience produit se déplace des assistants conversationnels vers les agents IA, les nouvelles exigences fonctionnelles et opérationnelles augmentent rapidement. Des informations supplémentaires à ce sujet seront également publiées
Aucun commentaire pour le moment.