page_type | 言語 | 製品 | urlfragment | 名前 | 説明 | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
サンプル |
|
| azure-search-openai-demo-charp | chatgpt +エンタープライズデータ(csharp) | OpenAIおよびAI検索を使用してデータとチャットするCSHARPサンプルアプリ。 |
このサンプルは、検索拡張生成パターンを使用して、独自のデータ上でChatGPTのようなエクスペリエンスを作成するためのいくつかのアプローチを示しています。 Azure Openaiサービスを使用して、ChATGPTモデル( gpt-4o-mini
)にアクセスし、AZURE AIはデータのインデックス作成と検索を検索します。
リポジトリにはサンプルデータが含まれているため、エンドツーエンドを試す準備ができています。このサンプルアプリケーションでは、Contoso Electronicsと呼ばれる架空の会社を使用しています。このエクスペリエンスにより、従業員は利点、内部ポリシー、およびジョブの説明と役割について質問することができます。
このアプリケーションがどのように構築されたかの詳細については、以下をご覧ください。
私たちはあなたから聞きたいです!インテリジェントなアプリの構築や現在の構築に興味がありますか?この調査を完了するには数分かかります。
調査に参加してください
この例を展開して実行するには、
Microsoft.Authorization/roleAssignments/write
Permissions(ユーザーアクセス管理者や所有者など)が必要です。 警告
デフォルトでは、このサンプルはAzure Containerアプリと、毎月のコストを備えたAzure AI検索リソースを作成し、ドキュメントページごとにコストを備えたAzure AIドキュメントインテリジェンスリソースを作成します。 Infraフォルダーの下にパラメーターファイルを変更してこのコストを回避する場合は、それらをそれぞれの無料バージョンに切り替えることができます(たとえば、いくつかの制限がありますが、サブスクリプションごとに最大1つのAzure AI検索リソースを持つことができ、無料のAzure AIドキュメントインテリジェンスは、各ドキュメントの最初の2ページのみを分析します)
価格は地域ごとに異なるため、使用法の正確なコストを予測することはできません。ただし、以下のリソースについては、Azure Pricing Calculatorを試すことができます。
コストを削減するには、さまざまなサービスの無料SKUに切り替えることができますが、これらのSKUには制限があります。詳細については、最小限のコストで展開に関するこのガイドを参照してください。
azd down
実行している場合、使用していない場合はアプリを削除することを忘れないでください。
このプロジェクトを設定するためのいくつかのオプションがあります。開始する最も簡単な方法は、Github Codespacesです。これは、すべてのツールをセットアップするためですが、必要に応じてローカルにセットアップすることもできます。
GitHub Codespacesを使用して、このレポを実質的に実行できます。これにより、ブラウザでWebベースのコードとコードを開きます。
関連するオプションは、VSコードリモートコンテナです。これは、開発者コンテナ拡張機能を使用してローカルVSコードでプロジェクトを開きます。
次の前提条件をインストールします。
Azure開発者CLI
.NET 8
git
PowerShell 7+(PWSH) - Windowsユーザーのみ。
重要:PowerShellコマンドから
pwsh.exe
を実行できるようにしてください。これが失敗した場合、PowerShellをアップグレードする必要がある可能性があります。
Docker
重要:
azd
プロビジョニング /展開コマンドを実行する前に、Dockerが実行されていることを確認してください。
次に、次のコマンドを実行して、ローカル環境でプロジェクトを取得します。
azd auth login
を実行しますazd init -t azure-search-openai-demo-csharp
を実行しますazd env new azure-search-openai-demo-csharp
を実行しますライブストリーム:コードスペースにゼロから展開ライブストリーム:Windows11にゼロから展開
重要:
azd
プロビジョニング /展開コマンドを実行する前に、Dockerが実行されていることを確認してください。
既存のAzureサービスがなく、新しい展開から開始したい場合は、次のコマンドを実行します。
azd up
- これにより、Azureリソースを提供し、このサンプルをそれらのリソースに展開します。これには、 ./data
フォルダーにあるファイルに基づいて検索インデックスの構築が含まれます。
注:このアプリケーションでは
gpt-4o-mini
モデルを使用します。展開する地域を選択するときは、その地域(Eastusなど)で利用できることを確認してください。詳細については、Azure Openaiサービスドキュメントを参照してください。
アプリケーションが正常に展開された後、コンソールにURLが印刷されます。そのURLをクリックして、ブラウザのアプリケーションと対話します。
次のようになります。
[!注]:アプリケーションが完全に展開されるまで数分かかる場合があります。アプリケーションが展開された後、ベクトルデータベースに追加されるドキュメントを処理するのに数分かかります。
使用したいAzureに既存のリソースがある場合は、次のazd
環境変数を設定して、それらを使用するようにazd
を構成できます。
azd env set AZURE_OPENAI_SERVICE {Name of existing OpenAI service}
azd env set AZURE_OPENAI_RESOURCE_GROUP {Name of existing resource group that OpenAI service is provisioned to}
azd env set AZURE_OPENAI_CHATGPT_DEPLOYMENT {Name of existing ChatGPT deployment}
を実行します。 ChatGPTの展開がデフォルトの「チャット」ではない場合にのみ必要です。azd env set AZURE_OPENAI_EMBEDDING_DEPLOYMENT {Name of existing embedding model deployment}
を実行します。埋め込みモデルの展開がデフォルトのembedding
ではない場合にのみ必要です。azd up
注記
既存の検索およびストレージアカウントを使用することもできます。 ./infra/main.parameters.json
を参照してください。環境変数のリストを参照して、既存のリソースを構成するためにazd env set
に渡されます。
重要
azd
プロビジョニング /展開コマンドを実行する前に、Dockerが実行されていることを確認してください。
azd up
注記
リポジトリにAZDがサポートされている上腕二頭筋ファイルを持っていることを確認し、手動でトリガー(初期展開用)またはコード変更(最新の変更と自動的に再展開する)のいずれかの初期GitHubアクションワークフローファイルを追加して、リポジトリをアプリスペースと互換性のあるものにする必要があります。
"resourceGroupName" : {
"value" : " ${AZURE_RESOURCE_GROUP} "
}
"tags" : {
"value" : " ${AZURE_TAGS} "
}
param resourceGroupName string = ''
param tags string = ''
var baseTags = { 'azd-env-name' : environmentName }
var updatedTags = union ( empty ( tags ) ? {} : base64ToJson ( tags ), baseTags )
Make sure to use " updatedTags " when assigning " tags " to resource group created in your bicep file and update the other resources to use " baseTags " instead of " tags ". For example -
``` json
resource rg 'Microsoft.Resources/resourceGroups@2021-04-01' = {
name : ! empty ( resourceGroupName ) ? resourceGroupName : '${ abbrs . resourcesResourceGroups }${ environmentName }'
location : location
tags : updatedTags
}
重要
azd
プロビジョニング /展開コマンドを実行する前に、Dockerが実行されていることを確認してください。
azd auth login
を実行します
アプリケーションの展開後、環境変数AZURE_KEY_VAULT_ENDPOINT
を設定します。 .azure/your-environment-name/.envファイルまたはAzureポータルで値を見つけることができます。
次の.NET CLIコマンドを実行して、ASP.NET Core Minimal API Server(クライアントホスト)を起動します。
dotnet run --project ./app/backend/MinimalApi.csproj --urls=http://localhost:7181/
http:// localhost:7181に移動し、アプリをテストします。
このサンプルには、.NET MAUIクライアントが含まれており、Windows/MacOSデスクトップまたはAndroidおよびiOSデバイスで実行できるアプリとしてエクスペリエンスをパッケージ化します。ここのMauiクライアントは、Blazor Hybridを使用して実装されており、ほとんどのコードをWebサイトFrontendと共有させます。
MAUIクライアントを含むソリューションを開くには、アプリ/App-Maui.slnを開きます
app/maui-blazor/mauiprogram.csを編集し、バックエンドのURLを使用してclient.BaseAddress
を更新します。
Azureで実行されている場合は、上記の手順からサービスバックエンドにURLを使用します。ローカルで実行されている場合は、http:// localhost:7181を使用します。
Mauiblazorをスタートアッププロジェクトとして設定し、アプリを実行します
展開された環境と既存の環境に他の誰かにアクセスできるようにする場合は、以下を実行してください。
azd init -t azure-search-openai-demo-csharp
実行しますazd env refresh -e {environment name}
- このコマンドを実行するには、AZD環境名、サブスクリプションID、および場所が必要になることに注意してください./azure/{env name}/.env
ファイルにそれらの値を見つけることができます。これにより、AZD環境の.ENVファイルが、アプリをローカルに実行するために必要なすべての設定に登録されます。pwsh ./scripts/roles.ps1
を実行すると、これにより、必要なすべての役割がユーザーにローカルで実行できるように割り当てます。サブスクリプションで役割を作成するために必要な許可がない場合は、このスクリプトを実行する必要がある場合があります。 AZD .ENVファイルまたはAzure IDにアクティブシェルでAZURE_PRINCIPAL_ID
環境変数を必ず設定してください。これをaz account show
で取得できます。 azd down
azd
が展開したAzure Containerアプリに移動します。 azd
が完了すると(「エンドポイント」として)URLが印刷されます。または、Azureポータルで見つけることができます。Webアプリに一度:
アプリケーションの洞察と各リクエストのトレースを有効にするには、エラーのロギングとともに、 azd up
を実行する前にAZURE_USE_APPLICATION_INSIGHTS
変数をtrueに設定します
azd env set AZURE_USE_APPLICATION_INSIGHTS true
を実行しますazd up
パフォーマンスデータを確認するには、リソースグループのApplication Insightsリソースに移動して、「調査 - >パフォーマンス」ブレードをクリックして、HTTPリクエストに移動してタイミングデータを確認します。チャットリクエストのパフォーマンスを検査するには、「サンプルにドリル」ボタンを使用して、チャットリクエスト用に作成されたすべてのAPI呼び出しのエンドツーエンドトレースを確認します。
例外とサーバーのエラーを確認するには、「調査 - >障害」ブレードに移動し、フィルタリングツールを使用して特定の例外を見つけます。右側にPythonスタックトレースが表示されます。
デフォルトでは、展開されたAzure Containerアプリには認証またはアクセス制限が有効になります。つまり、コンテナアプリへのルーティング可能なネットワークアクセスを持つ人は誰でもインデックス付きデータとチャットできます。 Add Container App Authenticationチュートリアルに従って、展開されたコンテナアプリに対してセットアップすることにより、Azure Active Directoryへの認証が必要です。
その後、特定のユーザーまたはグループセットへのアクセスを制限するために、「必要な割り当て?」を変更して、Azure ADアプリをユーザーのセットに制限する手順に従うことができます。エンタープライズアプリケーションの下でオプションを使用し、ユーザー/グループアクセスを割り当てます。明示的なアクセスが許可されていないユーザーは、エラーメッセージを受け取ります-AADSTS50105:管理者は、アプリケーションへのアクセスが具体的に付与されていない限り、ユーザーをブロックするようにアプリケーション<App_Name>を設定しました。
GPT-4o-mini
を使用すると、テキストと画像の両方をソースコンテンツとして提供することにより、濃縮された回復拡張生成をサポートすることができます。ビジョンサポートを有効にするには、 USE_VISION
有効にし、プロビジョニング時にGPT-4o
またはGPT-4o-mini
モデルを使用する必要があります。
注記
以前にアプリケーションを既に展開したことがある場合は、GPT-4Oサポートを有効にした後、サポート資料を再インドし、アプリケーションを再デプロイする必要があります。これは、GPT-4Oサポートを有効にするには、新しいフィールドを検索インデックスに追加する必要があるためです。
Azure OpenaiサービスでGPT-4Vサポートを有効にするには、次のコマンドを実行します。
azd env set USE_VISION true
azd env set USE_AOAI true
azd env set AZURE_OPENAI_CHATGPT_MODEL_NAME gpt-4o-mini
azd env set AZURE_OPENAI_RESOURCE_LOCATION eastus # Please check the gpt model availability for more details.
azd up
OpenAIでビジョンサポートを有効にするには、次のコマンドを実行します。
azd env set USE_VISION true
azd env set USE_AOAI false
azd env set OPENAI_CHATGPT_DEPLOYMENT gpt-4o
azd up
以前に展開されたリソースをクリーンアップするには、次のコマンドを実行します。
azd down --purge
azd env set AZD_PREPDOCS_RAN false # This is to ensure that the documents are re-indexed with the new fields.
以下のヒントに加えて、Docsフォルダーに広範なドキュメントを見つけることができます。
このサンプルは、独自の生産アプリケーションの出発点となるように設計されていますが、生産に展開する前に、セキュリティとパフォーマンスを徹底的にレビューする必要があります。考慮すべきことがいくつかあります:
OpenAI容量:デフォルトのTPM(1分あたりのトークン)は30kに設定されています。これは、1分あたり約30の会話に相当します(ユーザーメッセージ/応答ごとに1kを想定しています)。アカウントの最大容量にinfra/main.bicep
のchatGptDeploymentCapacity
とembeddingDeploymentCapacity
パラメーターを変更することにより、容量を増やすことができます。また、Azure Openai Studioのクォータタブを表示して、どれだけの容量があるかを理解することもできます。
Azureストレージ:デフォルトのストレージアカウントは、 Standard_LRS
SKUを使用します。回復力を向上させるには、 Standard_ZRS
生産展開に使用することをお勧めします。これはinfra/main.bicep
のstorage
モジュールの下でsku
プロパティを使用して指定できます。
Azure AI検索:検索サービス容量が超えられていることに関するエラーが表示された場合、 infra/core/search/search-services.bicep
のreplicaCount
を変更することでレプリカの数を増やすか、Azureポータルから手動でスケーリングすることが役立つ場合があります。
Azureコンテナアプリ:デフォルトでは、このアプリケーションは0.5 CPUコアと1GBのメモリを備えたコンテナを展開します。最小レプリカは1、最大10ですinfra/core/host/container-app.bicep
このアプリでは、ニーズに合わせてcontainerCpuCoreCount
、 containerMaxReplicas
、 containerMemory
、 containerMinReplicas
などの値を設定できます。自動スケーリングルールまたはスケジュールされたスケーリングルールを使用して、負荷に基づいて最大/最小値をスケールアップできます。
認証:デフォルトでは、展開されたアプリは公開されています。認証されたユーザーへのアクセスを制限することをお勧めします。認証を有効にする方法については、上記の認証の有効化を参照してください。
ネットワーク:仮想ネットワーク内に展開することをお勧めします。アプリが内部エンタープライズのみを使用する場合は、プライベートDNSゾーンを使用してください。また、ファイアウォールやその他の形式の保護にAzure API Management(APIM)を使用することも検討してください。詳細については、Azure Openaiランディングゾーン参照アーキテクチャをご覧ください。
ロードテスト:予想されるユーザーのロードテストを実行することをお勧めします。
Azure.AI.OpenAI
nugetパッケージ注記
このデモで使用されるPDFドキュメントには、言語モデル(Azure Openaiサービス)を使用して生成された情報が含まれています。これらの文書に含まれる情報は、デモンストレーション目的でのみであり、Microsoftの意見や信念を反映していません。 Microsoftは、このドキュメントに含まれる情報に関して、完全性、正確性、信頼性、適合性、または可用性について、明示的または暗示されたいかなる種類の表明または保証を行いません。マイクロソフトに予約されているすべての権利。
質問:Azure AI検索が大規模なドキュメントの検索をサポートするのに、なぜPDFをチャンクに分割する必要があるのですか?
回答:チャンクを使用すると、トークンの制限のためにOpenAIに送信する情報の量を制限できます。コンテンツを分割することにより、Openaiに注入できるテキストの潜在的なチャンクを簡単に見つけることができます。チャンキングの方法は、1つのチャンクを終了する文が次の文章を開始するように、テキストのスライディングウィンドウをレバレッジします。これにより、テキストのコンテキストを失う可能性を減らすことができます。