プロンプト フローの開発

重要

この記事で説明する機能の一部は、プレビューでのみ使用できる場合があります。 このプレビューはサービス レベル アグリーメントなしで提供されており、運用環境ではお勧めしません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。

プロンプト フローは、大規模言語モデル (LLM) によって動作する AI アプリケーションの開発サイクル全体を合理化するために設計された開発ツールです。 プロンプト フローは、AI アプリケーションのプロトタイプ作成、実験、反復、デプロイのプロセスを簡素化する包括的なソリューションを提供します。

プロンプト フローを使用すると、次のことが可能になります。

  • 視覚化されたグラフを介して LLM、プロンプト、Python ツールを使用する実行可能フローを調整する。
  • フローを簡単にテスト、デバッグ、反復処理する。
  • プロンプト バリアントを作成し、そのパフォーマンスを比較する。

この記事では、Azure AI Studio で最初のプロンプト フローを作成して開発する方法について説明します。

前提条件

  • まだ Azure AI Studio プロジェクトがない場合は、最初にプロジェクトを作成します
  • プロンプト フローにはコンピューティング セッションが必要です。 ランタイムがない場合は、Azure AI Studio で作成することができます。
  • デプロイされたモデルが必要です。

プロンプト フローを作成して開発する

フローを作成するには、ギャラリーで使用可能なサンプルを複製するか、最初からフローを作成します。 ローカルまたはファイル共有にフロー ファイルが既にある場合は、ファイルをインポートしてフローを作成することもできます。

次の手順で Azure AI Studio のギャラリーでプロンプト フローを作成します。

  1. Azure AI Studio にサインインし、プロジェクトを選択します。

  2. 折りたたみ可能な左側のメニューから [プロンプト フロー] を選びます。

  3. [+ 作成] を選択します。

  4. [標準フロー] タイルで、[作成] を選びます。

  5. [新しいフローを作成する] ページでフォルダー名を入力し、[作成] を選択します。

    標準フローの選択と作成のスクリーンショット。

  6. プロンプト フローの作成ページが開きます。 今すぐフローを作成できます。 既定では、サンプル フローが表示されます。 このフロー例には、LLM と Python ツール用のノードがあります。

    [プロンプト フローの編集] ページでのフローの入力と出力のスクリーンショット。

    Note

    視覚化専用のグラフ ビュー。 これは、開発中のフロー構造を示しています。 グラフ ビューを直接編集することはできませんが、ズームイン、ズームアウト、スクロールはできます。 グラフ ビューでノードを選択すると、そのノードが強調表示され、ツール編集ビューでそのノードに移動できます。

  7. オプションで、フローにツールを追加することもできます。 表示されるツール オプションは、LLMプロンプトPython です。 その他のツールを表示するには、[+その他のツール] を選択します。

    [プロンプト フローの編集] ページで他のツールを見つけることができる場所のスクリーンショット。

  8. LLM ツール エディターで接続とデプロイを選択します。

    [プロンプト フローの編集] ページの LLM ツールで選択した接続とデプロイのスクリーンショット。

  9. 実行を選択してフローを実行します。

    [プロンプト フローの編集] ページで [実行] を選択する場所のスクリーンショット。

  10. フロー実行の状態は、[実行中] と表示されます。

    [プロンプト フローの編集] ページの実行中状態のフローのスクリーンショット。

  11. フローの実行が完了したら、[出力内容を表示する] を選択してフロー結果を表示します。

    [プロンプト フローの編集] ページからフローの結果を表示することを選択できる場所のスクリーンショット。

  12. [出力] セクションでフローの実行状態と出力を表示できます。

    出力の詳細のスクリーンショット。

フローの作成

各フローは、flow.dag.yaml ファイル、ソース コード ファイル、システム フォルダーを含むフォルダーで表されます。 新しいファイルの追加、既存のファイルの編集、ファイルの削除を行うことができます。 ファイルをローカルにエクスポートしたり、ローカルからファイルをインポートしたりすることもできます。

フラット化ビューでノードをインライン編集するだけでなく、[生ファイル モード ] トグルをオンにし、ファイル名を選択して開いているファイル タブでファイルを編集することもできます。

フロー入力とフロー出力

フロー入力は、全体としてフローに渡されるデータです。 名前と型を指定して、入力スキーマを定義します。 各入力の入力値を設定して、フローをテストします。 ${input.[input name]} 構文を使用して、フローノードのフロー入力を後で参照できます。

フロー出力は、全体としてフローによって生成されるデータであり、フロー実行の結果が要約されています。 フロー実行またはバッチ実行の完了後に、出力テーブルを表示してエクスポートできます。 構文 ${[node name].output} または ${[node name].output.[field name]}を使用して、フローの単一ノード出力を参照してフロー出力値を定義します。

ノード出力を参照することで、ノードを互いにリンクできます。 たとえば、Python ノード入力で LLM ノード出力を参照して、Python ノードで LLM ノード出力を消費できるようにし、グラフ ビューで 2 つのノードが互いにリンクされていることを確認できます。

フローに対する条件付き制御を有効にする

プロンプト フローでは、フローを効率的に実行する方法だけでなく、開発者向けの強力な機能である条件付き制御も提供されており、この機能により、ユーザーはフロー内の任意のノードを実行するための条件を設定できます。

条件付き制御では、その中核として、フロー内の各ノードをアクティブ化構成に関連付ける機能が提供されます。この構成は基本的に、ノードを実行するタイミングを決定する "when" ステートメントです。 この機能の能力が認識できるのは、特定のタスクの実行が前のタスクの結果に依存する複雑なフローがある場合です。 条件付き制御を使用することで、指定した条件が満たされた場合にのみ実行するように特定のノードを構成できます。

具体的には、ノード カードの [Activate config] \(構成のアクティブ化\) ボタンを選択して、ノードのアクティブ化構成を設定できます。 "when" ステートメントを追加し、条件を設定できます。 フロー入力またはノード出力を参照することで、条件を設定できます。 たとえば、条件 ${input.[input name]} を特定の値として設定したり、${[node name].output} を特定の値として設定したりできます。

条件が満たされていない場合、ノードはスキップされます。 ノードの状態は "バイパス" と表示されます。

フローをテストする

フローは次の 2 つの方法でテストできます。

  • 単一ノードを実行します。
    • 単一ノードを実行するには、フラット ビューのノードで [実行] アイコンを選択します。 実行が完了したら、ノード出力セクションで結果をすばやく確認できます。
  • フロー全体を実行します。
    • フロー全体を実行するには、右上にある [実行] ボタンを選択します。

テスト結果とトレースを表示する (プレビュー)

フロー全体の実行について、フローを実行した後、実行バナーで実行状態を確認できます。 その後、[トレースの表示] を選択し、結果を確認してフローの実行を監視するためのトレースを表示できます。ここでは、フロー全体と各ノードの入力と出力と、デバッグに関する詳細情報を確認できます。 これは、実行中と実行が完了した後に使用できます。

トレース ビューについて

プロンプト フローのトレースの種類は、フローとして指定されます。 トレース ビュー内では、フロー オーケストレーションに使用されるツールの明確なシーケンスを監視できます。

フロー ルートの下の各レベル 2 スパンはフロー内のノードを表し、関数呼び出しの形式で実行されるため、スパンの種類は関数として識別されます。 スパン ツリー内の各ノードの実行期間を確認できます。

スパン ツリーでは、LLM 呼び出しは LLM スパンとして簡単に識別できます。 これにより、LLM 呼び出しの期間と関連するトークン コストに関する情報が提供されます。

スパンを選択すると、右側に詳細情報が表示されます。 これには、入力と出力、未加工の JSON、例外が含まれます。これらはすべて、監視とデバッグに役立ちます。

 トレースの詳細のスクリーンショット。

Note

プロンプト フロー SDK では、LLM関数埋め込み取得フローなど、いくつかのスパンの種類を定義しました。 指定された属性とイベントに実行情報を含むスパンは、システムによって自動的に作成されます。

スパンの種類の詳細については、「トレース スパン」を参照してください。

フロー実行が完了した後、結果を確認するために、[テスト結果の表示] ボタンを選択して、一覧ですべての過去の実行レコードを確認できます。 既定では、過去 7 日間に作成された実行レコードが表示されます。 [フィルター] を選択して条件を変更できます。

フロー テストの結果のスクリーンショット。

実行レコードの [名前] を選択して、トレース ビューに詳細情報を表示することもできます。

チャット フローを開発する

チャット フローは会話型アプリケーション開発用に設計されており、標準フローの機能に基づいて構築され、チャットの入力/出力とチャット履歴管理の高度なサポートを提供します。 チャット フローを使用すると、チャットの入力と出力を処理するチャットボットを簡単に作成できます。

チャット フローの作成ページでは、チャット フローは、標準フローや評価フローと区別するために "チャット" ラベルでタグ付けされています。 チャット フローをテストするには、[チャット] ボタンを選択して会話用のチャット ボックスをトリガーします。

チャットの入力/出力とチャット履歴

チャット フローを標準フローと区別する最も重要な要素は、チャット入力チャット履歴チャット出力です。

  • チャット入力: チャット入力とは、ユーザーによってチャットボットに送信されたメッセージまたはクエリを指します。 チャット入力を効果的に処理することは会話を成功させるために重要で、これにはユーザーの意図の理解、関連情報の抽出、適切な応答のトリガーが含まれます。
  • チャット履歴: チャット履歴は、ユーザー入力と AI によって生成された出力の両方を含む、ユーザーとチャットボットの間のすべてのやり取りの記録です。 チャット履歴の保持は、会話コンテキストを追跡し、AI がコンテキストに関連する応答を生成できるようにするために不可欠です。
  • チャット出力: チャット出力とは、ユーザーの入力に応答してユーザーに送信される AI によって生成されたメッセージを指します。 コンテキスト的に適切で人を引きつけるチャット出力を生成することは、肯定的なユーザー エクスペリエンスに不可欠です。

チャット フローには複数の入力を含めることができ、チャット フローではチャット履歴とチャット入力が必要です。

  • チャット フロー入力セクションでは、フロー入力をチャット入力としてマークできます。 その後、チャット ボックスに入力してチャット入力値を入力できます。

  • プロンプト フローは、ユーザーがチャット履歴を管理するのに役立ちます。 [入力] セクションの chat_history は、チャット履歴を表すために予約されています。 ユーザー チャット入力、生成されたチャット出力、その他のフロー入力と出力など、チャット ボックス内のすべてのやり取りは、チャット履歴に自動的に保存されます。 ユーザーは、[入力] セクションで chat_history の値を手動で設定することはできません。 これは次のような入力と出力の一覧として構造化されています。

    [
    {
        "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"
        }
    }
    ]
    

Note

チャット履歴を自動的に保存または管理する機能は、チャット ボックスでテストを行うときの作成ページの機能です。 バッチ実行の場合、ユーザーはバッチ実行データセット内にチャット履歴を含める必要があります。 テストに使用できるチャット履歴がない場合は、バッチ実行データセット内で chat_history を空のリスト [] に設定します。

チャット履歴を使用してプロンプトを作成する

チャット履歴をプロンプトに組み込むことは、コンテキストを認識し人を引きつけるチャットボット応答を作成するために不可欠です。 プロンプトでは、chat_history を参照して過去のやり取りを取得できます。 これにより、前の入力と出力を参照して、コンテキストに関連する応答を作成できます。

Jinja 言語の for ループ構文を使用して、chat_history から入力と出力の一覧を表示します。

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

チャット ボックスを使用してテストする

チャット ボックスには、チャットボットとの会話をシミュレートすることで、チャット フローをテストする対話型の方法が用意されています。 チャット ボックスを使用してチャット フローをテストするには、次の手順に従います。

  1. [チャット] ボタンを選択して、チャット ボックスを開きます。
  2. テスト入力をチャット ボックスに入力し、Enter キーを押してチャットボットに送信します。
  3. チャットボットの応答を確認して、コンテキスト的に適切で正確であることを確認します。
  4. [トレースの表示] では、すばやく監視およびデバッグできます。

次のステップ