Partager via


Développer un flux

Un flux de prompts est un outil de développement conçu pour simplifier l’ensemble du cycle de développement des applications IA optimisées par des modèles LLM (Large Language Model). Alors que la dynamique des applications IA basées sur LLM continue de croître dans le monde entier, le flux de prompts fournit une solution complète qui simplifie le processus de prototypage, d’expérimentation, d’itération et de déploiement de vos applications IA.

Avec le flux de prompts, vous pouvez :

  • Orchestrer des flux exécutables avec des modèles LLM, prompts et outils Python via un graphique visuel.
  • Tester, déboguer et itérer vos flux avec facilité.
  • Créer des variantes de prompt et comparer leurs performances.

Dans cet article, vous allez apprendre à créer et développer votre premier flux de prompts dans votre environnement Azure Machine Learning Studio.

Créer et développer votre flux de prompts

Dans Studio, sélectionnez l’onglet Flux de prompts dans la barre de navigation gauche. Sélectionnez Créer pour créer votre premier flux de prompts. Vous pouvez créer un flux en clonant les exemples disponibles dans la galerie ou en créant un flux à partir de zéro. Si vous disposez déjà de fichiers de flux en local ou dans un partage de fichiers, vous pouvez également importer les fichiers pour créer un flux.

Capture d’écran de la création de flux d’invite à partir de zéro ou de la galerie.

Création du flux

À gauche, il s’agit de l’affichage aplati, la principale zone de travail où vous pouvez créer le flux, par exemple ajouter des outils à votre flux, modifier l’invite, définir les données d’entrée du flux, exécuter votre flux, afficher la sortie, etc.

Capture d’écran de la zone de travail principale du flux d’invite.

En haut à droite, il s’agit de la vue des fichiers de flux. Chaque flux peut être représenté par un dossier qui contient un fichier « flow.dag.yaml », des fichiers de code source et des dossiers système. Vous pouvez ajouter de nouveaux fichiers, modifier des fichiers existants et supprimer des fichiers. Vous pouvez également exporter les fichiers en local ou importer des fichiers depuis l’environnement local.

En plus de la modification intraligne du nœud dans l’affichage aplati, vous pouvez également activer le Mode de fichier brut et sélectionner le nom du fichier pour le modifier dans l’onglet d’ouverture du fichier.

En bas à droite, il s’agit de la vue du graphique à des fins de visualisation uniquement. Elle présente la structure du flux que vous développez. Vous pouvez effectuer un zoom avant, un zoom arrière, une disposition automatique, etc.

Remarque

Vous ne pouvez pas modifier directement la vue du graphique, mais vous pouvez sélectionner le nœud à localiser sur la carte de nœud correspondante dans l’affichage aplati, puis effectuer la modification inline.

Session de calcul

Avant de commencer la création, vous devez d’abord démarrer la session de calcul. La session de calcul sert de ressource de calcul nécessaire pour exécuter le flux d’invite, qui comprend une image Docker contenant tous les packages de dépendances nécessaires. Il s’agit d’une condition obligatoire pour l’exécution de flux.

Capture d’écran du démarrage de la session de calcul dans studio.

Entrée et sortie de flux

L’entrée de flux représente les données transmises dans le flux dans son ensemble. Définissez le schéma d’entrée en spécifiant le nom et le type. Définissez la valeur d’entrée de chaque entrée pour tester le flux. Vous pouvez référencer l’entrée de flux ultérieurement dans les nœuds de flux à l’aide de la syntaxe ${input.[input name]}.

La sortie de flux représente les données produites par le flux dans son ensemble, qui résume les résultats de l’exécution du flux. Vous pouvez afficher et exporter la table de sortie une fois l’exécution du flux ou l’exécution par lots terminée. Définissez la valeur de sortie de flux en référençant la sortie de nœud unique de flux à l’aide de la syntaxe ${[node name].output} ou ${[node name].output.[field name]}.

 Capture d’écran d’entrée et de sortie du flux.

Développer le flux à l’aide de différents outils

Dans un flux, vous pouvez utiliser différents types d’outils, par exemple LLM, Python, API Serp, Content Safety, etc.

En sélectionnant un outil, vous allez ajouter un nouveau nœud au flux. Vous devez spécifier le nom du nœud et définir les configurations nécessaires pour le nœud.

Par exemple, pour le nœud LLM, vous devez sélectionner une connexion, un déploiement, définir le prompt, etc. Une connexion permet de stocker et de gérer en toute sécurité les clés secrètes ou d’autres informations d’identification sensibles nécessaires pour interagir avec Azure OpenAI. Si vous n’avez pas encore de connexion, vous devez d’abord la créer et vous assurer que votre ressource Azure OpenAI dispose des déploiements de conversation ou de complétion. L’outil LLM et Prompt vous encourage à utiliser Jinja comme langage de création de modèles pour générer dynamiquement le prompt. Par exemple, vous pouvez utiliser {{}} pour encadrer le nom de votre entrée, au lieu du texte fixe, afin qu’il puisse être remplacé sur-le-champ.

Pour utiliser l’outil Python, vous devez définir le script Python, définir la valeur d’entrée, etc. Vous devez définir une fonction Python avec des entrées et des sorties comme suit.

 Capture d’écran de l’écriture d’un script Python pour le nœud Python.

Une fois que vous avez terminé de composer le prompt ou le script Python, vous pouvez sélectionner Valider et analyser l’entrée afin que le système analyse automatiquement l’entrée du nœud en fonction du modèle de prompt et de l’entrée de fonction Python. La valeur d’entrée du nœud peut être définie de différentes manières :

  • Définir la valeur directement dans la zone d’entrée
  • Référencer l’entrée de flux à l’aide de la syntaxe ${input.[input name]}
  • Référencer la sortie du nœud à l’aide de la syntaxe ${[node name].output} ou ${[node name].output.[field name]}

En référençant la sortie du nœud, vous pouvez lier des nœuds ensemble. Par exemple, vous pouvez référencer la sortie du nœud LLM dans l’entrée du nœud Python, afin que le nœud Python puisse consommer la sortie du nœud LLM et, dans la vue du graphique, vous pouvez voir que les deux nœuds sont liés ensemble.

Activer le contrôle conditionnel sur le flux

Le flux rapide offre non seulement un moyen simplifié d’exécuter le flux, mais il apporte également une fonctionnalité puissante pour les développeurs, le contrôle conditionnel, qui permet aux utilisateurs de définir des conditions pour l’exécution d’un nœud dans un flux.

Fondamentalement, le contrôle conditionnel offre la possibilité d’associer chaque nœud dans un flux à une activation de la configuration. Cette configuration est essentiellement une instruction « when » qui détermine quand un nœud doit être exécuté. La puissance de cette fonctionnalité est réalisée lorsque vous avez des flux complexes où l’exécution de certaines tâches dépend du résultat des tâches précédentes. En tirant parti du contrôle conditionnel, vous pouvez configurer vos nœuds spécifiques pour qu’ils s’exécutent uniquement lorsque les conditions spécifiées sont remplies.

Plus précisément, vous pouvez définir l’activation de la configuration pour un nœud en sélectionnant le bouton Activer la configuration dans la carte de nœud. Vous pouvez ajouter l’instruction « when » et définir la condition. Vous pouvez définir les conditions en référençant l’entrée de flux ou la sortie de nœud. Par exemple, vous pouvez définir la condition ${input.[input name]} comme valeur spécifique ou ${[node name].output} comme valeur spécifique.

Si la condition n’est pas remplie, le nœud est ignoré. L’état du nœud s’affiche comme « Contourné ».

Capture d’écran de la configuration d’activation du contrôle conditionnel.

Tester le flux

Vous pouvez tester le flux de deux façons :

  • Exécuter un seul nœud.
    • Pour exécuter un nœud unique, sélectionnez l’icône Exécuter sur le nœud dans l’affichage aplati. Une fois l’exécution terminée, vous pouvez vérifier rapidement le résultat dans la section de sortie du nœud.
  • Exécuter l’ensemble du flux.
    • Pour exécuter l’ensemble du flux, sélectionnez le bouton Exécuter en haut à droite.

Afficher le résultat et la trace des tests (préversion)

Pour l’ensemble du flux, après avoir exécuté le flux, vous pouvez voir l’état de l’exécution dans la bannière d’exécution. Vous pouvez ensuite sélectionner Afficher la trace, afin de vérifier le résultat et observer l’exécution du flux, où vous pouvez voir l’entrée et la sortie de l’ensemble du flux et de chaque nœud, ainsi que des informations plus détaillées pour le débogage. Ceci est disponible pendant l’exécution et une fois l’exécution terminée.

 Capture d’écran du bouton Afficher la sortie dans deux emplacements.

Comprendre l’affichage de la trace

Le type de trace d’un flux d’invite est désigné en tant que Flux. Dans l’affichage de la trace, vous pouvez observer la séquence claire des outils utilisés pour l’orchestration de flux.

Chaque étendue de niveau 2 sous la racine du flux représente un nœud dans le flux, exécutée sous la forme d’un appel de fonction. Par conséquent, le type d’étendue est identifié en tant que Fonction. Vous pouvez voir la durée de chaque exécution de nœud dans l’arborescence d’étendues.

Dans l’arborescence d’étendues, les appels LLM sont facilement identifiables en tant qu’étendue LLM. Celles-ci fournissent des informations sur la durée de l’appel LLM et le coût de jeton associé.

En cliquant sur une étendue, vous pouvez voir les informations détaillées sur le côté droit. Cela inclut l’entrée et la sortie, le Json brut et l’exception, qui sont tous utiles pour l’observation et le débogage.  Capture d’écran des détails de la trace.

Remarque

Dans le kit de développement logiciel (SDK) de flux d’invite, nous avons défini plusieurs types d’étendues, notamment LLM, Fonction, Incorporation, Récupération et Flux. Le système crée automatiquement des étendues avec les informations d’exécution dans des attributs et des événements désignés.

Pour en savoir plus sur les types d’étendues, consultez Étendue de trace.

Une fois l’exécution du flux terminée, pour consulter les résultats, vous pouvez sélectionner le bouton Afficher les résultats des tests, afin de vérifier tous les enregistrements d’exécution historiques d’une liste. Par défaut, les enregistrements d’exécution créés au cours des sept derniers jours sont affichés. Vous pouvez sélectionner le Filtre pour modifier la condition.

Capture d’écran du résultat du test de flux.

Vous pouvez également sélectionner le Nom de l’enregistrement d’exécution pour afficher les informations détaillées dans l’affichage de la trace.

Développer un flux de conversation

Un flux de conversation est conçu pour le développement d’applications de conversation, en s’appuyant sur les fonctionnalités du flux standard et en fournissant une prise en charge améliorée des entrées et sorties de conversation et une gestion de l’historique des conversations. Avec le flux de conversation, vous pouvez facilement créer un chatbot qui gère les entrées et sorties de conversation.

Dans la page de création de flux de conversation, une étiquette « conversation » permet de distinguer ce type de flux de ceux standard et d’évaluation. Pour tester le flux de conversation, sélectionnez le bouton « Conversation » pour ouvrir une zone de conversation.

Capture d’écran de la page de création de flux de conversation.

Entrées/sorties de conversation et historique des conversations

Les éléments les plus importants qui différencient un flux de conversation d’un flux standard sont les entrées et les sorties de conversation ainsi que l’historique des conversations.

  • Entrée de conversation : désigne les messages ou requêtes envoyé(e)s au chatbot par les utilisateurs. Une gestion efficace de ces entrées est essentielle à la réussite d’une conversation, car elle implique de comprendre les intentions de l’utilisateur, d’extraire les informations pertinentes et d’envoyer des réponses appropriées.
  • Historique des conversations : l’historique des conversations est l’enregistrement de toutes les interactions entre l’utilisateur et le chatbot, y compris les entrées utilisateur et les sorties générées par l’IA. Conserver un historique des conversations est essentiel pour assurer le suivi du contexte de conversation et garantir que l’IA peut générer des réponses contextuellement pertinentes.
  • Sortie de conversation : désigne les messages générés par l’IA qui sont envoyés à l’utilisateur en réponse à ses entrées. La génération d’une sortie de conversation contextuelle et intéressante est essentielle pour une expérience utilisateur positive.

Un flux de conversation peut avoir plusieurs entrées, mais l’historique des conversations et l’entrée de conversation en sont des éléments obligatoires.

  • Dans la section des entrées du flux de conversation, une entrée de flux peut être marquée comme entrée de conversation. Vous pouvez ensuite remplir la valeur d’entrée de conversation en tapant dans la zone de conversation.

  • Le flux rapide peut aider l’utilisateur à gérer l’historique des conversations. Le champ chat_history de la section Entrées est réservé à la représentation de l’historique des conversations. Toutes les interactions dans la zone de conversation, y compris les entrées de conversation utilisateur, les sorties de conversation générées et les autres entrées et sorties de flux, sont automatiquement stockées dans l’historique des conversations. L’utilisateur ne peut pas définir manuellement la valeur de chat_history dans la section Entrées. Ces informations sont structurées sous la forme d’une liste d’entrées et de sorties :

    [
    {
        "inputs": {
        "<flow input 1>": "xxxxxxxxxxxxxxx",
        "<flow input 2>": "xxxxxxxxxxxxxxx",
        "<flow input N>""xxxxxxxxxxxxxxx"
        },
        "outputs": {
        "<flow output 1>": "xxxxxxxxxxxx",
        "<flow output 2>": "xxxxxxxxxxxxx",
        "<flow output M>": "xxxxxxxxxxxxx"
        }
    },
    {
        "inputs": {
        "<flow input 1>": "xxxxxxxxxxxxxxx",
        "<flow input 2>": "xxxxxxxxxxxxxxx",
        "<flow input N>""xxxxxxxxxxxxxxx"
        },
        "outputs": {
        "<flow output 1>": "xxxxxxxxxxxx",
        "<flow output 2>": "xxxxxxxxxxxxx",
        "<flow output M>": "xxxxxxxxxxxxx"
        }
    }
    ]
    

Remarque

La possibilité d’enregistrer ou de gérer automatiquement l’historique des conversations est une fonctionnalité de la page de création lors de l’exécution de tests dans la zone de conversation. Pour les exécutions par lots, il est nécessaire pour les utilisateurs d’inclure l’historique des conversations dans le jeu de données d’exécution par lots. Si aucun historique des conversations n’est disponible pour les tests, définissez simplement chat_history sur une liste vide [] dans le jeu de données d’exécution par lots.

Créer une invite avec l’historique des conversations

L’incorporation de l’historique des conversations dans vos invites est essentielle pour créer des réponses de chatbot contextuelles et intéressantes. Dans vos invites, vous pouvez référencer chat_history pour récupérer des interactions passées. Vous référencez ainsi les entrées et sorties précédentes pour créer des réponses contextuellement pertinentes.

Utilisez la grammaire des boucles for du langage Jinja pour afficher une liste d’entrées et de sorties depuis chat_history.

{% for item in chat_history %}
user:
{{item.inputs.question}}
assistant:
{{item.outputs.answer}}
{% endfor %}

Effectuer un test via la zone de conversation

La zone de conversation offre un moyen interactif de tester votre flux de conversation en simulant une conversation avec votre chatbot. Pour cela, procédez comme suit :

  1. Sélectionnez le bouton Conversation pour ouvrir la zone de conversation.
  2. Tapez vos entrées de test dans la zone de conversation, puis sélectionnez Entrée pour les envoyer au chatbot.
  3. Examinez les réponses de ce dernier pour vous assurer qu’elles sont contextuellement appropriées et précises.
  4. Affichage de la trace en place pour observer et déboguer rapidement.

 Capture d’écran de l’expérience de la boîte de conversation Flux de conversation.

Étapes suivantes