Share via


プロンプト フローに画像を組み込む (プレビュー)

多様なデータ入力を処理および解釈できるマルチモーダル大規模言語モデル (LLM) は、言語のみのシステムの機能を新たなレベルに引き上げる強力なツールです。 さまざまなデータ型の中で、画像は実際にある多くのアプリケーションにとって重要です。 画像データを AI システムに組み込むことで、視覚的な理解に不可欠なレイヤーが提供されます。

この記事では、次の内容について説明します。

  • プロンプト フローで画像データを使用する方法
  • 画像入力を分析するための内蔵 GPT-4V ツールの使用方法。
  • 画像とテキストの入力を処理できるチャットボットの作成方法。
  • 画像データを使用したバッチ実行の作成方法。
  • 画像データを使用したオンライン エンドポイントの使用方法。

重要

プロンプト フローでの画像のサポートは、現在パブリック プレビュー段階です。 このプレビュー版はサービス レベル アグリーメントなしで提供されています。運用環境のワークロードに使用することはお勧めできません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。

プロンプト フローの画像の種類

プロンプト フローの入出力は、新しいデータ型として Image をサポートします。

プロンプト フロー作成ページで画像データを使用するには、次の操作を行います。

  1. フロー入力を追加し、データ型として Image を選択します。 画像ファイルのアップロード、ドラッグ アンド ドロップ、クリップボードからの画像の貼り付け、フロー フォルダーの画像 URL や相対画像パスの指定が可能です。 Screenshot of flow authoring page showing adding flow input as Image type.

  2. 画像をプレビューします。 画像が正しく表示されない場合は、画像を削除してからもう一度追加します。 Screenshot of flow authoring page showing image preview flow input.

  3. LLM に画像をフィードする前に、Python ツールを使用した画像の前処理をする必要がある場合があります。たとえば、画像をより小さなサイズに変更したりトリミングしたりできます。 Screenshot of using python tool to do image preprocessing.

    重要

    Python 関数を使用して画像を処理するには、Image クラスを使用する必要があり、promptflow.contracts.multimedia パッケージからインポートします。 Image クラスは、プロンプト フロー内で画像の種類を表すために使用されます。 これは、バイト形式の画像データを扱うように設計されており、画像データを直接扱ったり操作したりする必要がある場合に便利です。

    処理した画像データを返すには、Image クラスを使用して画像データをラップする必要があります。 バイト単位の画像データと MIME の種類mime_type を指定して、Image オブジェクトを作成します。 MIME の種類は、システムが画像データの形式を解釈するようにするか、または不明な型の * にすることができます。

  4. Python ノードを実行し、出力を確認します。 この例では、Python 関数は処理された Image オブジェクトを返します。 画像出力を選択して、画像をプレビューします。 Screenshot of Python node's image output.Python ノードの Image オブジェクトがフロー出力に設定されている場合、フロー出力ページでも画像をプレビューできます。

GPT-4V ツールの使用

Azure OpenAI GPT-4 Turbo with Vision ツールと OpenAI GPT-4V は、OpenAI GPT-4V モデルを使い、入力画像に基づいて質問に回答できるプロンプト フローの組み込みツールです。 このツールを見つけるには、フロー作成ページで [その他のツール] を選びます。

Azure OpenAI GPT-4 Turbo with Vision ツールをフローに追加します。 GPT-4 vision-preview モデルを利用できる Azure OpenAI 接続があることを確認します。

Screenshot of GPT-4V tool.

GPT-4V ツールのプロンプトを構成する Jinja テンプレートは、LLM ツールのチャット API と同様の構造になっています。 プロンプト内で画像入力を表すために、構文 ![image]({{INPUT NAME}}) を使用できます。 画像入力は、usersystemassistant メッセージで渡すことができます。

プロンプトを構成したら、[入力を検証して解析する] ボタンを選択して入力プレースホルダーを解析します。 ![image]({{INPUT NAME}}) で表される画像入力は、入力名を INPUT NAME として使用する画像の種類として解析されます。

画像入力には、次の方法を通して値を割り当てることができます。

  • 画像の種類のフロー入力からの参照。
  • 他のノードの画像の種類の出力からの参照。
  • 画像をアップロードし、ドラッグして貼り付けるか、または画像 URL や相対画像パスを指定します。

画像を処理するチャットボットの作成

このセクションでは、画像とテキストの入力を処理できるチャットボットの作成方法を学びます。

画像とテキストに関するあらゆる質問に回答できるチャットボットを作成するとします。 次の手順に従うことで、この問題を解決できます。

  1. チャット フローを作成します。

  2. チャット入力を追加し、データ型として "list" を選択します。 チャット ボックスで、テキストや画像の混成されたシーケンスを入力すると、プロンプト フロー サービスがそれをリストに変換します。 Screenshot of chat input type configuration.

  3. GPT-4V ツールをフローに追加します。  Screenshot of GPT-4V tool in chat flow.

    この例では、{{question}} はテキストと画像のリストであるチャット入力を指します。

  4. (省略可能) GPT-4V の出力を処理するフローに任意のカスタム ロジックを追加できます。 たとえば、コンテンツの安全性ツールを追加して、回答に不適切なコンテンツが含まれているかどうかを検出し、ユーザーに最終的な回答を返すことができます。 Screenshot of processing gpt-4v output with content safety tool.

  5. これで、チャットボットをテストできるようになります。 チャット ウィンドウを開き、画像とともに質問を入力します。 チャットボットは、画像とテキストの入力に基づいて質問に回答します。 チャット入力値はチャット ウィンドウの入力から自動的にバックフィルされます。 画像付きのテキストは、テキストと画像のリストに変換されるチャット ボックスで見つけることができます。 Screenshot of chatbot interaction with images.

Note

チャットボットがリッチ テキストや画像で応答できるようにするには、チャット出力を型 list にします。 リストはカスタム オーダーの文字列 (テキスト用) とプロンプト フロー イメージ オブジェクト (画像用) で構成される必要があります。 Screenshot of chatbot responding with rich text and images.

画像データを使用したバッチ実行の作成

バッチ実行では、広範なデータセットを使用してフローをテストできます。 画像データを表現するには、画像ファイル、公開画像の URL、Base64 文字列の 3 つの方法があります。

  • 画像ファイル: バッチ実行で画像ファイルを使用してテストするには、data フォルダーを準備する必要があります。 このフォルダーには、ルート ディレクトリにある jsonl 形式のバッチ実行エントリ ファイルと、同じフォルダーまたはサブフォルダーに格納されているすべての画像ファイルが含まれている必要があります。 Screenshot of batch run sample data with images.エントリ ファイルでは、各画像ファイルを参照する {"data:<mime type>;path": "<image relative path>"} 形式を使用する必要があります。 たとえば、{"data:image/png;path": "./images/1.png"} のようにします。
  • 公開画像URL:{"data:<mime type>;url": "<image URL>"} 形式を使用して、エントリ ファイル内の画像 URL を参照することもできます。 たとえば、{"data:image/png;url": "https://www.example.com/images/1.png"} のようにします。
  • Base64 文字列: Base64 文字列は、{"data:<mime type>;base64": "<base64 string>"} 形式を使用してエントリ ファイルで参照できます。 たとえば、{"data:image/png;base64": "iVBORw0KGgoAAAANSUhEUgAAAGQAAABLAQMAAAC81rD0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABlBMVEUAAP7////DYP5JAAAAAWJLR0QB/wIt3gAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB+QIGBcKN7/nP/UAAAASSURBVDjLY2AYBaNgFIwCdAAABBoAAaNglfsAAAAZdEVYdGNvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVDnr0DLAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIwLTA4LTI0VDIzOjEwOjU1KzAzOjAwkHdeuQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMC0wOC0yNFQyMzoxMDo1NSswMzowMOEq5gUAAAAASUVORK5CYII="} のようにします。

要約すると、プロンプト フローは、{"data:<mime type>;<representation>": "<value>"} という画像を表すために、固有の辞書形式を使用します。 ここでは、<mime type> は HTML 標準の MIME 画像の種類を指し、<representation> はサポートされている画像の表現 pathurlbase64 を指します。

バッチ実行の作成

フロー作成ページで、[評価] ボタンを選択してバッチ実行を開始します。 バッチ実行設定で、データセットを選択します。これは、フォルダー (エントリ ファイルと画像ファイルを含む) またはファイル (エントリ ファイルのみを含む) のどちらかにできます。 エントリ ファイルをプレビューし、入力マッピングを実行して、エントリ ファイルの列をフロー入力に整列させることができます。 Screenshot of batch run data selection.

バッチ実行の結果の表示

バッチ実行の出力は、実行の詳細ページで確認できます。 出力テーブルで画像オブジェクトを選択すると、画像を簡単にプレビューできます。

Screenshot of batch run output.

バッチ実行の出力に画像が含まれている場合、出力 jsonl ファイルと出力画像を使用して flow_outputs dataset を確認できます。

Screenshot of batch run flow output.

画像データを使用してオンライン エンドポイントを使用する

リアルタイム推論のためにフローをオンライン エンドポイントにデプロイできます。

現在、デプロイの詳細ページの [テスト] タブでは、画像の入力または出力をサポートしていません。 近日中にサポートされる予定です。

今のところ、画像入力を含む要求を送信することでエンドポイントをテストできます。

画像入力でオンライン エンドポイントを使用するには、{"data:<mime type>;<representation>": "<value>"} 形式を使用して画像を表す必要があります。 この場合、<representation>url または base64 のどちらかにできます。

フローで画像出力が生成される場合、base64 形式 ({"data:<mime type>;base64": "<base64 string>"} など) で返されます。

次のステップ