LangChain Blog更新日

マネージド・ディープエージェントを利用して、優れた即時ユーザー体験を実現する

重要なポイント Slackチャンネルの新しい反応APIにより、Jevのようなシンプルなヒューリスティクスや決定モデルを使用して、マネジドディープエージェントのローディングステートや受領書を簡単に作成できる。 この新しいSDKは、エージェントと交流するユーザーのための使いやすいインターフェースやロード状態を構築するのに役立ちます。 私たちがこのデザイン思考を、自社の内部エージェントや開発者でないユー

画像の出典 · LangChain Blog

重要なポイント

  • Slackチャンネルの新しい反応APIにより、Jevのようなシンプルなヒューリスティクスや決定モデルを使用して、マネジドディープエージェントのローディングステートや受領書を簡単に作成できる。
  • この新しいSDKは、エージェントと交流するユーザーのための使いやすいインターフェースやロード状態を構築するのに役立ちます。
  • 私たちがこのデザイン思考を、自社の内部エージェントや開発者でないユーザーにどう適用しているかを見てください。

‍

効果的なエージェントユーザー体験を構築する際、ローディング状態は最も過小評価され(そして忘れられ)ているデザインの側面の一つです。

私たちの経験では、エージェントが実際に何をしているかをユーザーが把握できる場合、ユーザーはそのエージェントを信頼します。このような行動は、デジタルオブジェクトが実世界のものを模倣するデザイン概念であるスキューマフォーメ릭なUIの形でより顕著になります。先見の明のあるDomino’s Pizza Trackerは、エージェントに適用できるスキューマフォーメ릭デザインの最も顕著な例の一つです。今日、デジタルローディングステート(あなたを欺く可能性のあるものでさえも)は、どんなユーザー体験も理解しやすく、効果的になるために非常に重要です。Managed Deep Agents用の新しいエージェント反応SDKは、ユーザーがエージェントと交流する際に楽しいインターフェースやローディングステートを構築するための優れたツールです。

管理されたDeepエージェントにおける新しい反応属性

v0.9では、Managed Deep Agentsには分散型エージェントの反応を管理するための新しいAPIが導入され、決定モデル、Frontierモデル、または従来のif文などの選択したインストゥルメントで動的に絵文字応答を割り当てるシステムも含まれます。

その new reactions 属性について Slackチャンネル 絵文字を表す文字列か、1を返す呼び出し可能な関数のどちらかを受け入れる:

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)

この例では👀をデフォルトとして使用しますが、メッセージに「broken」という言葉が含まれる場合は、静的解析により🐛と判定されます。

長時間にわたって実行される多くのエージェントタスクがあるため、LangChain開発者がユーザーの喜びを感じる共通のパターンや待機パターンを採用できるようにしたい。エージェントと相互作用するエンドユーザーは、タスクが受信されたことを認識する必要がある。

例えば、最近、ビデオコンテンツを作成する内部マーケティングエージェントを立ち上げました。エージェントからの返答を待っている間、ユーザーがエージェントの進捗状況を理解するのに役立ちます。

私たちのエージェントが作成できるビデオや動きのグラフィックコンテンツの例です:

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

単一の絵文字でメッセージに応答するだけでは、しばしば不十分です。ユーザーに対してタスクをどのように解釈したかを説明するエージェントも必要であり、文脈に応じた応答はエージェントの設計において重要な要素となります。

基本反応例をさらに進めてみましょう。Jevのような決定モデルを持ち、入力文脈に基づいて絵文字の一連の語彙から選択できます。Jevは最大255種類の選択肢をサポートしますが、複数の質問を含む決定行列を構築することもできます(例えば、絵文字をカテゴリーに分類し、Jevにカテゴリーを選択させてから絵文字を選ばせるなど)。これにより、より多くの絵文字に対してクエリを行うことができます。

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)

この例では、LangChainツールキットの一部である新しいTypeSafe Classifierを使用しています。これは、JevのようなTypeSafe互換型決定モデルと相互作用する優れた方法ですが、LangSmith LLM Gateway上でホストされているSemIfのような他の決定モデルも同じエンドポイントを利用できます。または、最適なオプションを実験するためにモデルを切り替えることも可能です。

エージェントが行うことによって、同じ絵文字が反対の意味をもたらすことがある。例えば、オンコールエージェントからの🔥は生産が中断して起きるべきだという意味であり、成長エージェントからの🔥はキャンペーンが効果的で再眠りにつけるという意味である。このため、criteriaの説明が絵文字名よりも多くの作業をする。モデルは状況の説明に基づいてマッチングするため、同じグリフはワークスペースで与えられている意味を持つ。

上記の例では、信頼度の閾値を利用できることも示されています。決定モデルが最優先選択肢に対して25%未満の信頼度を持つ場合、👀に戻ることになります。また、語彙に含まれる絵文字が適切でない場合は、反応しないという選択も可能です。

この設計には不誠実さがあると言えます。モデルが反応を評価する方法が異なるため、解釈において微妙な違いが生じる可能性があります。そのため、各反応がどのように利用されるかを効果的に記述することが重要です。もし説明が過度に一般的すぎると、スコアリングモデルは特定の反応に対して過剰に重みを置くことになります。たとえ別の反応が未訓練の目には過剰に適合しないとしてもです。

Slack短コードを使って、自分の語彙にカスタム絵文字を追加できます。私たちの内部コンテンツエージェントのために、適用されたAIチームが、エージェントが返信時に使用できるカスタム絵文字セットを作成しました。lc-no-em-dashが好きです。この絵文字は、コンテンツを書くよう指示されたときにエージェントが選ぶものです。

異なるアプローチを試してみてください。絵文字の説明を変える(または語彙の構造を全く変える)と、異なる結果が得られます。同様に、エージェントが利用できる絵文字の集合を拡大したり縮小したりすることもできます。

Managed Deep Agentsは、エージェントの導入に不可欠だと私たちが考えるすべての微妙な設計インターフェースを活用し、シンプルで表現力豊かなAPIを提供するように設計されています。既存のManaged Deep Agentsに対して反応を追加するには、私たちのドキュメントを参照してください。また、まだManaged Deep Agentを構築したことがない場合は、私たちのクイックスタートが最適な出発点です。

‍

原文の出典

LangChain Blog

内容について

原文の公開と権利は出典元に帰属します。

機械翻訳 · 原文をご参照ください