LangChain BlogMis à jour le

Créer de belles expériences utilisateur prêtes à l’emploi avec les Managed Deep Agents

Points clés La nouvelle API de réactions pour les canaux Slack permet de créer facilement des états de chargement et des reçus pour Managed Deep Agents en utilisant soit des heuristiques simples, soit

Source de l’image · LangChain Blog

Points clés

  • La nouvelle API de réactions pour les canaux Slack permet de créer facilement des états de chargement et des reçus pour Managed Deep Agents en utilisant soit des heuristiques simples, soit des modèles de décision, comme Jev.
  • Cet nouveau SDK aide à créer des interfaces conviviales et des états de chargement pour les utilisateurs qui interagissent avec les agents.
  • Voyez comment nous utilisons cette pensée de design avec nos propres agents internes et les utilisateurs non développeurs.

‍

Les états de chargement sont l’un des aspects du design le plus sous-estimé (et oublié) lors de la création d’expériences utilisateur efficaces pour les agents.

D’après notre expérience, les utilisateurs font confiance aux agents lorsqu’ils ont une visibilité sur ce que ces agents font réellement. Ce comportement se manifeste davantage sous forme de design skeuomorphe, un concept de design où les objets numériques imitent des objets du monde réel. Le Domino’s Pizza Tracker est l’un des exemples les plus importants de design skeuomorphe qui peut être appliqué aux agents. Aujourd’hui, les états de chargement numériques (même ceux qui peuvent vous tromper) sont essentiels pour rendre toute expérience utilisateur compréhensible et efficace. Le nouveau SDK de réactions d’agent pour les Managed Deep Agents est un outil excellent pour créer des interfaces agréables et des états de chargement pour les utilisateurs qui interagissent avec vos agents.

Nouvel attribute de réaction dans les Managed Deep Agents

Dans v0.9, Managed Deep Agents inclut une nouvelle API pour gérer les réactions de vos agents distribués, ainsi qu’un système permettant d’attribuer dynamiquement des réponses en emoji avec votre outil de choix, comme des modèles de décision, des modèles frontière ou des instructions if classiques.

L’attribut new reactions pour les canaux Slack accepte soit une chaîne de caractères représentant un emoji, soit un appelable qui renvoie un emoji.

from managed_deepagents import channels

async def choose_emoji(context: dict) -> str:
    return "bug" if "broken" in context["text"].lower() else "eyes"

channel = channels.slack(name="Support Bot", reactions=choose_emoji)

Dans cet exemple, nous utilisons par défaut 👀, mais l’analyse statique attribuera un 🐛 si le message contient le mot « broken ».

Nous voulons que les développeurs de LangChain puissent adopter des schémas communs pour la satisfaction utilisateur dans les états de chargement et les patterns d’attente, car de nombreuses tâches d’agent peuvent s’exécuter pendant de longues périodes. Les utilisateurs finaux interagissant avec les agents ont besoin de confirmation que la tâche a été reçue.

Par exemple, nous avons récemment lancé un agent de marketing interne pour créer des contenus vidéo. Pendant que l’agent attend de répondre, il est utile pour les utilisateurs de comprendre l’état de son travail.

Voici un exemple du type de contenu vidéo et graphique dynamique que notre agent peut créer :

https://x.com/ndrezn/status/2104962135730061688?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E2104962135730061688%7Ctwgr%5E3fb82affc6e194f89989fadec1e2161b853b60b3%7Ctwcon%5Es1_&ref_url=https%3A%2F%2Fapp.notion.com%2Fp%2FBuild-great-out-of-the-box-user-experiences-with-Managed-Deepagents-3ed808527b178002bda9fc42f4db7213

Il n’est souvent pas suffisant de répondre simplement à un message avec un seul emoji. Il est également nécessaire que les agents expliquent au utilisateur comment ils ont interprété la tâche, et la réponse contextuelle peut faire partie clé de la conception de votre agent.

Étendons l’exemple de réaction de base. Nous pouvons avoir un modèle de décision, comme Jev, en choisissant parmi un ensemble de vocabulaire d’émojis en fonction du contexte d’entrée. Jev permet jusqu’à 255 choix, mais vous pouvez construire une matrice de décision avec plusieurs questions (par exemple, en regroupant les émojis en catégories et en demandant à Jev de choisir une catégorie, puis un émoji) afin de faire des requêtes sur davantage d’émojis :

from functools import lru_cache

from langchain_typesafe import Choice, TypeSafeClassifier
from managed_deepagents import channels

# The description is what the model matches on, so describe the situation
# rather than the picture. Keep an option for anything unremarkable.
VOCABULARY = Choice(
    instructions="Which emoji best acknowledges this message?",
    criteria={ 
        "bug": "A defect or incorrect behaviour.",
        "rotating_light": "A declared incident or outage.",
        "mag": "A code review, pull request, or diff to look at.",
        "hourglass": "Waiting on someone or something else; blocked.",
        "speech_balloon": "A question, or a request to explain something.",
        "wave": "A greeting or hello.",
        "eyes": "Anything that does not clearly fit another option.",
    },
)


@lru_cache(maxsize=1)
def classifier() -> TypeSafeClassifier:
    return TypeSafeClassifier(model="typesafe/jev-latest")


async def choose_emoji(context: dict) -> str:
    answer = await classifier().ainvoke(
        {"state": context["text"][:2000], "questions": {"emoji": VOCABULARY}}
    )
    emoji = answer.choices["emoji"]
    # Below this the model has no real view, so prefer a generic reaction.
    return emoji.choice if emoji.confidence >= 0.25 else "eyes"


channel = channels.slack(name="Support Bot", reactions=choose_emoji)

Dans cet exemple, nous utilisons la nouvelle TypeSafe Classifier qui fait partie de l’outil LangChain. C’est une excellente façon de interagir avec les modèles de décision compatibles avec TypeSafe, comme Jev. Il est également possible d’utiliser d’autres modèles de décision avec les mêmes endpoints, comme SemIf, hébergé sur LangSmith LLM Gateway. Ou bien, on peut changer de modèle pour expérimenter le meilleur choix.

Le même emoji peut avoir des significations opposées en fonction de l’action du agent. Par exemple, 🔥 provenant d’un agent en attente pourrait signifier que la production est en cours de destruction et il faut se réveiller. 🔥 provenant d’un agent de croissance pourrait signifier que la campagne fonctionne bien et on peut retourner au sommeil. C’est pourquoi les descriptions criteria accomplissent plus de travail que les noms des emojis. Le modèle correspond à votre description de la situation, donc le même glyphe porte la signification que votre espace de travail lui a déjà attribuée.

L’exemple ci-dessus montre également que l’on peut utiliser des seuils de confiance. Si le modèle de décision a moins de 25 % de confiance dans son choix principal, nous passerons à 👀. Vous pourriez aussi choisir de ne pas réagir si aucun des emojis fournis dans le vocabulaire ne correspond correctement.

On pourrait dire qu’il y a une forme de dissimulation dans ce design : car un modèle différent évalue les réponses de la réaction par rapport à la réponse du modèle lui-même, il peut y avoir des différences subtiles dans l’interprétation. Pour cette raison, il est important de décrire efficacement comment on espère que chaque réaction sera utilisée. Un modèle d’évaluation fera une sur-estimation de certaines réponses de la réaction si sa description est trop générique, même si une autre réaction ne serait pas surestimée aux yeux non formés.

Vous pouvez ajouter des emojis personnalisés à votre vocabulaire via le code Slack. Pour notre agent de contenu interne, l’équipe d’IA a créé une série d’emojis personnalisés que l’agent peut utiliser dans ses réponses. J’aime particulièrement le lc-no-em-dash, que l’agent choisit lorsqu’il est invité à écrire du contenu :

Étudiez différentes approches. Des descriptions différentes pour les emojis (ou des manières différentes de structurer votre vocabulaire) entraîneront des résultats différents. De même, élargissez ou réduisez l’ensemble d’emojis dont un agent dispose.

Les agents Deep Gérés sont conçus pour exploiter toutes les interfaces de conception subtiles que nous considérons comme cruciales pour l’adoption des agents, grâce à des API simples et expressives. Commencez à ajouter des réactions pour vos agents Deep Gérés existants en utilisant notre documentation. Ou, si vous n’avez jamais créé un agent Deep Géré auparavant, le meilleur endroit pour commencer est notre quickstart.

‍

Source originale

LangChain Blog

À propos du contenu

La publication originale et les droits appartiennent à la source.

Traduction automatique · Consultez l’original