含まれているもの: ホスティング統合 —および—
Client 統合
Azure AI Foundry は、最先端の基盤モデル、AI 開発用のツール、インテリジェント なアプリケーションを構築するためのスケーラブルなインフラストラクチャへのアクセスを提供する AI プラットフォームです。 Aspire Azure AI Foundry 統合を使用すると、Azure AI Foundry に接続したり、.NET アプリケーションから Foundry Local を使用してモデルをローカルで実行したりできます。
ホスティング統合
Aspire
Azure AI Foundry のホスティング用統合モデルAzure として AI Foundry リソースがAzureAIFoundryResource。 これらの型と API にアクセスして AppHost プロジェクト内で表現するには、📦Aspire.Hosting.Azure.AIFoundry NuGet パッケージをインストールします。
dotnet add package Aspire.Hosting.Azure.AIFoundry
詳細については、「dotnet でのパッケージの追加」または「.NET アプリケーションでのパッケージの依存関係の管理」を参照してください。
Azure AI Foundry リソースを追加する
AppHost プロジェクトに AzureAIFoundryResource を追加するには、 AddAzureAIFoundry メソッドを呼び出します。
var builder = DistributedApplication.CreateBuilder(args);
var foundry = builder.AddAzureAIFoundry("foundry");
builder.AddProject<Projects.ExampleProject>()
.WithReference(foundry);
// After adding all resources, run the app...
上記のコードは、Azureという名前の foundry AI Foundry リソースを AppHost プロジェクトに追加します。
WithReference メソッドは、接続情報を ExampleProject プロジェクトに渡します。
Important
AddAzureAIFoundryを呼び出すと、暗黙的に AddAzureProvisioning(IDistributedApplicationBuilder)が呼び出されます。これによって、アプリの起動時に Azure リソースを動的に生成するためのサポートが追加されます。 アプリは、適切なサブスクリプションと場所を構成する必要があります。 詳細については、「 ローカル プロビジョニング: 構成」を参照してください。
Azure AI Foundry デプロイ リソースを追加する
Azure AI Foundry デプロイ リソースを追加するには、AddDeploymentメソッドを呼び出します。
var builder = DistributedApplication.CreateBuilder(args);
var foundry = builder.AddAzureAIFoundry("foundry");
var chat = foundry.AddDeployment("chat", "Phi-4", "1", "Microsoft");
builder.AddProject<Projects.ExampleProject>()
.WithReference(chat)
.WaitFor(chat);
// After adding all resources, run the app...
前述のコード:
-
Azureという名前の
foundryAI Foundry リソースを追加します。 - モデル名が Azure の
chatという名前のPhi-4AI Foundry デプロイ リソースを追加します。 モデル名は、 AI Foundry サービスでAzureに対応している必要があります。
Note
format メソッドのAddDeployment(...) パラメーターは、Azureテキストの直後にあるモデルの詳細ページの Quick facts AI Foundry ポータルで確認できます。
展開プロパティを構成する
WithPropertiesメソッドを使用して、展開プロパティをカスタマイズできます。
var chat = foundry.AddDeployment("chat", "Phi-4", "1", "Microsoft")
.WithProperties(deployment =>
{
deployment.SkuName = "Standard";
deployment.SkuCapacity = 10;
});
上記のコードでは、SKU 名を Standard に設定し、容量をデプロイに 10 します。
既存の Azure AI Foundry サービスに接続する
接続する既存の Azure AI Foundry サービスがある場合があります。 呼び出しをチェーンして、AzureAIFoundryResource が既存のリソースであることを注釈付けることができます。
var builder = DistributedApplication.CreateBuilder(args);
var existingFoundryName = builder.AddParameter("existingFoundryName");
var existingFoundryResourceGroup = builder.AddParameter("existingFoundryResourceGroup");
var foundry = builder.AddAzureAIFoundry("foundry")
.AsExisting(existingFoundryName, existingFoundryResourceGroup);
builder.AddProject<Projects.ExampleProject>()
.WithReference(foundry);
// After adding all resources, run the app...
Important
RunAsExisting、PublishAsExisting、またはAsExistingメソッドを呼び出して、Azure サブスクリプションに既に存在するリソースを操作する場合は、特定の構成値を AppHost に追加して、Aspireがそれらを見つけられるようにする必要があります。 必要な構成値には、 SubscriptionId、 AllowResourceGroupCreation、 ResourceGroup、 Location が含まれます。 設定しない場合は、 Aspire ダッシュボードに "構成がありません" エラーが表示されます。 設定方法の詳細については、「 構成」を参照してください。
Azure AI Foundry リソースを既存のリソースとして扱う方法の詳細については、「既存のAzure リソースを使用する」を参照してください。
Note
または、 Azure AI Foundry リソースを表す代わりに、接続文字列を AppHost に追加することもできます。 このアプローチは弱く型指定されており、ロールの割り当てやインフラストラクチャのカスタマイズでは機能しません。 詳細については、「Azureを使用して既存の リソースを追加する」を参照してください。
開発に Foundry Local を使用する
Aspire は、ローカル開発のための Foundry Local の使用をサポートしています。 AppHost プロジェクトに次のコードを追加します。
var builder = DistributedApplication.CreateBuilder(args);
var foundry = builder.AddAzureAIFoundry("foundry")
.RunAsFoundryLocal();
var chat = foundry.AddDeployment("chat", "phi-3.5-mini", "1", "Microsoft");
builder.AddProject<Projects.ExampleProject>()
.WithReference(chat)
.WaitFor(chat);
// After adding all resources, run the app...
AppHost が起動すると、ローカル の Foundry サービスも開始されます。 そのためには、ローカル コンピューターに Foundry Local がインストールされ、実行されている必要があります。
RunAsFoundryLocal メソッドは、エミュレーターとして実行するようにリソースを構成します。 指定したモデルをローカルにダウンロードして読み込みます。 このメソッドは、ローカル サービスの正常性チェックを提供し、Foundry Local ライフサイクルを自動的に管理します。
リソースにロールを割り当てる
Azure AI Foundry サービスにアクセスする必要があるリソースに特定のロールを割り当てることができます。 WithRoleAssignmentsメソッドを使用します。
var foundry = builder.AddAzureAIFoundry("foundry");
builder.AddProject<Projects.Api>("api")
.WithRoleAssignments(foundry, CognitiveServicesBuiltInRole.CognitiveServicesUser)
.WithReference(foundry);
上記のコードでは、CognitiveServicesUser プロジェクトにapi ロールを割り当て、Azure AI Foundry リソースにアクセスするために必要なアクセス許可を付与します。
プロビジョニングによって生成されたBicep
Bicep を初めて使う場合、これは Azure リソースを定義するためのドメイン固有の言語です。 Aspireでは、Bicep を手動で記述する必要はありません。代わりに、プロビジョニング API によって Bicep が生成されます。 アプリを発行すると、生成された Bicep によって、標準の既定値で Azure AI Foundry リソースがプロビジョニングされます。
@description('The ___location for the resource(s) to be deployed.')
param ___location string = resourceGroup().___location
resource ai_foundry 'Microsoft.CognitiveServices/accounts@2024-10-01' = {
name: take('aifoundry-${uniqueString(resourceGroup().id)}', 64)
___location: ___location
identity: {
type: 'SystemAssigned'
}
kind: 'AIServices'
properties: {
customSubDomainName: toLower(take(concat('ai-foundry', uniqueString(resourceGroup().id)), 24))
publicNetworkAccess: 'Enabled'
disableLocalAuth: true
}
sku: {
name: 'S0'
}
tags: {
'aspire-resource-name': 'ai-foundry'
}
}
resource chat 'Microsoft.CognitiveServices/accounts/deployments@2024-10-01' = {
name: 'Phi-4'
properties: {
model: {
format: 'Microsoft'
name: 'Phi-4'
version: '1'
}
}
sku: {
name: 'GlobalStandard'
capacity: 1
}
parent: ai_foundry
}
output aiFoundryApiEndpoint string = ai_foundry.properties.endpoints['AI Foundry API']
output endpoint string = ai_foundry.properties.endpoint
output name string = ai_foundry.name
上記の Bicep は、AI サービス用に構成された Azure Cognitive Services リソースをプロビジョニングするモジュールです。 さらに、ロールの割り当ては、別のモジュールで Azure リソースに対して作成されます。
@description('The ___location for the resource(s) to be deployed.')
param ___location string = resourceGroup().___location
param ai_foundry_outputs_name string
param principalType string
param principalId string
resource ai_foundry 'Microsoft.CognitiveServices/accounts@2024-10-01' existing = {
name: ai_foundry_outputs_name
}
resource ai_foundry_CognitiveServicesUser 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(ai_foundry.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'a97b65f3-24c7-4388-baec-2e87135dc908'))
properties: {
principalId: principalId
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'a97b65f3-24c7-4388-baec-2e87135dc908')
principalType: principalType
}
scope: ai_foundry
}
resource ai_foundry_CognitiveServicesOpenAIUser 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(ai_foundry.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '5e0bd9bd-7b93-4f28-af87-19fc36ad61bd'))
properties: {
principalId: principalId
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '5e0bd9bd-7b93-4f28-af87-19fc36ad61bd')
principalType: principalType
}
scope: ai_foundry
}
生成された Bicep は開始点であり、C# のプロビジョニング インフラストラクチャへの変更の影響を受ける。 Bicep ファイルのカスタマイズは直接上書きされるため、C# プロビジョニング API を通じて変更を加えて、生成されたファイルに反映されるようにします。
プロビジョニング インフラストラクチャをカスタマイズする
すべての AspireAzure リソースは、AzureProvisioningResource 型のサブクラスです。 これにより、生成されたBicepをカスタマイズするために、Azureリソースを構成する流暢なAPIを提供することが、ConfigureInfrastructure<T>(IResourceBuilder<T>, Action<AzureResourceInfrastructure>) APIを使用して可能になります。
builder.AddAzureAIFoundry("foundry")
.ConfigureInfrastructure(infra =>
{
var resources = infra.GetProvisionableResources();
var account = resources.OfType<CognitiveServicesAccount>().Single();
account.Sku = new CognitiveServicesSku
{
Tier = CognitiveServicesSkuTier.Enterprise,
Name = "E0"
};
account.Tags.Add("ExampleKey", "Example value");
});
前述のコード:
-
ConfigureInfrastructure API への呼び出しを連鎖させます。
-
infraパラメーターは、AzureResourceInfrastructure 型のインスタンスです。 - プロビジョニング可能なリソースは、GetProvisionableResources() メソッドを呼び出すことによって取得されます。
- 単一の CognitiveServicesAccount リソースが取得されます。
-
CognitiveServicesAccount.Sku プロパティは、CognitiveServicesSku 名と
E0層を持つ CognitiveServicesSkuTier.Enterprise の新しいインスタンスに割り当てられます。 - Cognitive Services リソースに、キーが
ExampleKey、値がExample valueのタグが追加されます。
-
Client 統合
Aspire Azure AI Foundry クライアント統合を開始するには、クライアントの使用されるプロジェクト、つまり 📦 AI Foundry クライアントを使用するアプリケーションのプロジェクトに、Aspire NuGet パッケージをインストールします。
dotnet add package Aspire.Azure.AI.Inference
Azure AI Foundry クライアントを追加する
クライアントを使用するプロジェクトのProgram.cs ファイルで、 AddAzureChatCompletionsClient(IHostApplicationBuilder, String) メソッドを使用して、依存関係の挿入 (DI) の ChatCompletionsClient を登録します。 このメソッドには、接続名パラメーターが必要です。
builder.AddAzureChatCompletionsClient(connectionName: "chat");
Tip
connectionName パラメーターは、appHost プロジェクトに Azure AI Foundry デプロイ リソースを追加するときに使用される名前と一致する必要があります。 詳細については、「 Azure AI Foundry デプロイ リソースの追加」を参照してください。
ChatCompletionsClientを追加した後、依存関係の挿入を使用してクライアント インスタンスを取得できます。
public class ExampleService(ChatCompletionsClient client)
{
// Use client...
}
詳細については、以下を参照してください。
-
Azure.AI.Inference ドキュメントで
ChatCompletionsClientの使用例を参照。 - 依存性注入の詳細については、.NETの依存性注入を参照してください。
登録済みの AI Foundry クライアント Azure 追加する IChatClient
AI Foundry クライアントで IChatClient インターフェースを使用する場合は、Azure API を AddChatClient メソッドにチェーンするだけです。
builder.AddAzureChatCompletionsClient(connectionName: "chat")
.AddChatClient();
IChatClient とそれに対応するライブラリの詳細については、「.NET (プレビュー) の人工知能を参照してください。
互換性のあるモデルには OpenAI クライアントを代替手段として使用する
OpenAI API と互換性のあるモデルの場合は、📦Aspire.OpenAI クライアント統合を使用することもできます。
builder.AddOpenAIClient("chat")
.AddChatClient();
このアプローチは、 OpenAI API 形式をサポートするモデルに適しています。
Configuration
Aspire
Azure AI Foundry ライブラリには、プロジェクトの要件と規則に基づいて Azure AI Foundry 接続を構成するための複数のオプションが用意されています。
EndpointとDeploymentId、またはConnectionStringを指定する必要があります。
接続文字列を使用する
ConnectionStrings 構成セクションの接続文字列を使用する場合は、builder.AddAzureChatCompletionsClientを呼び出すときに接続文字列の名前を指定できます。
builder.AddAzureChatCompletionsClient("chat");
接続文字列は ConnectionStrings 構成セクションから取得され、次の 2 つの形式がサポートされています。
Azure AI Foundry エンドポイント
推奨される方法は、 ChatCompletionsClientSettings.Credential プロパティと連携して接続を確立するエンドポイントを使用することです。 資格情報が構成されていない場合は、DefaultAzureCredential が使用されます。
{
"ConnectionStrings": {
"chat": "Endpoint=https://{endpoint}/;DeploymentId={deploymentName}"
}
}
接続文字列
または、カスタム接続文字列を使用できます。
{
"ConnectionStrings": {
"chat": "Endpoint=https://{endpoint}/;Key={account_key};DeploymentId={deploymentName}"
}
}
構成プロバイダーを使用する
Aspire
Azure AI 推論ライブラリでは、Microsoft.Extensions.Configurationがサポートされています。
ChatCompletionsClientSettings キーを使用して、構成から Aspire:Azure:AI:Inference を読み込みます。 いくつかのオプションを構成する appsettings.json の例:
{
"Aspire": {
"Azure": {
"AI": {
"Inference": {
"DisableTracing": false,
"ClientOptions": {
"UserAgentApplicationId": "myapp"
}
}
}
}
}
}
完全な AI 推論クライアント統合
インライン デリゲートを使用する
Action<ChatCompletionsClientSettings> configureSettings デリゲートを渡して、コードからのトレースを無効にするなど、一部またはすべてのオプションをインラインで設定できます。
builder.AddAzureChatCompletionsClient(
"chat",
static settings => settings.DisableTracing = true);
可観測性とテレメトリ
Aspire 統合により、ログ、トレース、メトリックの構成が自動的に設定されます。これは 、監視の柱と呼ばれることもあります。 統合の可観測性とテレメトリの詳細については、「 Aspire 統合の概要」を参照してください。 バッキング サービスによっては、一部の統合でこれらの機能の一部のみがサポートされる場合があります。 たとえば、一部の統合ではログ記録とトレースがサポートされますが、メトリックはサポートされません。 テレメトリ機能は、「 構成」 セクションに示されている手法を使用して無効にすることもできます。
Logging
Aspire Azure AI Foundry 統合では、次のログ カテゴリが使用されます。
AzureAzure.CoreAzure.Identity
Tracing
Aspire
Azure AI Foundry 統合は、OpenTelemetryで実行された操作に対してChatCompletionsClientを使用してトレース アクティビティを出力します。
こちらも参照ください
Aspire