エージェント型検索でドキュメントに埋め込まれた画像を表示する (プレビュー)

Note

Azure AI 検索は、Azure ポータル、REST API、およびAzure SDKから使用できます。 また、Foundry IQ は、エンタープライズ コンテンツを、Microsoft Foundry ポータルのエージェントの再利用可能なアクセス許可に対応したナレッジ ベースに変換するマネージド ナレッジ レイヤーです。

Important

機能、またはマークされたプロパティ (プレビュー) は、サービス レベル アグリーメントの対象ではなく、運用環境のワークロードには推奨されず、一般公開される前に変更または制約される可能性があります。 Azure AI 検索 プレビューの用語は、スタンドアロンでも一般公開されている機能の一部でも、すべてのプレビュー機能に適用されます。

エージェント検索中にソース ドキュメントに埋め込まれた画像 (図、グラフ、インフォグラフィック、スキャンされたフォーム、製品イメージなど) を表示するには、 画像サービス (プレビュー) を使用します。そのため、大規模な言語モデル (LLM) は、回答を合成するときにテキストと共に視覚的なコンテキストを推論できます。

画像配信を有効にすると、Azure AI 検索 では次のようになります:

  • インデックス作成時に、サポートされているドキュメントからイメージを抽出し、顧客が提供する Azure BLOB 資産ストアに格納します。

  • クエリ時に、 取得アクション中にそれらのイメージをフェッチし、base64 でエンコードし、合成された回答を生成する LLM プロンプトにマルチモーダル コンテンツとして挿入します。

この記事では、ナレッジ ベースでイメージ サービスを有効にする方法、要求ごとにオーバーライドする方法、イメージ サービスの統計情報を調べる方法、ストレージ アカウントのライフサイクル要件を計画する方法について説明します。

使用サポート

Azure Portal Microsoft Foundry ポータル .NET SDK Python SDK Java SDK JavaScript SDK REST API
❌ ❌ ✔️ ✔️ ✔️ ✔️ ✔️

Prerequisites

制限事項と考慮事項

  • イメージ サービスは、エージェント検索の retrieve API を介してのみ使用できます。 従来の /docs/search クエリでは、カスタム ソリューションや構成なしで、ダウンストリームの応答合成にドキュメント埋め込み画像が提供されません。

  • イメージ サービスは 、応答合成 出力モードでのみ実行されます。 extractiveData出力モードでは、イメージの提供がスキップされます。

  • 画像配信は、assetStore が構成され、image_path の値が入力されたチャンクがインデックス登録されているファイルベースのインデックス付きナレッジソースにのみ適用されます。

  • 混合ナレッジ ベースでは、サポートされているナレッジ ソースの種類 (BLOB、インデックス付き OneLake、インデックス付きSharePoint) のみが、ダウンストリームの応答合成にドキュメント埋め込みイメージを提供します。 他の種類でも、テキストのグラウンディングに寄与できます。

  • を使用して、ACL、RBAC スコープ、Microsoft Purview の秘密度ラベルを含むドキュメント レベルのアクセス許可を取り込むナレッジ ソースでは、画像配信はサポートされていません。 資産ストアは基になるナレッジ ストアを作成し、ナレッジ ストアはアクセス許可の継承をサポートしていません。

  • 取得応答スキーマでは、モデルに送信される個々の資産ストア イメージ パスまたはイメージ バイトのフィールドは定義されません。 imageServing アクティビティは、取得してモデルに送信されたイメージの集計統計を報告します。

  • イメージへのアクセスは、インデックス付きコンテンツへのアクセスとは別に、ストレージ アカウント レベルで制御されます。 アセット ストレージ アカウントへの読み取りアクセスを持つあらゆる ID は、そのアカウント内のイメージを取得できます。

  • コンテンツはグラウンド データとして返される可能性があるため、ソース ドキュメントにシークレット (アカウント キー、トークン、接続文字列) を格納しないでください。

  • イメージ の提供により、イメージのダウンロードとマルチモーダル トークン処理により、応答合成の待機時間が長くなる可能性があります。 イメージ サービスが有効および無効になっている代表的なクエリを実行し、応答の待機時間を報告された imageServing アクティビティと比較します。

  • Content Understanding では、PDF ファイルと DOCX ファイルに対して異なる画像結果を生成できます。 一貫した埋め込み画像抽出と言語化が必要な場合は、ソース ドキュメントを PDF に変換するか、代表的なコンテンツを使用して各ソース形式をテストします。

イメージ サービスのしくみ

イメージ サービスには、次の 2 つのフェーズがあります。

  • インデックス作成: ナレッジ ソースで標準コンテンツ抽出と資産ストアを構成すると、生成された Content Understanding スキルによって、ドキュメントが意味的にチャンクされ、テーブルが Markdown として保持され、構成された LLM を使用して埋め込み図が記述されます。 図の説明は、埋め込みスキルがベクター化するエンリッチメントされた Markdown の一部になります。 また、このスキルは画像を blob アセット ストアに抽出し、重なり合うチャンクに image_path 参照を追加します。

    資産ストアを構成すると、検索サービスはナレッジ ソースと共に ナレッジ ストア をプロビジョニングして、抽出されたイメージ成果物を保持します。 他のナレッジ ストアと同様に、このナレッジ ストアを検査および管理できます。

  • 検索: イメージ サービスが有効な状態で取得アクションが実行されると、検索サービスは資産ストアから一致するイメージをフェッチし、base64 でエンコードし、応答合成プロンプトにマルチモーダル コンテンツとして含めます。

資産ストアとアプリケーション アクセスを構成する

イメージ サービスは、3 つの信頼境界にまたがる。 インデックス作成時に、検索サービスによって画像成果物が資産ストアに書き込まれます。 クエリ時に、検索サービスは資産ストアから読み取って画像を取得します。 また、UI でイメージをレンダリングする必要がある場合は、アプリケーションがアセット ストアから読み取ります。 最小特権アクセスに従って各パスを構成します。

資産ストアへの検索サービス アクセス

  • 検索サービスには、Microsoft Entra IDと管理 ID を使用します。 インデクサーが画像アーティファクトを書き込み、retrieve アクションでそれらを読み取るため、ストレージ アカウント スコープで ID には Storage Blob Data Contributor ロールを割り当てます。 ソースコンテナーと資産コンテナーがそのアカウントを共有する場合、ロールはソース BLOB の読み取りアクセスも提供します。

  • 資産ストア コンテナーで匿名パブリック アクセスを有効にしないでください。

イメージ参照へのアプリケーション アクセス

生成されたインデックスには、資産ストア内 image_path イメージへの参照が格納されます。 取得応答スキーマでは、モデルに送信される個々の資産ストア イメージ パスまたはイメージ バイトの専用フィールドは定義されません。 省略可能な sourceData は構造化参照データであり、 image_path は必要ありません。

アプリケーションにインデックス付きイメージを表示するには:

  1. 資産ストレージ アカウントのスコープで、アプリケーションの ID に Storage Blob Data Reader ロールを割り当てます。

  2. 生成されたインデックスに対してクエリを実行できるように、アプリケーションの ID に 検索インデックス データ閲覧者 ロールを割り当てます。

  3. アプリケーションによって制御されるクエリまたはサービス エンドポイントを介して、生成されたインデックスから承認された image_path を取得します。

  4. 参照先が想定したストレージ アカウントおよびアセット コンテナーであることを検証します。 blob の検索前に、信頼できないパスを拒否する。

  5. アプリケーションの ID を使用して、アセット コンテナーから生成された blob 名を取得します。

この分離により、取得 API を呼び出すことができるユーザーとは別に、ソース イメージを表示できるユーザーを制御できます。

ナレッジ ソース上でアセット ストアを構成する

サポートされているインデックス付きナレッジ ソースのassetStoreでingestionParametersを構成します。 アセット ストアは、ユーザーが所有し、検索サービスがイメージ アーティファクトを書き込む Blob コンテナーです。

ソース固有の手順については、次を参照してください。

イメージ サービスが有効になっている最小限の BLOB ナレッジ ソースは、次のようになります。

PUT https://{service-name}.search.windows.net/knowledgesources/my-blob-ks?api-version=2026-08-01-preview
Content-Type: application/json
Authorization: Bearer {{search-access-token}}

{
  "name": "my-blob-ks",
  "kind": "azureBlob",
  "azureBlobParameters": {
    "connectionString": "ResourceId=<storage-resource-id>",
    "containerName": "source-documents",
    "ingestionParameters": {
      "assetStore": {
        "connectionString": "ResourceId=<storage-resource-id>",
        "containerName": "image-assets"
      },
      "chatCompletionModel": {
        "kind": "azureOpenAI",
        "azureOpenAIParameters": {
          "resourceUri": "https://{foundry-resource}.services.ai.azure.com",
          "deploymentId": "gpt-4o",
          "modelName": "gpt-4o"
        }
      },
      "embeddingModel": {
        "kind": "azureOpenAI",
        "azureOpenAIParameters": {
          "resourceUri": "https://{foundry-resource}.services.ai.azure.com",
          "deploymentId": "text-embedding-3-large",
          "modelName": "text-embedding-3-large"
        }
      },
      "contentExtractionMode": "standard",
      "aiServices": {
        "uri": "https://{foundry-resource}.services.ai.azure.com"
      }
    }
  }
}

Note

  • <storage-resource-id>を、Azure Storage アカウントのリソース ID に置き換えます。 ResourceId=<storage-resource-id>接続形式は、両方のコンテナーでマネージド ID を使用するように検索サービスに指示します。

  • 資産ストアをホストするAzure Storage アカウントは、ナレッジ ベースの有効期間中、検索サービスで引き続き使用でき、アクセスできる必要があります。 ネットワーク ルールを変更したり、キーを交換したり、ID を交換したり、検索サービスが資産ストアを読み取らないようにストレージ アカウントを移動したりする場合、イメージ サービスはそれらのイメージをモデルに提供できません。 imagesRetrievedと取得アクティビティのimagesSentToModelを比較し、ストレージ アカウントの変更を慎重に計画およびテストします。

構成の結果

assetStore、disableImageVerbalization、chatCompletionModelの組み合わせによって、インデクサーが格納する内容と、クエリ時にモデルに表示される内容が決まります。

  • 資産ストア + 音声化 (既定):assetStoreを設定し、disableImageVerbalization を false のままとし、chatCompletionModel を設定します。 インデクサーは資産ストアにイメージを永続化し、インデックスにテキストの説明を格納します。 取得アクティビティでは、 verbalizationUsed を trueとして報告できます。

  • アセット ストアのみ:assetStore設定、disableImageVerbalizationtrueに設定、chatCompletionModel不要。 インデクサーは資産ストアにイメージを保持しますが、テキストの説明は生成しません。 取得アクティビティでは、 verbalizationUsed を falseとして報告できます。

  • アセット ストアなし、モデル セットなし:assetStore 未設定、chatCompletionModel 設定済み。 テキストの説明のみ。画像の成果物はありません。 画像の提供は適用されません。

  • 資産ストアなし、モデルなし: 画像処理なし。

資産ストアの構成を確認する

インジェストが完了するまで待ってから続行します。

  • Azure ポータルGet Indexer Status (REST API) を使用します。

  • インデックス付きチャンクに image_path フィールドが設定されているかどうかを確認します。 image_pathが空の場合は、インデクサーの状態、ナレッジ ソース資産ストアの構成、ソース ドキュメントの内容、および資産コンテナーの内容を確認します。

  • アセット ストア コンテナを調べます。 インジェスト中にインデクサーが書き込んだ画像 BLOB が表示されます。

ナレッジベースで画像配信を有効にする

ナレッジベース定義内のナレッジソース参照で、enableImageServingをtrueに設定します。 この設定は、ナレッジ ソースを対象とするすべての取得要求の既定値になります。

ナレッジ ベースの定義では、 クエリ時に応答合成に使用される LLM も指定されます。 この設定は、インデックス作成時の画像の言語化を制御する、ナレッジ ソースの chatCompletionModel で設定した ingestionParameters とは無関係です。

ナレッジ ベースが複数のナレッジ ソースを参照している場合は、enableImageServing が構成されている、サポート対象のファイル ベースのインデックス済みの種類にのみ assetStore を設定します。 サポートされていない種類 (検索インデックス、リモート SharePoint、Web など) は、テキスト の接地を引き続き提供しますが、ダウンストリームの応答合成にはドキュメント埋め込み画像を提供しません。

PUT https://{service-name}.search.windows.net/knowledgebases/my-kb?api-version=2026-08-01-preview
Content-Type: application/json
Authorization: Bearer {{search-access-token}}

{
  "name": "my-kb",
  "knowledgeSources": [
    {
      "name": "my-blob-ks",
      "enableImageServing": true
    }
  ],
  "outputMode": "answerSynthesis",
  "models": [
    {
      "kind": "azureOpenAI",
      "azureOpenAIParameters": {
        "resourceUri": "https://{foundry-resource}.services.ai.azure.com",
        "deploymentId": "gpt-4o",
        "modelName": "gpt-4o"
      }
    }
  ]
}

イメージ サービスの有効化を確認する

ナレッジ ベース エンドポイントに GET 要求を送信し、ナレッジ ソース参照に "enableImageServing": trueが含まれていることを確認します。

イメージ サービスを使用して取得する

ナレッジ ベースに対して 取得アクション を呼び出します。 要求ごとにナレッジ ベースの既定値をオーバーライドするには、一致するエントリの [enableImageServing] でknowledgeSourceParamsを設定します。

POST https://{service-name}.search.windows.net/knowledgebases/my-kb/retrieve?api-version=2026-08-01-preview
Content-Type: application/json
Authorization: Bearer {{search-access-token}}

{
  "retrievalReasoningEffort": { "kind": "medium" },
  "outputMode": "answerSynthesis",
  "includeActivity": true,
  "messages": [
    {
      "role": "user",
      "content": [
        { "type": "text", "text": "What's the wiring configuration shown in the installation guide?" }
      ]
    }
  ],
  "knowledgeSourceParams": [
    {
      "knowledgeSourceName": "my-blob-ks",
      "kind": "azureBlob",
      "enableImageServing": true
    }
  ]
}

Note

イメージ サービスは、 outputMode が answerSynthesisされている場合にのみ実行されます。 extractiveData使用する要求は、enableImageServingが設定されている場合でも、イメージの提供をスキップします。

取得時の動作

一致するコンテンツに関連付けられている画像参照の場合、検索サービスは資産ストアから対応する画像をダウンロードし、base64 でエンコードし、それらをマルチモーダル コンテンツとしてダウンストリームの応答合成モデルに渡します。 activity.imageServingで集計された画像配信統計を確認します。 正確な応答の形状については、 ナレッジ取得 - 取得 (REST API) のリファレンス ドキュメントを参照してください。

取得動作を確認する

取得応答は、次の画像提供シグナルを提供できます。

  • includeActivityがtrueされると、activity配列は、サービスが画像提供操作を記録するときにナレッジ ソースのimageServingアクティビティを報告します。

  • 0より大きいimagesSentToModel値は、ダウンストリームの応答合成モデルに画像を提供したことをサービスが報告することを意味します。

優先順位ルール

ナレッジ ベース定義と取得要求の両方が enableImageServing指定されている場合、取得要求の値が優先されます。 完全な優先順位は次のとおりです。

  1. 取得要求の knowledgeSourceParams[].enableImageServing 内の値 (設定されている場合)。
  2. ナレッジ ベース定義内の一致するナレッジ ソース参照の値 (設定されている場合)。
  3. false (既定値)。

次の表は、9 つの組み合わせをまとめたものです。

ナレッジ ベースの定義 (enableImageServing) リクエストを取得 (enableImageServing) イメージ サービスが有効になっているか。
true true イエス
true false いいえ
true 未設定 イエス
false true イエス
false false いいえ
false 未設定 いいえ
未設定 true イエス
未設定 false いいえ
未設定 未設定 いいえ

イメージ サービスの統計情報を検査する

イメージ サービスを実行すると、取得応答には、imageServing配列内の各ナレッジ ソースのactivity セクションが含まれます。 このセクションを使用して、資産ストアから取得したイメージと、モデルに送信されたイメージを比較します。

"activity": [
  {
    "type": "azureBlob",
    "knowledgeSourceName": "my-blob-ks",
    "imageServing": {
      "verbalizationUsed": true,
      "imagesRetrieved": 5,
      "imagesSentToModel": 4,
      "totalImageSizeBytes": 248361
    }
  }
]

各フィールドは次のとおりです:

  • verbalizationUsed: 取得アクティビティのサービスによって報告された画像言語化統計。

  • imagesRetrieved: 資産ストアから取得されたイメージの数。

  • imagesSentToModel: ダウンストリーム モデルに送信されるイメージの数。

  • totalImageSizeBytes: モデルに送信されたイメージの合計サイズ (バイト単位)。

imagesRetrievedがimagesSentToModelより大きい場合、取得したすべてのイメージがモデルに送信されたわけではありません。

verbalizationUsedとimagesSentToModelを個別に検査します。 応答では、 verbalizationUsed の両方を true として報告し、モデルに送信された 1 つ以上の画像を報告できます。

エンドツーエンドの画像配信テスト

次のいずれかのサンプルを使用して、完全なセットアップをテストします。

このサンプルでは、BLOB ナレッジ ソースとナレッジ ベースを作成し、取得要求とイメージ サービスを無効にして有効にした状態を比較し、イメージサービスの統計情報を検査します。 また、独立したワイルドカード インデックス クエリを使用して image_path を選択し、その資産をダウンロードします。 サンプルでは、セミコロンで区切られた参照を 1 つ選択し、相対パスから 11.7: などのプロジェクション プレフィックスを削除するか、絶対パスを URL デコードして、その先頭のアセット コンテナー セグメントを削除します。 これらの変換はサンプル動作であり、取得 API の保証ではありません。 選択した資産は、同じ画像が特定の取得応答に寄与したことを示す証拠ではありません。

一般的な A/B 比較チェックリスト:

  • 図、グラフ、またはスキャンされた画像からのみ回答できる質問を選択します。

  • enableImageServing: falseを使用して取得要求を実行し、回答をキャプチャします。

  • enableImageServing: trueで同じ取得要求を実行し、回答、待機時間、および報告されたアクティビティを比較します。

  • 回答の違いは、画像が違いを引き起こしたという証拠ではなく、観察的な A/B 信号として扱います。 0より大きいimagesSentToModel値は、サービスがモデルに画像を提供したことを報告することを意味します。

リソースをクリーンアップする

ナレッジ ソースを削除する前に、ナレッジ ベースを削除します。 これらのAzure AI 検索 リソースを削除しても、Azure Storage内のソース ドキュメントや投影イメージ BLOB は削除されません。 保持対象のインジェスト パイプラインまたは検索パイプラインのいずれからも不要になった場合にのみ、これらの BLOB を個別に削除します。

Troubleshooting

最初の診断手順として、imageServing の アクティビティ ブロックを使用してください。 次の表に、単一の原因を前提とせず、一般的な症状についての確認項目を示します。

症状: チェック
imagesRetrievedは、画像を多く含むドキュメント向けの0です インデクサーの状態と警告、該当するインデックス済みチャンク内で設定された image_path の値、およびアセット コンテナー内の画像 BLOB を確認します。 ソース ドキュメントに抽出可能なイメージが含まれていること、および検索サービス ID にストレージ アカウント スコープの ストレージ BLOB データ共同作成者 があることを確認します。
取得応答には imageServing ブロックがありません 要求で includeActivity が trueに設定されていることを確認します。 要求、ナレッジ ベース、および既定の優先順位を適用した後、有効な enableImageServing 値を確認します。 outputModeがanswerSynthesisされていることを確認し、ソース アクティビティのエラーと警告を調べます。
verbalizationUsed 想定される内容とは異なる disableImageVerbalization、chatCompletionModel、および最新のインデクサーの状態を確認します。 imagesSentToModelとは別にverbalizationUsedを検査します。 応答では、言語化と一緒に送信された画像を報告できます。
応答合成が失敗するか、イメージ の提供を有効にした後にタイムアウトする 代表的な要求と、イメージ サービスの有効化と無効化を比較します。 アクティビティのエラーと警告、応答合成モデルのデプロイ状態、モデルとストレージ アカウントの検索サービス ID のアクセス許可、資産ストアの可用性を調べます。
アプリケーションで個別にクエリされた image_path をレンダリングできません 独立したインデックス クエリが使用可能な image_pathを返し、参照される BLOB が存在し、アプリケーションが取得とは別に BLOB にアクセスできることを確認します。 アプリケーション ID に、インデックス クエリの 検索インデックス データ 閲覧者 と、資産ストレージ アカウント スコープの ストレージ BLOB データ閲覧者 があることを確認します。