次の方法で共有


Azure OpenAI Web アプリを使う

Azure AI Foundry、Azure OpenAI Studio、API、SDK に加えて、カスタマイズできるスタンドアロン Web アプリを使い、グラフィカル ユーザー インターフェイスで Azure OpenAI モデルを操作できます。 主な特徴は次のとおりです。

  • Azure AI 検索、プロンプト フローなど、豊富なクエリと検索拡張生成をサポートする複数のデータ ソースとの接続。
  • Cosmos DB を使用した会話履歴とユーザー フィードバックの収集。
  • Microsoft Entra ID を使用したロールベースのアクセス制御による認証。
  • 環境変数を使用したユーザー インターフェイス、データ ソース、および機能のカスタマイズ (Azure portal 経由によるノー コード)。
  • 基になる Web アプリケーションのソース コードをオープンソース リポジトリとして変更するためのサポート。

アプリをデプロイするには、Azure AI Foundry または Azure OpenAI Studio を使用するか、ローカル コンピューターを使用して Azure portal または Azure Developer CLI 経由で手動でデプロイできます (手順はこちらからリポジトリで確認できます)。 デプロイ チャネルによっては、Web アプリケーション経由でチャットするデータ ソースを事前に読み込むことができますが、これはデプロイ後に変更できます。

Azure OpenAI を初めて使う方が Web アプリケーションを介してデータとのチャットを希望されている場合、Azure AI Foundry が初期デプロイとデータ ソース構成に推奨されるメディアです。

Web アプリ インターフェイスを示すスクリーンショット。

重要な考慮事項

  • この Web アプリケーションとその機能の多くはプレビュー段階です。つまり、バグが発生する可能性があり、すべての機能が完全であるわけではありません。 バグを発見した場合やサポートが必要な場合は、関連する GitHub リポジトリで問題を報告してください。
  • 発行すると、Web アプリによってご自分のサブスクリプションに Azure App Service インスタンスが作成されます。 選択した価格プランによっては、コストが発生する場合があります。 アプリの使用が完了したら、Azure portal からアプリとその関連リソースを削除できます。
  • GPT-4 Turbo with Vision モデルは現在サポートされていません。
  • 既定では、アプリは Microsoft ID プロバイダーが既に構成されている状態でデプロイされます。 ID プロバイダーは、アプリへのアクセスを Azure テナントのメンバーに制限します。 認証を追加または変更するには:
    1. Azure portal に移動し、発行時に指定したアプリ名を検索します。 Web アプリを選択し、左側のメニューで [認証] を選択します。 [ID プロバイダーの追加] を選びます。

      Azure portal の [認証] ウィンドウのスクリーンショット。

    2. ID プロバイダーとして [Microsoft] を選択します。 このページの既定の設定では、アプリはテナントのみに制限されるため、ここで他の設定を変更する必要はありません。 [追加] を選択します。

これで、ユーザーは自分の Microsoft Entra アカウントでサインインして、アプリにアクセスできるようになります。 必要に応じて、同様のプロセスに従って別の ID プロバイダーを追加できます。 アプリで、ユーザーのサインイン情報が、テナントのメンバーであることの確認以外の用途に使われることはありません。 認証の管理の詳細については、Azure App Service 上の Web アプリの認証に関するクイックスタートを参照してください。

環境変数を使用したアプリケーションのカスタマイズ

アプリのフロントエンドとバックエンドのロジックをカスタマイズすることができます。 このアプリは、アプリのアイコン変更などの一般的なカスタマイズ シナリオ向けに、いくつかの環境変数を提供します。

これらの環境変数は、Web アプリケーションをデプロイした後、Azure portal から変更できます。

  1. Azure portal で、[App Services] ページを検索して選択します。
  2. 先ほどデプロイした Web アプリを選択します。
  3. アプリの左側のメニューで、[設定] > [環境変数] を選択します。
  4. 既存の環境変数を変更するには、その名前をクリックします。
  5. 新しい環境変数を 1 つ追加するには、パネルの上部のメニュー バーで [追加] をクリックします。
  6. JSON ベースのエディターを使用して環境変数を管理するには、[高度な編集] をクリックします。

アプリをカスタマイズするときは、次のことをお勧めします。

  • 実装する各設定がユーザー エクスペリエンスにどのように影響するかを明確に伝えます。

  • Azure OpenAI または Azure AI 検索リソースのキーをローテーションした後、デプロイされた各アプリのアプリ設定を更新して、新しい API キーを使用するようにする。

この Web アプリのサンプル ソース コードは GitHub で入手できます。 ソース コードはサンプルとしてのみ "そのまま" 提供しています。 お客様は、Web アプリのすべてのカスタマイズや実装を実行する責任があります。

アプリケーション ユーザー インターフェイスの変更

ユーザー インターフェイスのカスタマイズに関連する環境変数は次のとおりです。

  • UI_CHAT_DESCRIPTION: これは、読み込み時にページの中央にある UI_CHAT_TITLE の下に表示される小さな段落テキストです。
    • データ型: テキスト
  • UI_CHAT_LOGO: これは、読み込み時にページの中央に表示される大きな画像です。
    • データ型: 画像への URL
  • UI_CHAT_TITLE: これは、読み込み時にページの中央に表示される大きなテキストです。
    • データ型: テキスト
  • UI_FAVICON: これは、ブラウザー ウィンドウ/タブに表示されるファビコンです。
    • データ型: 画像への URL
  • UI_LOGO: これは、ページの左上とタイトルの左側に表示されるロゴです。
    • データ型: 画像への URL
  • UI_TITLE: これは、ブラウザー ウィンドウ/タブに表示されるタイトルです。また、ページの左上にロゴでも表示されます。
    • データ型: テキスト
  • UI_SHOW_SHARE_BUTTON: このボタンはページの右上に表示され、ユーザーは Web アプリにリンクしている URL を共有できます。
    • データ型: ブール値。True または False を入力する必要があります。空白または指定しない場合、既定値は True になります。
  • UI_SHOW_CHAT_HISTORY_BUTTON: これは、ページの右上と UI_SHOW_SHARE_BUTTON の左側に表示されます。
    • データ型: ブール値。True または False を入力する必要があります。空白または指定しない場合、既定値は True になります。

アプリケーションのユーザー インターフェイスを変更するには、前の手順の指示に従って、Web アプリの環境変数ページを開きます。 次に、[高度な編集] を使用して JSON ベースのエディターを開きます。 JSON の先頭 ([ 文字の後) に、次のコード ブロックを貼り付け、値を適宜カスタマイズします。

  {
    "name": "UI_CHAT_DESCRIPTION",
    "value": "This is an example of a UI Chat Description. Chatbots can make mistakes. Check important info and sensitive info.",
    "slotSetting": false
  },
  {
    "name": "UI_CHAT_LOGO",
    "value": "https://learn-bot.azurewebsites.net/assets/Contoso-ff70ad88.svg",
    "slotSetting": false
  },
  {
    "name": "UI_CHAT_TITLE",
    "value": "This is an example of a UI Chat Title. Start chatting",
    "slotSetting": false
  },
  {
    "name": "UI_FAVICON",
    "value": "https://learn-bot.azurewebsites.net/assets/Contoso-ff70ad88.svg",
    "slotSetting": false
  },
  {
    "name": "UI_LOGO",
    "value": "https://learn-bot.azurewebsites.net/assets/Contoso-ff70ad88.svg",
    "slotSetting": false
  },
  {
    "name": "UI_TITLE",
    "value": "This is an example of a UI Title",
    "slotSetting": false
  },

Cosmos DB を使用したチャット履歴の有効化

Web アプリのユーザーに対してチャット履歴を有効にすることができます。 この機能を有効にすると、ユーザーは以前の個々のクエリと応答にアクセスできます。

チャット履歴を有効にするには、Azure OpenAI Studio または Azure AI Foundry を使用して、モデルを Web アプリとしてデプロイまたは再デプロイし、[Web アプリでチャット履歴とユーザー フィードバックを有効にする] を選択します。

Azure OpenAI または Azure AI Foundry でチャット履歴を有効にするチェック ボックスのスクリーンショット。

重要

チャット履歴を有効にすると、リソース グループに Azure Cosmos DB インスタンスが作成され、無料レベルを超えて使用するストレージに対して追加料金が発生します。

チャット履歴を有効にしたら、ユーザーはアプリの右上隅にそれを表示したり非表示にしたりできます。 チャット履歴を表示する場合、会話の名前を変更したり、削除したりできます。 前のセクションで指定した環境変数 UI_SHOW_CHAT_HISTORY_BUTTON を使用して、ユーザーがこの機能にアクセスできるかどうかを変更できます。 ユーザーはアプリにサインインしているため、会話は自動的に新しいものから古いものの順に表示されます。 会話は、会話の最初のクエリに基づいて名前が付けられます。

Note

米国東部などの一般的な Azure リージョンでは、需要が高い期間が発生し、Cosmos DB の新しいインスタンスをデプロイできない可能性があります。 その場合は、米国東部 2 などの代替リージョンにデプロイするか、成功するまでデプロイを再試行します。 Cosmos DB のデプロイが失敗した場合、アプリは指定された URL で使用できますが、チャット履歴は使用できません。 会話履歴を有効にすると、右上の [会話履歴の表示] ボタンも有効になります。

選択したチャット履歴オプションを使用してデプロイすると、次の環境変数が自動的に設定されるため、Cosmos DB インスタンスを切り替える場合を除き、変更する必要はありません。 これらは次のとおりです。

  • AZURE_COSMOSDB_ACCOUNT: これは、Web アプリと共にデプロイされる Cosmos DB アカウントの名前です。
    • データ型: テキスト
  • AZURE_COSMOSDB_ACCOUNT_KEY: これは、Microsoft Entra ID を介してアクセス許可が付与されず、キーベースの認証が代わりに使用される場合にのみ使用される代替環境変数です。
    • データ型: テキスト。 通常は、存在しないか、設定されていません。
  • AZURE_COSMOSDB_DATABASE: これは、Web アプリと共にデプロイされる Cosmos DB 内のデータベース オブジェクトの名前です。
    • データ型: テキスト。db_conversation_history にする必要があります。
  • AZURE_COSMOSDB_CONTAINER: これは、Web アプリと共にデプロイされる Cosmos DB 内のデータベース コンテナー オブジェクトの名前です。
    • データ型: テキスト。conversations にする必要があります。
  • AZURE_COSMOSDB_ACCOUNT: これは、Web アプリと共にデプロイされる Cosmos DB アカウントの名前です。
    • データ型: テキスト

Web アプリのチャット履歴のスクリーンショット。

ユーザー フィードバックの収集

ユーザーのフィードバックを収集するには、チャットボットの各応答に表示される一連の "サムズアップ" アイコンと "サムズダウン" アイコンを有効にすることができます。 これにより、ユーザーは応答の品質を評価し、"否定的なフィードバックを提供する" モーダル ウィンドウを使用してエラーが発生する場所を示すことができます。

この機能を有効にするには、次の環境変数を True に設定します。

  • AZURE_COSMOSDB_ENABLE_FEEDBACK: これは、Web アプリと共にデプロイされる Cosmos DB アカウントの名前です。
    • データ型: データ型: ブール値。True または False を入力する必要があります

これは、前に説明したように、[高度な編集] または [単純な編集] オプションを使用して実行できます。 [高度な編集] で JSON エディターに貼り付ける JSON は次のとおりです。

  {
    "name": "AZURE_COSMOSDB_ENABLE_FEEDBACK",
    "value": "True",
    "slotSetting": false
  },

データ ソースとして Azure AI 検索とアップロードされたファイルに接続する

Azure AI Foundry を使用する

Azure AI 検索と Azure AI Foundry を統合するチュートリアルに従って、アプリケーションを再デプロイします。

Azure OpenAI Studio を使用する

Azure AI 検索と OpenAI Studio を統合するチュートリアルに従って、アプリケーションを再デプロイします。

環境変数の使用

アプリを再デプロイせずに Azure AI 検索に接続するには、前述の編集オプションのいずれかを使用して、次の必須環境変数を変更できます。

  • DATASOURCE_TYPE: これによって、ユーザーのクエリに応答するときに使用するデータ ソースが決まります。
    • データ型: テキスト。 AzureCognitiveSearch に設定する必要があります (Azure AI 検索の旧名)
  • AZURE_SEARCH_SERVICE: これは Azure AI 検索インスタンスの名前です。
    • データ型: テキスト
  • AZURE_SEARCH_INDEX: これは、Azure AI 検索インスタンスのインデックス名の名前です。
    • データ型: テキスト
  • AZURE_SEARCH_KEY: これは、Azure AI 検索インスタンスの認証キーです。 認証に Microsoft Entra ID を使用する場合は省略可能です。
    • データ型: テキスト

環境変数を使用したその他のカスタマイズ シナリオ

  • AZURE_SEARCH_USE_SEMANTIC_SEARCH: Azure AI 検索でセマンティック検索を使用するかどうかを示します。
    • データ型: ブール値。セマンティック検索を使用しない場合は、False に設定する必要があります。
  • AZURE_SEARCH_SEMANTIC_SEARCH_CONFIG: セマンティック検索が有効な場合に使用するセマンティック検索構成の名前を指定します。
    • データ型: テキスト。既定値は azureml-default
  • AZURE_SEARCH_INDEX_TOP_K: Azure AI 検索から取得する上位ドキュメントの数を定義します。
    • データ型: 整数。5 に設定する必要があります。
  • AZURE_SEARCH_ENABLE_IN_DOMAIN: データのみに関連するクエリへの応答を制限します。
    • データ型: ブール値。True に設定する必要があります。
  • AZURE_SEARCH_CONTENT_COLUMNS: ボットの応答を作成するときに使用される、ドキュメントのテキスト コンテンツを含む Azure AI 検索インデックス内のフィールドの一覧を指定します。
    • データ型: テキスト。既定では、Azure AI Foundry または Azure OpenAI Studio からデプロイされた場合は content となります。
  • AZURE_SEARCH_FILENAME_COLUMN: UI に表示するソース データの一意識別子を提供する Azure AI 検索インデックスのフィールドを指定します。
    • データ型: テキスト。既定では、Azure AI Foundry または Azure OpenAI Studio からデプロイされた場合は filepath となります。
  • AZURE_SEARCH_TITLE_COLUMN: UI に表示するデータ コンテンツに関連するタイトルまたはヘッダーを提供する Azure AI 検索インデックスのフィールドを指定します。
    • データ型: テキスト。既定では、Azure AI Foundry または Azure OpenAI Studio からデプロイされた場合は title となります。
  • AZURE_SEARCH_URL_COLUMN: ドキュメントの URL を含む Azure AI 検索インデックスのフィールドを指定します。
    • データ型: テキスト。既定では、Azure AI Foundry または Azure OpenAI Studio からデプロイされた場合は url となります。
  • AZURE_SEARCH_VECTOR_COLUMNS: ボットの応答を作成するときに使用される、ドキュメントのベクター埋め込みを含む Azure AI 検索インデックス内のフィールドの一覧を指定します。
    • データ型: テキスト。既定では、Azure AI Foundry または Azure OpenAI Studio からデプロイされた場合は contentVector となります。
  • AZURE_SEARCH_QUERY_TYPE: 使用するクエリの種類を指定します (simplesemanticvectorvectorSimpleHybrid、または vectorSemanticHybrid)。 この設定は、AZURE_SEARCH_USE_SEMANTIC_SEARCH よりも優先されます。
    • データ型: テキスト。vectorSemanticHybrid を使用してテストすることをお勧めします。
  • AZURE_SEARCH_PERMITTED_GROUPS_COLUMN: Microsoft Entra グループ ID を含む Azure AI 検索インデックスのフィールドを指定し、ドキュメント レベルのアクセス制御を決定します。
    • データ型: テキスト
  • AZURE_SEARCH_STRICTNESS: データに対する応答を制限するモデルの厳密度レベルを指定します。
    • データ型: 整数。15 の間で設定する必要があり、3 が推奨されます。
  • AZURE_OPENAI_EMBEDDING_NAME: ベクトル検索を使用する場合に、埋め込みモデル デプロイの名前を指定します。
    • データ型: テキスト

[高度な編集] で JSON エディターに貼り付ける JSON は次のとおりです。

{
    "name": "AZURE_SEARCH_CONTENT_COLUMNS",
    "value": "",
    "slotSetting": false
  },
  {
    "name": "AZURE_SEARCH_ENABLE_IN_DOMAIN",
    "value": "true",
    "slotSetting": false
  },
  {
    "name": "AZURE_SEARCH_FILENAME_COLUMN",
    "value": "",
    "slotSetting": false
  },
  {
    "name": "AZURE_SEARCH_INDEX",
    "value": "",
    "slotSetting": false
  },
  {
    "name": "AZURE_SEARCH_KEY",
    "value": "",
    "slotSetting": false
  },
  {
    "name": "AZURE_SEARCH_PERMITTED_GROUPS_COLUMN",
    "value": "",
    "slotSetting": false
  },
  {
    "name": "AZURE_SEARCH_QUERY_TYPE",
    "value": "vectorSemanticHybrid",
    "slotSetting": false
  },
  {
    "name": "AZURE_SEARCH_SEMANTIC_SEARCH_CONFIG",
    "value": "azureml-default",
    "slotSetting": false
  },
  {
    "name": "AZURE_SEARCH_SERVICE",
    "value": "",
    "slotSetting": false
  },
  {
    "name": "AZURE_SEARCH_STRICTNESS",
    "value": "3",
    "slotSetting": false
  },
  {
    "name": "AZURE_SEARCH_TITLE_COLUMN",
    "value": "",
    "slotSetting": false
  },
  {
    "name": "AZURE_SEARCH_TOP_K",
    "value": "5",
    "slotSetting": false
  },
  {
    "name": "AZURE_SEARCH_URL_COLUMN",
    "value": "",
    "slotSetting": false
  },
  {
    "name": "AZURE_SEARCH_USE_SEMANTIC_SEARCH",
    "value": "true",
    "slotSetting": false
  },
  {
    "name": "AZURE_SEARCH_VECTOR_COLUMNS",
    "value": "contentVector",
    "slotSetting": false
  },

データ ソースとしてプロンプト フローに接続する

プロンプト フローでは、ユーザーのクエリに対して高度にカスタマイズ可能な RAG および処理ロジックを定義できます。

Azure AI Foundry ポータルでのプロンプト フローの作成とデプロイ

このチュートリアルに従って、Azure AI Foundry ポータルでプロンプト フローの推論エンドポイントを作成、テスト、デプロイします。

プロンプト フローから基になる引用を有効にする

この Web アプリケーションを統合したときに引用を表示するようにプロンプト フローを構成する場合は、documents (引用) と reply (自然言語の回答) と呼ばれる 2 つの主要な出力を返す必要があります。

  1. documents は JSON オブジェクトであり、次の要素を含む必要があります。 citations は、同じスキーマの後に複数の項目を含めることができるリストです。 選択した RAG パターンに基づいて、documents オブジェクトを生成して設定する必要があります。
{
    "citations": [
        {
                "content": "string",
                "id": 12345,
                "title": "string",
                "filepath": "string",
                "url": "string",
                "metadata": "string",
                "chunk_id": None,
                "reindex_id": None,
                "part_index": None
        }
    ],
    "intent": "Your_string_here"
}
  1. reply は、特定のユーザー クエリに対する最終的な自然言語を表す、返される文字列で構成されます。 reply には、[doc1], [doc2] などの形式の各ドキュメント (ソース) への参照が含まれている必要があります。Web アプリケーションは reply 解析し、参照を処理します。[doc1] のすべてのインスタンスを、返される順序付き documents に直接リンクする小さな上付き数字インジケーターに置き換えます。 そのため、これらの参照を含むように最終的な自然言語を生成する LLM にプロンプトを表示する必要があります。これは、LLM 呼び出しにも渡して、それらが正しく揃っていることを確認する必要があります。 次に例を示します。
system:
You are a helpful chat assistant that answers a user's question based on the information retrieved from a data source. 

YOU MUST ALWAYS USE CITATIONS FOR ALL FACTUAL RESPONSES. YOU MUST INCLUDE CITATIONS IN YOUR ANSWER IN THE FORMAT [doc1], [doc2], ... AND SO FORTH WHEN YOU ARE USING INFORMATION RELATING TO SAID SOURCE. THIS MUST BE RETURNED IN YOUR ANSWER.

Provide sort and concise answers with details directly related to the query. 

## Conversation history for context
{% for item in chat_history %}
user:
{{item.inputs.query}}

assistant:
{{item.outputs.reply}}
{% endfor %}

## Current question
user:
### HERE ARE SOME CITED SOURCE INFORMATION FROM A MOCKED API TO ASSIST WITH ANSWERING THE QUESTION BELOW. ANSWER ONLY BASED ON THE TRUTHS PRESENTED HERE.
{{your_input_name_for_documents}}
FOR EACH OF THE CITATIONS ABOVE, YOU MUST INCLUDE IN YOUR ANSWER [doc1], [doc2], ... AND SO FORTH WHEN YOU ARE USING INFORMATION RELATING TO SAID SOURCE. THIS MUST BE RETURNED IN YOUR ANSWER.
### HERE IS THE QUESTION TO ANSWER.
{{question}}
  

プロンプト フローを統合するための環境変数の構成

変更する環境変数は次のとおりです。

  • AZURE_OPENAI_STREAM: これは、応答がストリーミング (増分読み込み) 形式で読み込まれるかどうかを決定します。 これはプロンプト フローではサポートされていないため、この機能を使用するには False に設定する必要があります。
    • データ型: ブール値。プロンプト フローを使用しない場合は True に設定し、プロンプト フローを使用する場合は False に設定します
  • USE_PROMPTFLOW: 既存のプロンプト フローがデプロイされたエンドポイントを使用するかどうかを示します。 True に設定する場合は、PROMPTFLOW_ENDPOINTPROMPTFLOW_API_KEY の両方を設定する必要があります。
    • データ型: ブール値。プロンプト フローを使用しない場合は、False に設定する必要があります。
  • PROMPTFLOW_ENDPOINT: デプロイされたプロンプト フロー エンドポイントの URL を指定します。
    • データ型: テキスト。(例: https://pf-deployment-name.region.inference.ml.azure.com/score)
  • PROMPTFLOW_API_KEY: デプロイされたプロンプト フロー エンドポイントの認証キー。 注: キーベースの認証のみがサポートされています。
    • データ型: テキスト
  • PROMPTFLOW_RESPONSE_TIMEOUT: プロンプト フロー エンドポイントが応答するためのタイムアウト値を秒単位で定義します。
    • データ型: 整数。120 に設定する必要があります。
  • PROMPTFLOW_REQUEST_FIELD_NAME: プロンプト フロー要求を作成するための既定のフィールド名。 注: chat_history は、対話に基づいて自動的に構築されます。 API で他の必須フィールドが必要な場合は、promptflow_request 関数で要求パラメーターを変更する必要があります。
    • データ型: テキスト。query に設定する必要があります。
  • PROMPTFLOW_RESPONSE_FIELD_NAME: プロンプト フロー要求からの応答を処理する既定のフィールド名。
    • データ型: テキスト。reply に設定する必要があります。
  • PROMPTFLOW_CITATIONS_FIELD_NAME: プロンプト フロー要求からの引用出力を処理する既定のフィールド名。
    • データ型: テキスト。documents に設定する必要があります。

その他のデータ ソースに接続する

次のようなその他のデータ ソースがサポートされています。

  • Azure Cosmos DB
  • Elasticsearch
  • Azure SQL Server
  • Pinecone
  • Azure Machine Learning インデックス

これらのデータ ソースを有効にする手順の詳細については、GitHub リポジトリを参照してください。

最新の変更を含むように Web アプリを更新する

Note

2024 年 2 月 1 日以降、Web アプリではアプリ スタートアップ コマンドを python3 -m gunicorn app:app に設定する必要があります。 2024 年 2 月 1 日より前に発行されたアプリを更新する場合は、[App Service 構成] ページからスタートアップ コマンドを手動で追加する必要があります。

Web アプリのソース コードの main ブランチの変更を頻繁にプルして、最新のバグ修正、API バージョン、機能強化を反映することをお勧めします。 さらに、使用している API バージョンが廃止されるたびに、Web アプリを同期する必要があります。 Web アプリの GitHub リポジトリ[ウォッチ] または [スター] ボタンのいずれかを選択して、ソース コードの変更と更新に関する通知を受け取ることを検討してください。

Web アプリをカスタマイズしていない場合は、次の手順に従って同期できます。

  1. Azure portal で、Web アプリに移動します。

  2. 左側のメニューで、[デプロイ] の下にある [デプロイ センター] を選択します。

  3. ウィンドウの上部にある [同期] を選択し、アプリが再デプロイされることを確認します。

    Azure portal の Web アプリの同期ボタンのスクリーンショット。

アプリのソース コードをカスタマイズまたは変更した場合は、アプリのソース コードを手動で更新し、再デプロイする必要があります。

  • アプリが GitHub でホストされている場合は、コードの変更をリポジトリにプッシュし、前述の同期手順を使用します。
  • アプリを手動で再デプロイする場合 (Azure CLI を使用するなど)、デプロイ戦略の手順に従います。

Cosmos DB インスタンスの削除

Web アプリを削除しても、Cosmos DB インスタンスは自動的に削除されません。 保存されているすべてのチャットと共に Cosmos DB インスタンスを削除するには、Azure portal 内の関連付けられたリソースに移動して削除する必要があります。 Cosmos DB リソースを削除しても、Azure OpenAI Studio によるその後の更新でチャット履歴オプションが選択されたままになっていると、アプリケーションはユーザーに接続エラーを通知します。 ただし、ユーザーはチャット履歴にアクセスしなくても、引き続き Web アプリを使用できます。

サービス間での Microsoft Entra ID 認証の有効化

Web アプリのサービス内認証に対して Microsoft Entra ID を有効にするには、次の手順に従います。

Azure OpenAI リソースと Azure App Service でマネージド ID を有効にする

Azure OpenAI リソースと Azure App Service のマネージド ID を有効にするには、[ID] に移動し、リソースごとに Azure portal でシステム割り当てマネージド ID を有効にします。

Azure portal でのアプリケーション ID の構成を示すスクリーンショット。

Note

推論に使用されるのと同じリソースにデプロイされた埋め込みモデルを使用している場合は、1 つのAzure OpenAI リソースでマネージド ID を有効にするだけで済みます。 推論に使用されるリソースとは異なるリソースにデプロイされた埋め込みモデルを使用する場合は、埋め込みモデルのデプロイに使用される Azure OpenAI リソースでマネージド ID を有効にすることも必要です。

Azure Search リソースでロールベースのアクセス制御 (RBAC) を有効にする (省略可能)

Azure Search で On Your Data を使用する場合は、この手順に従う必要があります。

Azure OpenAI リソースに Azure Search リソースへのアクセスを許可するには、Azure Search リソースに対してロールベースのアクセス制御を有効にする必要があります。 リソースに対しての RBAC ロールの有効化について説明します。

RBAC ロールを割り当ててサービス内通信を有効にする

次の表は、アプリケーションに関連付けられたすべての Azure リソースに必要な RBAC ロールの割り当てをまとめたものです。

ロール 割当先 リソース
Search Index Data Reader Azure OpenAI (推論) Azure AI Search
Search Service Contributor Azure OpenAI (推論) Azure AI Search
Cognitive Services OpenAI User Web アプリ Azure OpenAI (推論)
Cognitive Services OpenAI User Azure OpenAI (推論) Azure OpenAI (埋め込み)

これらのロールを割り当てるには、次の手順に従って、必要なロールの割り当てを作成します。

アプリ設定の変更

Web アプリ アプリケーションの設定で、[環境変数] に移動し、次の変更を行います。

  • 不要になった環境変数 AZURE_OPENAI_KEY を削除します。
  • Azure Search で On Your Data を使用していて、Azure OpenAI と Azure Search の間で Microsoft Entra ID 認証を使用している場合は、データ ソース アクセス キーの AZURE_SEARCH_KEY 環境変数も削除する必要があります。

推論に使用したモデルと同じリソースにデプロイされた埋め込みモデルを使用する場合、他の設定の変更は必要ありません。

ただし、別のリソースにデプロイされた埋め込みモデルを使用している場合は、アプリの環境変数に次の追加の変更を加えます。

  • AZURE_OPENAI_EMBEDDING_ENDPOINT 変数を、埋め込み用に使用しているリソースの埋め込み API の完全な API パスに設定します (例: https://<your Azure OpenAI Service resource name>.openai.azure.com/openai/deployments/<your embedding deployment name>/embeddings)
  • Microsoft Entra ID 認証を使用するには、AZURE_OPENAI_EMBEDDING_KEY 変数を削除します。

環境変数の変更がすべて完了したら、Web アプリを再起動して、Web アプリ内のサービス間で Microsoft Entra ID 認証の使用を開始します。 再起動後、設定の変更が有効になるまで数分かかります。