次の方法で共有


AI: あなたのデータに対する Azure OpenAI

Azure OpenAI 自然言語処理 (NLP) と完了機能の統合により、ユーザーの生産性を向上させる大きな可能性が提供されます。 適切なプロンプトとルールを活用することで、AI アシスタントは、電子メール メッセージ、SMS メッセージなど、さまざまな形式の通信を効率的に生成できます。 この機能により、ユーザーの効率が向上し、ワークフローが合理化されます。

この機能自体は非常に強力ですが、ユーザーが会社のカスタム データに基づいて完了を生成する必要がある場合があります。 たとえば、ユーザーがインストールの問題を顧客に支援する際に移動するのが困難な製品マニュアルのコレクションがあるとします。 または、医療上の利点に関連する包括的な一連のよく寄せられる質問 (FAQ) を維持して、ユーザーが必要な回答を読み取り、取得することが困難であることを証明できます。 このような場合や他の多くの場合、Azure OpenAI Service を使用すると、独自のデータを活用して補完を生成し、ユーザーの質問に対するより調整されたコンテキストに応じた正確な応答を実現できます。

Azure OpenAI ドキュメントの "Bring Your Own Data" 機能の概要を次に示します。

独自のデータに基づく Azure OpenAI の主な特徴の 1 つは、モデルの出力を強化する方法でデータを取得して利用できることです。 独自のデータに基づく Azure OpenAI は、Azure AI Search と連携し、ユーザー入力と提供された会話履歴に基づいて、指定されたデータ ソースからどのデータを取得するかを決定します。 その後、このデータは拡張され、OpenAI モデルに対するプロンプトとして再送信されます。取得された情報は元のプロンプトに追加されます。 取得されたデータはプロンプトに追加されますが、結果として得られた入力は他のプロンプトと同様にモデルによって処理されます。 データが取得され、プロンプトがモデルに送信されると、モデルはこの情報を使用して候補を提供します。

この演習では、以下のことを行います。

  • Azure AI Foundry ポータルを使用してカスタム データ ソースを作成します。
  • Azure AI Foundry ポータルを使用して埋め込みモデルをデプロイします。
  • カスタム ドキュメントをアップロードします。
  • チャット プレイグラウンドでチャット セッションを開始し、独自のデータに基づいて完了を生成する実験を行います。
  • Azure AI Search と Azure OpenAI を使用して、独自のデータに基づいて入力候補を生成するコードについて説明します。

埋め込みモデルをデプロイし、Azure AI Foundry にカスタム データ ソースを追加することから始めましょう。

Azure AI Foundry へのカスタム データ ソースの追加

  1. Azure OpenAI Studio に移動し、Azure OpenAI リソースにアクセスできる資格情報でサインインします。

  2. ナビゲーション メニューから [デプロイ] を選択します。

  3. [モデルのデプロイの選択] -->ツール バーの [基本モデルのデプロイ] を選択します。

  4. モデルの一覧から テキスト埋め込み ada-002 モデルを選択し、[確認] を選択 します

  5. 次のオプションのいずれかを選択します。

    • デプロイ名: text-embedding-ada-002
    • モデル バージョン: 既定
    • デプロイの種類: Standard
    • 1 分あたりのトークン レート制限 (千) の値を 120,000 に設定する
    • コンテンツ フィルター: DefaultV2
    • 動的見積もりを有効にする: 有効
  6. [デプロイ] ボタンを選択します。

  7. モデルが作成されたら、ナビゲーション メニューから [ホーム ] を選択してようこそ画面に移動します。

  8. ようこそ画面で [ Bring your own data]\(独自のデータを持ち込む \) タイルを見つけて、[ 今すぐ試す] を選択します。

    Azure OpenAI Studio Bring Your Own Data

  9. [ データの追加] を選択し、[ データ ソースの追加] を選択します

  10. [ データ ソースの選択 ] ドロップダウンで、[ ファイルのアップロード] を選択します。

  11. [ Azure Blob Storage リソースの選択 ] ドロップダウンで、[ 新しい Azure Blob Storage リソースの作成] を選択します。

  12. [サブスクリプション] ドロップダウンで Azure サブスクリプション を選択します。

  13. [ Azure Blob Storage リソースの選択 ] ドロップダウンで、[ 新しい Azure Blob Storage リソースの作成] を選択します。

  14. これにより、次のタスクを実行できる Azure portal にアクセスできます。

    • byodstorage[Your Last Name]など、ストレージ アカウントの一意の名前を入力します。
    • 場所に近いリージョンを選択します。
    • [ 確認 ] を選択し、[ 作成] を選択します
  15. BLOB ストレージ リソースが作成されたら、Azure AI Foundry ダイアログに戻り、[Azure Blob Storage リソースの選択] ドロップダウンから新しく作成した BLOB ストレージ リソースを選択 します。 一覧に表示されない場合は、ドロップダウンの横にある更新アイコンを選択します。

  16. ストレージ アカウントにアクセスするには、クロスオリジン リソース共有 (CORS) を有効にする必要があります。 Azure AI Foundry ダイアログで [ CORS を有効にする ] を選択します。

    CORS で Azure OpenAI Studio Bring Your Own Data をオンにする

  17. [ Azure AI Search リソースの選択 ] ドロップダウンで、[ 新しい Azure AI Search リソースの作成] を選択します。

  18. これにより、次のタスクを実行できる Azure portal に戻ります。

    • byodsearch-[Your Last Name]などの AI Search リソースの一意の名前を入力します。
    • 場所に近いリージョンを選択します。
    • [ 価格レベル ] セクションで、[ 価格レベルの変更 ] を選択し、[ 基本 ] の後に [選択] を選択します。 Free レベルはサポートされていないため、このチュートリアルの最後に AI Search リソースをクリーンアップします。
    • [ 確認 ] を選択し、[ 作成] を選択します
  19. AI Search リソースが作成されたら、リソース の [概要 ] ページに移動し、 URL 値をローカル ファイルにコピーします。

    Azure OpenAI Studio の AI 検索 URL

  20. ナビゲーション メニューの [設定 ] -->Keys を選択します。

  21. [API アクセス制御] ページで、[両方] を選択して、マネージド ID またはキーを使用してサービスにアクセスできるようにします。 メッセージが表示されたら、[ はい] を 選択します。

    ロールの割り当てを追加するには最大 10 分かかるため、この演習では API キーを使用しますが、少しの追加作業で、システム割り当てマネージド ID がサービスに安全にアクセスできるようにすることができます。

  22. 左側のナビゲーション メニューで [ キー ] を選択し、 プライマリ管理者キー の値をローカル ファイルにコピーします。 URL とキーの値は、演習の後半で必要になります。

  23. ナビゲーション メニューで [設定 ] -->[Semantic ranker ] を選択し、[ Free ] が選択されていることを確認します。

    セマンティック ランカーが特定のリージョンで使用できるかどうかを確認するには、Azure Web サイトの [ リージョン別に利用可能な製品 ] ページで、リージョンが一覧表示されているかどうかを確認します。

  24. Azure AI Foundry [データ の追加] ダイアログに戻り、[Azure AI Search リソースの選択] ドロップダウン から新しく作成した検索リソースを選択します。 一覧に表示されない場合は、ドロップダウンの横にある更新アイコンを選択します。

  25. インデックス名の値を入力するには、 byod-search-indexの値を入力します

  26. [ この検索リソースにベクター検索を追加する ] チェック ボックスをオンにします。

  27. [ 埋め込みモデルの選択 ] ドロップダウンで、前に作成した text-embedding-ada-002 モデルを選択します。

  28. [ ファイルのアップロード ] ダイアログで、[ ファイルの参照] を選択します。

  29. プロジェクトの 顧客ドキュメント フォルダー (プロジェクトのルートにある) に移動し、次のファイルを選択します。

    • クロック A102 のインストール Instructions.docx
    • 会社 FAQs.docx

    この機能は現在、ローカル インデックスの作成に使用できるファイル形式 (.txt、.md、.html、.pdf、.docx、.pptx) をサポートしています。

  30. [ ファイルのアップロード] を選択します。 ファイルは、先ほど作成した BLOB ストレージ リソース内の fileupload-byod-search-index コンテナーにアップロードされます。

  31. [ 次へ ] を選択して、[ データ管理 ] ダイアログに移動します。

  32. [ 検索の種類 ] ドロップダウンで、[ ハイブリッド + セマンティック] を選択します。

    このオプションでは、キーワード検索とベクター検索がサポートされます。 結果が返されると、ディープ ラーニング モデルを使用してセカンダリ ランク付けプロセスが結果セットに適用され、ユーザーの検索の関連性が向上します。 セマンティック検索の詳細については、 Azure AI Search のドキュメントでセマンティック検索を 参照してください。

  33. [サイズの選択] の値が 1024 に設定されていることを確認します。

  34. [次へ] を選択します。

  35. Azure リソース認証の種類として、API キーを選択します。 適切な認証の種類の選択の詳細については、 Azure AI Search 認証のドキュメントを参照してください

  36. [次へ] を選択します。

  37. 詳細を確認し、[ 保存して閉じる] を選択します。

  38. カスタム データがアップロードされたので、データのインデックスが作成され、 チャットプレイグラウンドで使用できるようになります。 このプロセスには数分かかることがあります。 完了したら、次のセクションに進みます。

チャット プレイグラウンドでのカスタム データ ソースの使用

  1. Azure OpenAI Studio でページの [チャット セッション ] セクションを見つけて、次の ユーザー クエリを入力します。

    What safety rules are required to install a clock?
    
  2. ユーザー クエリを送信すると、次のような結果が表示されます。

    Azure OpenAI Studio チャット セッション - クロック設置安全規則

  3. チャット応答の [1 参照 ] セクションを展開すると、 Clock A102 Installation Instructions.docx ファイルが表示され、それを選択してドキュメントを表示できます。

  4. 次の ユーザー メッセージを入力します。

    What should I do to mount the clock on the wall?
    
  5. 次のような結果が表示されます。

    Azure OpenAI Studio チャット セッション - クロックマウント手順

  6. 次に、会社の FAQ ドキュメントを試してみましょう。 ユーザー クエリ フィールドに次のテキストを入力します。

    What is the company's policy on vacation time?
    
  7. その要求に関する情報が見つからなかったことがわかります。

  8. ユーザー クエリ フィールドに次のテキストを入力します。

    How should I handle refund requests?
    
  9. 次のような結果が表示されます。

    Azure OpenAI Studio チャット セッション - FAQ の結果

  10. チャット応答の [1 参照 ] セクションを展開すると、 会社の FAQs.docx ファイルが一覧表示され、それを選択してドキュメントを表示できます。

  11. [チャット] プレイグラウンドのツール バーで [コードの表示] を選択します。

    Azure OpenAI Studio チャット セッション - コードの表示

  12. 異なる言語を切り替え、エンドポイントを表示し、エンドポイントのキーにアクセスできることに注意してください。 [サンプル コード] ダイアログ ウィンドウを閉じます。

    Azure OpenAI Studio チャット セッション - サンプル コード

  13. チャット メッセージの上にある [未加工の JSON を表示 する] トグルをオンにします。 チャット セッションは、次のようなメッセージで始まることがわかります。

    {
        "role": "system",
        "content": "You are an AI assistant that helps people find information."
    }
    
  14. カスタム データ ソースを作成し、チャットプレイグラウンドで実験したので、プロジェクトのアプリケーションで使用する方法を見てみましょう。

アプリケーションで Bring Your Own Data Feature を使用する

  1. VS Code でプロジェクトに戻り、 .env ファイルを開きます。 AI Services エンドポイント、キー、およびインデックス名を使用して、次の値を更新します。 この演習の前半で、エンドポイントとキーをローカル ファイルにコピーしました。

    AZURE_AI_SEARCH_ENDPOINT=<AI_SERVICES_ENDPOINT_VALUE>
    AZURE_AI_SEARCH_KEY=<AI_SERVICES_KEY_VALUE>
    AZURE_AI_SEARCH_INDEX=byod-search-index
    
  2. 前の 演習 では、データベース、API、アプリケーションを開始しました。 また、 .env ファイルも更新しました。 これらの手順を完了していない場合は、先に進む前に、前の演習の最後の手順に従ってください。

  3. アプリケーションがブラウザーに読み込まれたら、アプリケーションの右上にある チャット ヘルプ アイコンを選択します。

    チャット ヘルプ アイコン

  4. チャット ダイアログに次のテキストが表示されます。

    How should I handle a company refund request?
    
  5. [ ヘルプの取得 ] ボタンを選択します。 Azure OpenAI Studio で前にアップロードした Company FAQs.docx ドキュメントから返された結果が表示されます。 ドキュメントを読み進める場合は、プロジェクトのルートにある 顧客ドキュメント フォルダーで見つけることができます。

  6. テキストを次のように変更し、[ヘルプの 取得 ] ボタンを選択します。

    What safety rules are required to install a clock?
    
  7. 前に Azure OpenAI Studio でアップロードした Clock A102 Installation Instructions.docx ドキュメントから結果が返されます。 このドキュメントは、プロジェクトのルートにある 顧客ドキュメント フォルダーでも使用できます。

コードの探索

ヒント

Visual Studio Code を使用している場合は、次を選択してファイルを直接開くことができます。

  • Windows/Linux: Ctrl + P
  • Mac: Cmd + P

次に、開くファイルの名前を入力します。

  1. Visual Studio Code でプロジェクトのソース コードに戻ります。

  2. サーバー/apiRoutes.ts ファイルを開き、completeBYOD ルートを見つけます。 この API は、[チャット ヘルプ] ダイアログで [ ヘルプの取得 ] ボタンが選択されている場合に呼び出されます。 要求本文からユーザー プロンプトを取得し、completeBYOD() ファイルの関数に渡します。 その後、結果がクライアントに返されます。

    router.post('/completeBYOD', async (req, res) => {
        const { prompt } = req.body;
    
        if (!prompt) {
            return res.status(400).json({ 
                status: false, 
                error: 'The prompt parameter must be provided.' 
            });
        }
    
        let result;
        try {
            // Call OpenAI to get custom "bring your own data" completion
        result = await completeBYOD(prompt);
        }
        catch (e: unknown) {
            console.error('Error parsing JSON:', e);
        }
    
        res.json(result);
    });
    
  3. サーバー/openAI.ts ファイルを開き、completeBYOD()関数を見つけます。

    async function completeBYOD(userPrompt: string): Promise<string> {
        const systemPrompt = 'You are an AI assistant that helps people find information in documents.';
        return await callOpenAI(systemPrompt, userPrompt, 0, true);
    }
    

    この関数には、次の機能があります。

    • userPrompt パラメーターには、ユーザーがチャット ヘルプ ダイアログに入力した情報が含まれます。
    • systemPrompt変数は、ユーザーが情報を見つけられるように設計された AI アシスタントが使用されることを定義します。
    • callOpenAI() は、Azure OpenAI API を呼び出して結果を返すために使用されます。 systemPromptuserPromptの値と、次のパラメーターが渡されます。
      • temperature - 応答に含める創造性の量。 この場合、ユーザーは一貫性のある (あまりクリエイティブではない) 回答を必要とするため、値は 0 に設定されます。
      • useBYOD - AZURE OpenAI と共に AI Search を使用するかどうかを示すブール値。 この場合、AI 検索機能が使用されるように、 true に設定されます。
  4. callOpenAI()関数は、呼び出す OpenAI 関数を決定するために使用されるuseBYOD パラメーターを受け取ります。 この場合、useBYOD関数が呼び出されるように、truegetAzureOpenAIBYODCompletion()に設定します。

    function callOpenAI(systemPrompt: string, userPrompt: string, temperature = 0, useBYOD = false) {
        const isAzureOpenAI = OPENAI_API_KEY && OPENAI_ENDPOINT && OPENAI_MODEL;
    
        if (isAzureOpenAI) {
            if (useBYOD) {
                return getAzureOpenAIBYODCompletion(systemPrompt, userPrompt, temperature);
            }
            return getAzureOpenAICompletion(systemPrompt, userPrompt, temperature);
        }
    
        return getOpenAICompletion(systemPrompt, userPrompt, temperature);
    }
    
  5. getAzureOpenAIBYODCompletion()関数を見つけます。 これは、前に調べた getAzureOpenAICompletion() 関数とよく似ていますが、Azure OpenAI で使用できる "Azure OpenAI on your data" シナリオに固有のいくつかの主な違いを強調するための別の関数として示されています。

    async function getAzureOpenAIBYODCompletion(systemPrompt: string, userPrompt: string, temperature: number): Promise<string> {
        const dataSources = [
            {
                type: 'azure_search',
                parameters: {
                    authentication: {
                        type: 'api_key',
                        key: AZURE_AI_SEARCH_KEY
                    },
                    endpoint: AZURE_AI_SEARCH_ENDPOINT,
                    index_name: AZURE_AI_SEARCH_INDEX
                }
            }
        ];
    
        const completion = await createAzureOpenAICompletion(systemPrompt, userPrompt, temperature, dataSources) as AzureOpenAIYourDataResponse;
        console.log('Azure OpenAI Add Your Own Data Output: \n', completion.choices[0]?.message);
        for (let citation of completion.choices[0]?.message?.context?.citations ?? []) {
            console.log('Citation Path:', citation.filepath);
        }
        return completion.choices[0]?.message?.content?.trim() ?? '';
    }
    

    getAzureOpenAIBYODCompletion()関数の次の機能に注意してください。

    • この演習の前半でdataSources ファイルに追加された AI Search リソースのkeyendpointindex_nameの値を含む.env プロパティが作成されます。
    • createAzureOpenAICompletion()関数は、systemPromptuserPrompttemperature、およびdataSourcesの値で呼び出されます。 この関数は、Azure OpenAI API を呼び出して結果を返すために使用されます。
    • 応答が返されると、ドキュメントの引用文献がコンソールに記録されます。 その後、完了メッセージの内容が呼び出し元に返されます。
  6. 次の演習に進む前に、いくつかの最後の点を考慮する必要があります。

    • サンプル アプリケーションでは、Azure AI Search で 1 つのインデックスを使用します。 Azure OpenAI では、複数のインデックスとデータ ソースを使用できます。 dataSources関数の getAzureOpenAIBYODCompletion() プロパティは、必要に応じて複数のデータ ソースを含むように更新できます。
    • セキュリティは、この種のシナリオで慎重に評価する必要があります。 ユーザーは質問をしたり、アクセスできないドキュメントから結果を取得したりすることはできません。
  7. Azure OpenAI、プロンプト、入力候補、独自のデータの使用方法について学習したので、次の演習に進み、通信機能を使用してアプリケーションを強化する方法を学習しましょう。 Azure OpenAI の詳細については、「Azure OpenAI Service の概要」トレーニング コンテンツを参照してください。 Azure OpenAI で独自のデータを使用する方法の詳細については、データ ドキュメントの Azure OpenAI を参照してください。

次の手順