フローを開発する

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

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

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

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

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

Studio で、左側のナビゲーション バーから [プロンプト フロー] タブを選択します。 [作成] を選択して最初のプロンプト フローを作成します。 フローを作成するには、ギャラリーで使用可能なサンプルを複製するか、最初からフローを作成します。 ローカルまたはファイル共有にフロー ファイルが既にある場合は、ファイルをインポートしてフローを作成することもできます。

Screenshot of prompt flow creation from scratch or gallery.

フローの作成

左側はフラット ビューで、フローを作成できるメインの作業領域です。たとえば、フローにツールを追加したり、プロンプトを編集したり、フロー入力データを設定したり、フローを実行したり、出力を表示したりできます。

Screenshot of the prompt flow main working area.

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

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

右下にあるのは、視覚化専用のグラフ ビューです。 これは、開発中のフロー構造を示しています。 拡大、縮小、自動レイアウトなどを行うことができます。

Note

グラフ ビューを直接編集することはできませんが、ノードを選択して対応するノード カードをフラット ビューで見つけ、インライン編集を行うことができます。

ランタイム: 既存のランタイムを選択するか、新しいランタイムを作成します

作成を開始する前に、まずランタイムを選択する必要があります。 ランタイムは、プロンプト フローの実行に必要なコンピューティング リソースとして機能し、必要なすべての依存関係パッケージを含む Docker イメージを含みます。 これはフロー実行に必須のものです。

ドロップダウンから既存のランタイムを選択するか、[ランタイムの追加] ボタンを選択できます。 これにより、ランタイム作成ウィザードが開きます。 ドロップダウンから既存のコンピューティング インスタンスを選択するか、新しいコンピューティング インスタンスを作成します。 その後、ランタイムを作成する環境を選択する必要があります。 すぐに開始するには、既定の環境を使用することをお勧めします。

Screenshot of runtime creation in studio.

フロー入力とフロー出力

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

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

 Screenshot of flow input and output.

さまざまなツールを使用してフローを開発する

フローでは、LLM、Python、Serp API、Content Safety など、さまざまな種類のツールを使用できます。

ツールを選択すると、新しいノードがフローに追加されます。 ノード名を指定し、ノードに必要な構成を設定する必要があります。

たとえば、LLM ノードの場合は、接続、デプロイ、プロンプトの設定などを選択する必要があります。接続は、秘密鍵、または Azure OpenAI とのやり取りに必要なその他の機密性の高い資格情報を安全に保存および管理するのに役立ちます。 まだ接続していない場合は、まず接続を作成し、Azure OpenAI リソースにチャットまたは完了のデプロイがあることを確認する必要があります。 LLM およびプロンプト ツールでは、テンプレート言語として Jinja を使用してプロンプトを動的に生成できます。 たとえば、固定テキストの代わりに入力名を {{}} で囲むと、その場で置き換えることができます。

Python ツールを使用するには、Python スクリプトの設定や、入力値の設定などを行う必要があります。入力と出力を含む Python 関数を、次のように定義する必要があります。

 Screenshot of writing a Python script for Python node.

プロンプトまたは Python スクリプトの作成が完了したら、[入力の検証および解析] を選択して、プロンプト テンプレートと Python 関数の入力に基づいてノード入力がシステムで自動的に解析されるようにすることができます。 ノード入力値は、次の方法で設定できます。

  • 入力ボックスに値を直接設定する
  • ${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} を特定の値として設定したりできます。

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

Screenshot of setting activate config to enable conditional control.

フローをテストする

フローは 2 つの方法でテストできます。つまり、1 つのノードを実行するか、フロー全体を実行します。

単一ノードを実行するには、フラット ビューのノードで [実行] アイコンを選択します。 実行が完了したら、ノード出力セクションで出力を確認します。

フロー全体を実行するには、右上にある [実行] ボタンを選択します。 その後、各ノードの実行状態と出力、およびフローで定義されたフロー出力の結果を確認できます。 フローの入力値をいつでも変更して、フローを再実行できます。

 Screenshot of view output button in two locations.

Screenshot of outputs on the output tab.

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

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

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

Screenshot of chat flow authoring page.

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

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

  • チャット入力: チャット入力とは、ユーザーによってチャットボットに送信されたメッセージまたはクエリを指します。 チャット入力を効果的に処理することは会話を成功させるために重要で、これにはユーザーの意図の理解、関連情報の抽出、適切な応答のトリガーが含まれます。
  • チャット履歴: チャット履歴は、ユーザー入力と 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. チャットボットの応答を確認して、コンテキスト的に適切で正確であることを確認します。

 Screenshot of Chat flow chat box experience.

次のステップ