From ec69a92593528799c1af5d3ad59d142a2a966b48 Mon Sep 17 00:00:00 2001 From: olprod Date: Fri, 16 Feb 2024 17:45:17 -0800 Subject: [PATCH] Copy Files From Source Repo (2024-02-16 17:45) --- .../Exercises/01-Explore-ai-studio.md | 91 ++++++++ Instructions/Exercises/02-Use-prompt-flow.md | 171 +++++++++++++++ Instructions/Exercises/03-Use-own-data.md | 203 ++++++++++++++++++ README.md | 10 +- 4 files changed, 474 insertions(+), 1 deletion(-) create mode 100644 Instructions/Exercises/01-Explore-ai-studio.md create mode 100644 Instructions/Exercises/02-Use-prompt-flow.md create mode 100644 Instructions/Exercises/03-Use-own-data.md diff --git a/Instructions/Exercises/01-Explore-ai-studio.md b/Instructions/Exercises/01-Explore-ai-studio.md new file mode 100644 index 0000000..665d5d5 --- /dev/null +++ b/Instructions/Exercises/01-Explore-ai-studio.md @@ -0,0 +1,91 @@ +--- +lab: + title: Azure AI Studio を探索する +--- + +# Azure AI Studio を探索する + +この演習では、Azure AI Studio を使用してプロジェクトを作成し、生成 AI モデルについて詳しく調べます。 + +> **注**:Azure AI Studio は、執筆時点でプレビュー段階にあり、現在活発に開発されています。 このサービスの一部の要素は正確に説明されていない場合があり、一部の機能は期待どおりに動作しない場合があります。 + +> この演習を完了するには、Azure OpenAI サービスへのアクセスについて Azure サブスクリプションが承認されている必要があります。 + +この演習は約 **30** 分かかります。 + +## Azure AI Studio を開く + +まず、Azure AI Studio を表示します。 + +1. Web ブラウザーで [https://ai.azure.com](https://ai.azure.com) を開き、Azure の資格情報を使ってサインインします。 Azure AI Studio のホーム ページは次の画像のようになります。 + + ![Azure AI Studio のスクリーンショット。](./media/azure-ai-studio-home.png) + +1. ホーム ページの情報を確認し、各タブを表示して、モデルと機能の探索、プロジェクトの作成、リソースの管理のオプションを確認します。 + +## Azure AI ハブを作成する + +プロジェクトをホストするには、Azure サブスクリプションに Azure AI ハブが必要です。 このリソースは、プロジェクトの作成中に作成するか、事前にプロビジョニングすることができます (この演習ではこちらを行います)。 + +1. **[管理]** ページで、**[+ New Azure AI Hub]\(新しい Azure AI ハブ\)** を選びます。 次に、**[Create a new Azure AI Hub]\(新しい Azure AI ハブの作成\)** ウィザードで、次の設定で新しいリソースを作成します。 + - **Azure AI Hub 名**:*一意の名前* + - **[サブスクリプション]**:"*ご自身の Azure サブスクリプション*" + - **[リソース グループ]**: "一意の名前で新しいリソース グループを作成するか、既存のものを選びます"** + - **[場所]**: "Azure OpenAI サービスでサポートされている場所を選びます"** + - **Azure OpenAI**:(新機能) ai-*hub_name* + - **AI 検索**:(なし) + + Azure AI ハブが作成されると、次の画像のようになります。 + + ![Azure AI Studio の Azure AI ハブの詳細のスクリーンショット。](./media/azure-ai-resource.png) + +1. 新しいブラウザー タブを開き ([Azure AI Studio] タブは開いたままにします)、Azure portal ([https://portal.azure.com](https://portal.azure.com?azure-portal=true)) に移動します。プロンプトが表示されたら、Azure の資格情報を使ってサインインします。 +1. Azure AI ハブを作成したリソース グループに移動し、作成された Azure リソースを表示します。 + + ![Azure portal の Azure AI ハブと関連リソースのスクリーンショット。](./media/azure-portal.png) + +1. Azure AI Studio ブラウザー タブに戻ります。 +1. Azure AI ハブのページの左側のペインにある各ページを表示し、作成および管理できる成果物を確認します。 **[接続]** ページで、**Default_AzureOpenAI** という名前の Azure AI ハブを使用して作成した Azure OpenAI リソースへの接続が既に作成されていることを確認します。 + +## プロジェクトの作成 + +Azure AI ハブは、1 つ以上の "プロジェクト" を定義できる共同ワークスペースとして機能します。** Azure AI ハブにプロジェクトを作成してみましょう。 + +1. Azure AI Studio の **[ビルド]** ページで、**[+ 新しいプロジェクト]** を選びます。 次に、**[新しいプロジェクトの作成]** ウィザードで、次の設定でプロジェクトを作成します。 + - **プロジェクト名**:"プロジェクトの一意の名前"** + - **AI Hub**:*AI ハブ* +1. プロジェクトが作成されるまで待ちます。 準備ができたら、次の画像のようになります。 + + ![Azure AI Studio のプロジェクト詳細ページのスクリーンショット。](./media/azure-ai-project.png) + +1. 左側のペインにあるページを表示して各セクションを展開し、プロジェクト内で実行できるタスクと管理できるリソースを確認します。 + +## モデルのデプロイとテスト + +プロジェクトを使って、生成 AI モデルに基づいた複雑な AI ソリューションを作成できます。 Azure AI Studio で使用できるすべての開発オプションを詳しく説明することはこの演習の範囲を超えていますが、プロジェクト内でモデルを操作するための基本的な方法をいくつか説明します。 + +1. プロジェクトの左側のペインの **[コンポーネント]** セクションで、**[デプロイ]** ページを選択します。 +1. **[デプロイ]** ページで、**[+ 作成]** を選択し、リアルタイム エンドポイントのデプロイを作成します。 +1. **[モデルの選択]** リストで **gpt-35-turbo** モデルを選び、選択を確定します。 次に、以下の設定を使ってモデルをデプロイします。 + - **デプロイ名**:"モデル デプロイの一意の名前"** + - **モデル**: gpt-35-turbo + - **モデルのバージョン**: *Select the default version (既定のバージョンの選択)* + - **詳細オプション**: + - **コンテンツ フィルター**: 既定 + - **デプロイの種類**:Standard + - **1 分あたりのトークン数のレート制限 (1,000 単位)**:5,000 + + > **注**:TPM を減らすと、ご利用のサブスクリプション内で使用可能なクォータが過剰に消費されるのを回避するのに役立ちます。 この演習で使用するデータは、5,000 TPM で十分です。 + +1. モデルがデプロイされたら、左側のペインにある **[ツール]** セクションで **[プレイグラウンド]** ページを選びます。 +1. **[プレイグラウンド]** ページの **[構成]** セクションでモデル デプロイが選ばれていることを確認します。 次に、**[チャット セッション]** セクションに「AI とは何ですか?」などのクエリを入力し、応答を表示します。** + + ![Azure AI Studio のプレイグラウンドのスクリーンショット。](./media/playground.png) + +## クリーンアップ + +Azure AI Studio を確認し終わったら、不要な Azure コストが発生しないように、この演習で作成したリソースを削除する必要があります。 + +1. Azure portal が表示されているブラウザー タブに戻り (または、新しいブラウザー タブで [Azure portal](https://portal.azure.com?azure-portal=true) をもう一度開き)、この演習で使ったリソースがデプロイされているリソース グループの内容を表示します。 +1. ツール バーの **[リソース グループの削除]** を選びます。 +1. リソース グループ名を入力し、削除することを確認します。 diff --git a/Instructions/Exercises/02-Use-prompt-flow.md b/Instructions/Exercises/02-Use-prompt-flow.md new file mode 100644 index 0000000..ff98ecb --- /dev/null +++ b/Instructions/Exercises/02-Use-prompt-flow.md @@ -0,0 +1,171 @@ +--- +lab: + title: Azure AI Studio でのプロンプト フローの概要 +--- + +# Azure AI Studio でのプロンプト フローの概要 + +テキストから価値のある情報を抽出することは、固有表現認識 (NER) と呼ばれます。 エンティティとは、特定のテキスト内でユーザーの興味を引くキーワードです。 + +![エンティティ抽出](./media/get-started-prompt-flow-use-case.gif) + +大規模言語モデル (LLM) を使って NER を実行できます。 入力としてテキストを受け取ってエンティティを出力するアプリケーションを作成するには、プロンプト フローで LLM ノードを使うフローを作成できます。 + +この演習では、Azure AI Studio のプロンプト フローを使って、エンティティの種類とテキストを入力として想定する LLM アプリケーションを作成します。 これは、LLM ノードから Azure OpenAI の GPT モデルを呼び出して、指定されたテキストから必要なエンティティを抽出し、結果をクリーンアップして抽出されたエンティティを出力します。 + +![演習の概要](./media/get-started-lab.png) + +まず、Azure AI Studio でプロジェクトを作成して、必要な Azure リソースを作成する必要があります。 その後、Azure OpenAI サービスを使って GPT モデルをデプロイできます。 必要なリソースが揃ったら、フローを作成できます。 最後に、フローを実行してテストし、サンプル出力を確認します。 + +## Azure AI Studio でプロジェクトを作成する + +最初に、Azure AI Studio プロジェクトと、それをサポートする Azure AI ハブを作成します。 + +1. Web ブラウザーで [https://ai.azure.com](https://ai.azure.com) を開き、Azure の資格情報を使ってサインインします。 +1. **[ビルド]** ページを選んでから、**[+ 新しいプロジェクト]** を選びます。 +1. **[新しいプロジェクトの作成]** ウィザードで、次の設定を使ってプロジェクトを作成します。 + - **プロジェクト名**:"プロジェクトの一意の名前"** + - **[Azure Hub] (Azure ハブ)**: "次の設定で新しいリソースを作成します。"** + - **[AI Hub name] (AI ハブ名)**: *一意の名前* + - **[サブスクリプション]**:"*ご自身の Azure サブスクリプション*" + - **[リソース グループ]**: "新しいリソース グループ"** + - **[場所]**: "近くの場所を選びます"** +1. 構成を確認して、プロジェクトを作成します。 +1. プロジェクトが作成されるまで 5 から 10 分待ちます。 + +## GPT モデルをデプロイする + +プロンプト フローで LLM モデルを使うには、まずモデルをデプロイする必要があります。 Azure AI Studio を使うと、フローで使用できる OpenAI モデルをデプロイできます。 + +1. 左側のナビゲーション ウィンドウの **[コンポーネント]** で、**[デプロイ]** ページを選びます。 +1. Azure OpenAI Studio で、**[デプロイ]** ページに移動します。 +1. 次の設定で **gpt-35-turbo** モデルの新しいデプロイを作成します。 + - **モデル**: `gpt-35-turbo` + - **モデルのバージョン**: *既定値のままにします* + - **[デプロイ名]**: `gpt-35-turbo` + - 既定のコンテンツ フィルターを使って、1 分あたりのトークン数 (TPM) を **5K** に制限するには、**[詳細設定]** オプションを設定します。 + +LLM モデルがデプロイされたので、デプロイされたモデルを呼び出すフローを Azure AI Studio で作成できます。 + +## Azure AI Studio でフローを作成して実行する + +必要なリソースがすべてプロビジョニングされたので、フローを作成できます。 + +### 新しいフローの作成 + +テンプレートで新しいフローを作成するには、開発するフローの種類を 1 つ選択できます。 + +1. 左側のナビゲーション ウィンドウの **[ツール]** で、**[プロンプト フロー]** を選びます。 +1. **[+ 作成]** を選んで、新しいフローを作成します。 +1. 新しい**標準フロー**を作成し、フォルダー名として「`entity-recognition`」と入力します。 + +1 つの入力、2 つのノード、1 つの出力を含む標準フローが自動的に作成されます。 フローを更新して、2 つの入力を受け取り、エンティティを抽出し、LLM ノードからの出力をクリーンアップし、出力としてエンティティを返すようにします。 + +### 自動ランタイムを開始する + +フローをテストするには、コンピューティングが必要です。 必要なコンピューティングは、ランタイムを通じて利用できるようになります。 + +1. `entity-recognition` という名前で新しいフローを作成すると、スタジオでそのフローが開きます。 +1. 上部のバーで **[ランタイムの選択]** フィールドを選びます。 +1. **[自動ランタイム]** ボックスの一覧で **[開始]** を選んで、自動ランタイムを開始します。 +1. ランタイムが起動するまで待ちます。 + +### 入力を構成する + +作成するフローは、テキストと、テキストから抽出するエンティティの種類という、2 つの入力を受け取ります。 + +1. **[入力]** には、名前が `topic` で型が `string` の 1 つの入力が構成されています。 既存の入力を変更し、次の設定で更新します。 + - **名前**: `entity_type` + - **型**: `string` + - **値**: `job title` +1. **[入力の追加]** を選びます。 +1. 2 番目の入力を構成して、次のように設定します。 + - **名前**: `text` + - **型**: `string` + - **値**: `The software engineer is working on a new update for the application.` + +### LLM ノードを構成する + +標準フローには、LLM ツールを使うノードが既に含まれています。 フローの概要でノードを見つけることができます。 既定のプロンプトでは、ジョークを求められます。 前のセクションで指定した 2 つの入力に基づいてエンティティを抽出するように、LLM ノードを更新します。 + +1. `joke` という名前の **LLM ノード**に移動します。 +1. 名前を `NER_LLM` に置き換えます +1. **[接続]** で、`Default_AzureOpenAI` 接続を選びます。 +1. **deployment_name** では、デプロイした `gpt-35-turbo` モデルを選びます。 +1. プロンプト フィールドを次のコードに置き換えます。 + + ```yml + {% raw %} + system: + + Your task is to find entities of a certain type from the given text content. + If there're multiple entities, please return them all with comma separated, e.g. "entity1, entity2, entity3". + You should only return the entity list, nothing else. + If there's no such entity, please return "None". + + user: + + Entity type: {{entity_type}} + Text content: {{text}} + Entities: + {% endraw %} + ``` + +1. **[入力の検証と解析]** を選びます。 +1. LLM ノードの **[入力]** セクションで、次のように構成します。 + - `entity_type` では、値 `${inputs.entity_type}` を選びます。 + - `text` では、値 `${inputs.text}` を選びます。 + +これで、この LLM ノードは、エンティティの種類とテキストを入力として受け取り、指定したプロンプトにそれを含めて、デプロイされたモデルに要求を送信するようになります。 + +### Python ノードを構成する + +モデルの結果から重要な情報のみを抽出するには、Python ツールを使って LLM ノードの出力をクリーンアップできます。 + +1. `echo` という名前の Python ノードに移動します。 +1. 名前を `cleansing` に置き換えます。 +1. のコードを次のように置き換えます。 + + ```python + from typing import List + from promptflow import tool + + + @tool + def cleansing(entities_str: str) -> List[str]: + # Split, remove leading and trailing spaces/tabs/dots + parts = entities_str.split(",") + cleaned_parts = [part.strip(" \t.\"") for part in parts] + entities = [part for part in cleaned_parts if len(part) > 0] + return entities + + ``` + +1. **[入力の検証と解析]** を選びます。 +1. Python ノードの **[入力]** セクションで、`entities_str` の値を `${NER_LLM.output}` に設定します。 + +### 出力を構成する + +最後に、フロー全体の出力を構成できます。 フローで必要な出力は 1 つだけで、それを抽出されたエンティティにする必要があります。 + +1. フローの **[出力]** に移動します。 +1. **名前**には、`entities`を入力します。 +1. **[値]** で、`${cleansing.output}` を選びます。 + +### フローを実行する + +フローの開発が済んだので、それを実行してテストできます。 入力に既定値を追加したので、スタジオでフローを簡単にテストできます。 + +1. **[実行]** を選んでフローをテストします。 +1. 実行が完了するまで待ちます。 +1. **[出力の表示]** を選びます。 既定の入力に対する出力を示すポップアップが表示されます。 必要に応じて、ログを調べることもできます。 + +## Azure リソースを削除する + +Azure AI Studio を調べ終わったら、Azure の不要なコストを避けるため、作成したリソースを削除する必要があります。 + +- [Azure portal](https://portal.azure.com) (`https://portal.azure.com`) に移動します。 +- Azure portal の **[ホーム]** ページで、**[リソース グループ]** を選択します。 +- この演習のために作成したリソース グループを選びます。 +- リソース グループの **[概要]** ページの上部で、**[リソース グループの削除]** を選択します。 +- リソース グループ名を入力して、削除することを確認し、**[削除]** を選択します。 diff --git a/Instructions/Exercises/03-Use-own-data.md b/Instructions/Exercises/03-Use-own-data.md new file mode 100644 index 0000000..1416e89 --- /dev/null +++ b/Instructions/Exercises/03-Use-own-data.md @@ -0,0 +1,203 @@ +--- +lab: + title: 独自のデータを使用するカスタム Copilot を作成する +--- + +# 独自のデータを使用するカスタム Copilot を作成する + +取得拡張生成 (RAG) は、カスタム データ ソースからのデータを、生成 AI モデルのプロンプトに統合するアプリケーションを構築するために使用される手法です。 RAG は、カスタム *Copilot* を開発するために一般的に使用されるパターンです。チャット ベースのアプリケーションでは、言語モデルを使用して入力を解釈し、適切な応答を生成します。 + +この演習では Azure AI Studio を使用して、カスタム データを生成 AI プロンプト フローに統合します。 + +> **注**:Azure AI Studio は執筆時点でプレビュー段階にあり、現在活発に開発されています。 このサービスの一部の要素は正確に説明されていない場合があり、一部の機能は期待どおりに動作しない場合があります。 + +この演習は約 **45** 分かかります。 + +## "Azure AI 検索" リソースを作成する + +Copilot ソリューションでは、カスタム データをプロンプト フローに統合します。 この統合をサポートするには、ご利用のデータのインデックス作成に使用する Azure AI 検索リソースが必要です。 + +1. Web ブラウザー内で [Azure portal](https://portal.azure.com) (`https://portal.azure.com`) を開き、ご自身の Azure 資格情報を使用してサインインします。 +1. [ホーム] ページ上で **[+ リソースの作成]** を選択し、「`Azure AI Search`」を検索します。 それから、次の設定で新しい Azure AI 検索リソースを作成します。 + - **[サブスクリプション]**: *Azure サブスクリプションを選択します* + - **[リソース グループ]**: *リソース グループを選択または作成します* + - **サービス名**:一意のサービス名を入力します** + - **[場所]**: 任意の使用可能な場所を選択します** + - **価格レベル**: Standard +1. Azure AI 検索リソースのデプロイが完了するまでお待ちください。 + +## Azure AI プロジェクトを作成する + +これで Azure AI Studio プロジェクトと、それをサポートする Azure AI リソースを作成する準備が整いました。 + +1. Web ブラウザー内で [Azure AI Studio](https://ai.azure.com) (`https://ai.azure.com`) を開き、ご自身の Azure 資格情報を使用してサインインします。 +1. **[ビルド]** ページ上で、**[+ 新しいプロジェクト]** を選択します。 次に、**[新しいプロジェクトの作成]** ウィザードで、次の設定でプロジェクトを作成します。 + - **プロジェクト名**:"プロジェクトの一意の名前"** + - **AI ハブ**:次の設定で新しいリソースを作成します。** + - **[AI hub name]**:*一意の名前* + - **Azure サブスクリプション**:"*ご自身の Azure サブスクリプション*" + - **[リソース グループ]**: ご利用の Azure AI 検索リソースを含むリソースグループを選択します** + - **[場所]**: Azure AI 検索リソースと同じ場所 (または地理的に近い場所)** + - **[Azure OpenAI]**:(new) *hub_name* + - **[Azure AI 検索]**:Azure AI 検索リソースを選択します** +1. プロジェクトが作成されるまで待ちます。 + +## モデルをデプロイする + +ソリューションを実装するには、次の 2 つのモデルが必要です。 + +- 効率的なインデックス作成と処理のためにテキスト データをベクター化する "埋め込み" モデル。** +- ご利用のデータに基づいて、質問に対する自然言語の応答を生成することができるモデル。 + +1. Azure AI Studio 内にあるプロジェクトの左側ナビゲーション ウィンドウ内で、**[コンポーネント]** の下にある **[デプロイ]** ページを選択します。 +1. 「`text-embedding-ada-002`」という名前で、**text-embedding-ada-002** モデルの新しいデプロイ ([Real-time endpoint] を使用) を作成します。 既定のコンテンツ フィルターを使用して、1 分あたりのトークン数 (TPM) を **5,000** に制限するには、**[詳細設定]** のオプションを設定します。 +1. 「`gpt-35-turbo`」という名前の、**gpt-35-turbo** モデルの新しいデプロイを作成します。 既定のコンテンツ フィルターを使用して、1 分あたりのトークン数 (TPM) を **5,000** に制限するには、**[詳細設定]** のオプションを設定します。 + +> **注**:TPM を減らすと、ご利用のサブスクリプション内で使用可能なクォータが過剰に消費されることを回避するのに役立ちます。 この演習で使用するデータには、5,000 TPM で十分です。 + +## プロジェクトにデータを追加する + +ご利用の Copilot のデータは、架空の旅行代理店 *Margie's Travel* の旅行パンフレット (PDF 形式) のセットで構成されています。 それらをプロジェクトに追加しましょう。 + +1. [パンフレットの zip 形式のアーカイブ](https://github.com/MicrosoftLearning/mslearn-ai-studio/raw/main/data/brochures.zip)を `https://github.com/MicrosoftLearning/mslearn-ai-studio/raw/main/data/brochures.zip` からダウンロードし、ローカル ファイル システム上の「**brochures**」という名前のフォルダーに展開します。 +1. Azure AI Studio 内にあるプロジェクトの左側ナビゲーション ウィンドウ内で、**[コンポーネント]** の下にある **[データ]** ページを選択します。 +1. **[+ 新しいデータ]** を選択し、"**brochures**" フォルダーをアップロードして (アップロードのオプションは、[ファイル] ではなく [フォルダー] を選択します)、新しいデータ ソース接続を追加します。**** その新しいデータ ソースに「**brochures**」という名前を付けます。 + +## データのインデックスを作成する + +これで、ご利用のプロジェクトにデータ ソースを追加したので、それを使用して Azure AI 検索リソース内にインデックスを作成することができます。 + +1. Azure AI Studio 内にあるプロジェクトの左側ナビゲーション ウィンドウ内で、**[コンポーネント]** の下にある **[インデックス]** ページを選択します。 +1. 次の設定で新しいインデックスを追加します。 + - **[ソース データ]**: + - **データ ソース**:既存のプロジェクト データを使用します + - [データ ソース] で **[brochures]** を選択します** + - **[インデックス ストレージ]**: + - ご利用の Azure AI 検索リソースへの **[AzureAISearch]** 接続を選択します** + - **[検索設定]**: + - **[Vector settings]**:ベクトル検索をこの検索リソースに追加します + - **[Azure OpenAI リソース]**:Default_AzureOpenAI + - 埋め込みモデルがデプロイされることを確認します** + - **[インデックス設定]**: + - **[インデックス名]**: brochures-index + - **仮想マシン**:自動選択 +1. インデックスの準備が整うのを待ちます。これには数分かかる場合があります。 このインデックス作成操作は、次のジョブで構成されます。 + - ご利用の brochures データ内でテキスト トークンを分解し、塊に分けて、埋め込みます + - インデックスを更新する + - インデックス資産を登録します + +## インデックスをテストする + +RAG ベースのプロンプト フローでインデックスを使用する前に、それを使用して生成 AI 応答に作用することができるのを確認しましょう。 + +1. 左側ナビゲーション ウィンドウ内で、**[ツール]** の下にある **[プレイグラウンド]** ページを選択します。 +1. [プレイグラウンド] ページ上の **[構成]** ペイン内で、**[gpt-35-turbo]** モデル デプロイが選択されていることを確認します。 次に、**[チャット セッション]** ペイン内で、プロンプト「`Where can I stay in New York?`」を送信します +1. その応答を確認します。これは、インデックスからのデータを含まない、このモデルからの一般的な回答であるはずです。 +1. **[アシスタントのセットアップ]** ペイン内で、**[データを追加する]** を選択し、次の設定でデータ ソースを追加します。 + - **データ ソース**: + - **[Select data source]**:Azure AI Search + - **[サブスクリプション]**:"*ご自身の Azure サブスクリプション*" + - **[Azure AI Search Service]**:ご利用の Azure AI 検索リソース** + - **[Azure AI Search index]**: brochures-index + - **[Add vector search]**: オフ + - **[Data field mapping]**: + - **[Content data]**: コンテンツ + - **[File name]**: filepath + - **[Title]**: タイトル + - **[URL]**: url + - ** データ管理**: + - **[search type]**: キーワード +1. データ ソースが追加され、チャット セッションが再開された後に、プロンプト「`Where can I stay in New York?`」を再送信します +1. その応答を確認します。インデックス内のデータに基づいているはずです。 + +## プロンプト フロー内でインデックスを使用する + +ベクター インデックスはご利用の Azure AI Studio プロジェクト内に保存されており、プロンプト フロー内で簡単に使用することができます。 + +1. Azure AI Studio 内にあるプロジェクトの左側ナビゲーション ウィンドウ内で、**[コンポーネント]** の下にある **[データ]** を選択します。 +1. 前に作成したインデックス用のデータを含む "**brochures-index**" フォルダーを選択します。 +1. インデックスの **[データ リンク]** セクション内で、**[ストレージの URI]** の値をクリップボードにコピーします (`https://xxx.blob.core.windows.net/xxx/azureml/xxx/index/` のようになるはずです)。 プロンプト フロー内でインデックス データに接続するために、この URI が必要になります。 +1. プロジェクトの左側ナビゲーション ウィンドウ内で、**[ツール]** の下にある **[プロンプト フロー]** ページを選択します。 +1. ギャラリー内の **[Multi-Round Q&A on Your Data]** サンプルを複製して、新しいプロンプト フローを作成します。 このサンプルの複製を、「`brochure-flow`」という名前のフォルダー内に保存します。 +1. プロンプト フロー デザイナー ページが開いたら、**[brochure-flow]** を確認します。 そのグラフは、次の画像のようになるはずです。 + + ![プロンプト フロー グラフのスクリーンショット](./media/brochure-flow.png) + + 使用しているサンプル プロンプト フローには、ユーザーがチャット インターフェイスにテキスト入力を繰り返し送信することができる、チャット アプリケーション用のプロンプト ロジックが実装されています。 会話履歴は保持され、繰り返しのたびにコンテキスト内に含まれます。 このプロンプト フローでは、一連の "ツール" を調整して次の操作を行います。** + + 1. チャット入力に履歴を追加して、質問のコンテキスト化された形式でプロンプトを定義します。 + 1. その質問の "埋め込み" を作成します (埋め込みモデルを使用して、テキストをベクターに変換します)。** + 1. その質問に基づいて、ベクター インデックスで関連情報を検索します。 + 1. そのインデックスから取得したデータを使用してプロンプト コンテキストを生成し、質問を補足します。 + 1. システム メッセージを追加し、チャット履歴を構造化して、プロンプト バリアントを作成します。 + 1. そのプロンプトを言語モデルに送信して、自然言語の応答を生成します。 + +1. **[ランタイム]** 一覧の中で、**[開始]** を選択して自動ランタイムを開始します。 次に、その開始を待ちます。 これにより、プロンプト フロー用のコンピューティング コンテキストが提供されます。 待っている間に、**[フロー]** タブ内で、フロー内のツールのセクションを確認します。 +1. **[入力]** セクション内で、入力に **[chat_history]** と **[chat_input]** が含まれるようにします。 このサンプル内の既定のチャット履歴には、AI に関するいくつかの会話が含まれています。 +1. **[出力]** セクション内で、**[chat_output]** の値が *${chat_with_context.output}* であることを確認します。 +1. **[modify_query_with_history]** セクション内で、次の設定を選択します (他の設定はそのまま残します)。 + - **[接続]**:Default_AzureOpenAI + - **Api**:チャット + - **[deployment_name]**: gpt-35-turbo + - **[response_format]**: {"type":"text"} +1. **[embed_the_question]** セクション内で、次のパラメーター値を設定します。 + - **[Connection]***(Azure OpenAI, OpenAI)*:Default_AzureOpenAI + - **[deployment_name]** *(string)*: text-embedding-ada-00 + - **[input]** *(string)*: ${modify_query_with_history.output} +1. **[search_question_from_indexed_docs]** セクション内で、次のパラメーター値を設定します。 + - **[path]** *(string)*:既存の URI を削除し、ご利用のベクター インデックスの URI を貼り付けます** + - **[query]** *(object)*: ${embed_the_question.output} + - **[top_k]** *(int)*:2 +1. **[generate_prompt_context]** セクション内で、Python スクリプトを確認し、このツールの **[入力]** に次のパラメーターが含まれるようにします。 + - **[search_result]** *(object)*: ${search_question_from_indexed_docs.output} +1. **[Prompt_variants]** セクション内で、Python スクリプトを確認し、このツールの **[入力]** に次のパラメーターが含まれるようにします。 + - **[contexts]** *(string)*: ${generate_prompt_context.output} + - **[chat_history]** *(string)*: ${inputs.chat_history} + - **[chat_input]** *(string)*: ${inputs.chat_input} +1. **[chat_with_context**] セクション内で、次の設定を選択します (他の設定はそのまま残します)。 + - **[接続]**:Default_AzureOpenAI + - **Api**:チャット + - **[deployment_name]**: gpt-35-turbo + - **[response_format]**: {"type":"text"} + + 次に、このツールの **[入力]** に次のパラメーターが含まれるようにします。 + - **[prompt_text]** *(string)*: ${Prompt_variants.output} + +1. ツール バー上で **[保存]** ボタンを使用して、プロンプト フロー内でツールに加えた変更を保存します。 +1. ツールバー上で **[チャット]** を選択します。 チャット ペインが開き、サンプルの会話履歴と、サンプル値に基づいて既に記入された入力が表示されます。 これらは無視してかまいません。 +1. チャット ペイン内で、既定の入力を質問「`Where can I stay in London?`」に置き換えて送信します。 +1. その応答を確認します。インデックス内のデータに基づいているはずです。 +1. フロー内の各ツールの出力を確認します。 +1. チャット ペイン内で、質問「`What can I do there?`」を入力します +1. その応答がインデックス内のデータに基づいていることを確認し、チャット履歴を考慮します ("there" は "in London" と認識されます)。 +1. フロー内の各ツールの出力を確認し、フロー内の各ツールがその入力をどのように操作してコンテキスト化されたプロンプトを準備し、適切な応答を取得したのかを確認します。 + +## フローをデプロイする + +これでインデックス付きデータを使用する作業フローが作成されたので、それをサービスとしてデプロイし、Copilot アプリケーションで使用することができます。 + +1. ツールバー上で **[デプロイ]** を選択します。 +1. 次の設定でデプロイを作成します。 + - **基本設定**: + - **エンドポイント**:新規 + - **[エンドポイント名]**: brochure-endpoint + - **[デプロイ名]**: brochure-endpoint-1 + - **仮想マシン**:Standard_DS3_v2 + - **インスタンス数**:3 + - **[推論データ収集]**:オン + - **[Application Insights 診断]**:オン + - **[詳細設定]**: + - 既定の設定を使用します** +1. Azure AI Studio 内にあるプロジェクトの左側ナビゲーション ウィンドウ内で、**[コンポーネント]** の下にある **[デプロイ]** ページを選択します。 +1. **[brochure-endpoint]** の下で **[brochure-endpoint-1]** のデプロイが [成功] と表示されるまでビューを更新し続けます (これには時間がかかる場合があります)。** +1. デプロイが成功したら、それを選択します。 次に、その **[テスト]** ページ上でプロンプト「`What is there to do in San Francisco?`」を入力し、その応答を確認します。 +1. プロンプト「`Where else could I go?`」を入力し、その応答を確認します。 +1. エンドポイントの **[使用]** ページを表示し、エンドポイントのクライアント アプリケーションの構築に使用することができる接続情報とサンプル コードが含まれていることにご注目ください。これにより、このプロンプト フロー ソリューションをカスタム Copilot としてアプリケーションに統合することができます。 + +## クリーンアップ + +不要な Azure のコストとリソース使用を回避するには、この演習でデプロイしたリソースを削除する必要があります。 + +1. Azure AI Studio 内で、**[ビルド]** ページを表示します。 次に、この演習で作成したプロジェクトを選択し、**[プロジェクトの削除]** ボタンを使用してそれを削除します。 すべてのコンポーネントを削除するには数分かかる場合があります。 +1. Azure AI Studio の確認が完了したら、[Azure portal](https://portal.azure.com) (`https://portal.azure.com`) に戻ます。必要に応じて、ご自身の Azure 資格情報を使用してサインインします。 次に、Azure AI 検索と Azure AI リソース用に作成したリソース グループを削除します。 + diff --git a/README.md b/README.md index 011ebb0..8599e78 100644 --- a/README.md +++ b/README.md @@ -1 +1,9 @@ -# mslearn-ai-studio.ja-jp \ No newline at end of file +# Azure AI Studio の演習 + +このリポジトリには、[Azure AI Studio に関する Microsoft Learn モジュール](https://docs.microsoft.com/training)での実践的な演習をサポートするための手順とアセットが含まれています。 + +Azure OpenAI サービスへのアクセスが承認されている Azure サブスクリプションが必要になります。 Azure OpenAI Service へのアクセスを要求するには、[https://aka.ms/oaiapply](https://aka.ms/oaiapply) にアクセスしてください。 + +## 問題の報告 + +演習で問題が発生した場合は、このリポジトリで**問題**として報告してください。