.NET Aspire Azure OpenAI-integratie (voorvertoning)
Omvat: Hostingintegratie en
Client-integratie
Azure OpenAI Service biedt toegang tot de krachtige taal van OpenAIen het insluiten van modellen met de beveiliging en bedrijfsbelofte van Azure. Met de integratie van .NET AspireAzureOpenAI kunt u verbinding maken met AzureOpenAI Service of de API van OpenAIvanuit uw .NET-toepassingen.
Hostingintegratie
De .NET.NET AspireAzure OpenAI hosting integratiemodellen met AzureOpenAI resources als AzureOpenAIResource. Installeer het 📦Aspire.Hosting.Azure.CognitiveServices NuGet-pakket om toegang te krijgen tot deze typen en API's en ze te gebruiken binnen uw app-host project.
dotnet add package Aspire.Hosting.Azure.CognitiveServices
Zie dotnet pakket toevoegen of Pakketafhankelijkheden beheren in .NET toepassingenvoor meer informatie.
Een AzureOpenAI-resource toevoegen
Als u een AzureOpenAIResource wilt toevoegen aan uw app-hostproject, roept u de methode AddAzureOpenAI aan:
var builder = DistributedApplication.CreateBuilder(args);
var openai = builder.AddAzureOpenAI("openai");
builder.AddProject<Projects.ExampleProject>()
.WithReference(openai);
// After adding all resources, run the app...
Met de voorgaande code wordt een AzureOpenAI resource met de naam openai
toegevoegd aan het app-hostproject. De methode WithReference geeft de verbindingsgegevens door aan het ExampleProject
-project.
Belangrijk
Wanneer u AddAzureOpenAIaanroept, wordt impliciet AddAzureProvisioning(IDistributedApplicationBuilder)aangeroepen. Hiermee wordt ondersteuning toegevoegd voor het dynamisch genereren van Azure resources tijdens het opstarten van de app. De app moet het juiste abonnement en de juiste locatie configureren. Zie Lokale inrichting: Configuratievoor meer informatie.
Een AzureOpenAI-implementatieresource toevoegen
Als u een AzureOpenAI implementatieresource wilt toevoegen, roept u de AddDeployment(IResourceBuilder<AzureOpenAIResource>, AzureOpenAIDeployment) methode aan:
var builder = DistributedApplication.CreateBuilder(args);
var openai = builder.AddAzureOpenAI("openai");
openai.AddDeployment(
new AzureOpenAIDeployment(
name: "preview",
modelName: "gpt-4.5-preview",
modelVersion: "2025-02-27"));
builder.AddProject<Projects.ExampleProject>()
.WithReference(openai)
.WaitFor(openai);
// After adding all resources, run the app...
De voorgaande code:
- Hiermee wordt een AzureOpenAI resource met de naam
openai
toegevoegd. - Hiermee voegt u een AzureOpenAI implementatieresource toe met de naam
preview
met een modelnaam vangpt-4.5-preview
. De modelnaam moet overeenkomen met een beschikbaar model in de AzureOpenAI-service.
Gegenereerde implementatie Bicep
Als je nieuw bent met Bicep, is dit een domeinspecifieke taal voor het definiëren van Azure-bronnen. Met .NET.NET Aspirehoeft u bicep niet handmatig te schrijven, in plaats daarvan genereren de inrichtings-API's Bicep voor u. Wanneer u uw app publiceert, richt de gegenereerde Bicep een AzureOpenAI-resource in met standaardinstellingen.
@description('The location for the resource(s) to be deployed.')
param location string = resourceGroup().location
param principalType string
param principalId string
resource openai 'Microsoft.CognitiveServices/accounts@2024-10-01' = {
name: take('openai-${uniqueString(resourceGroup().id)}', 64)
location: location
kind: 'OpenAI'
properties: {
customSubDomainName: toLower(take(concat('openai', uniqueString(resourceGroup().id)), 24))
publicNetworkAccess: 'Enabled'
disableLocalAuth: true
}
sku: {
name: 'S0'
}
tags: {
'aspire-resource-name': 'openai'
}
}
resource openai_CognitiveServicesOpenAIContributor 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(openai.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'a001fd3d-188f-4b5d-821b-7da978bf7442'))
properties: {
principalId: principalId
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'a001fd3d-188f-4b5d-821b-7da978bf7442')
principalType: principalType
}
scope: openai
}
resource preview 'Microsoft.CognitiveServices/accounts/deployments@2024-10-01' = {
name: 'preview'
properties: {
model: {
format: 'OpenAI'
name: 'gpt-4.5-preview'
version: '2025-02-27'
}
}
sku: {
name: 'Standard'
capacity: 8
}
parent: openai
}
output connectionString string = 'Endpoint=${openai.properties.endpoint}'
De voorgaande Bicep is een module die een Azure Cognitive Services-resource in richt met de volgende standaardwaarden:
-
location
: de locatie van de resourcegroep. -
principalType
: Het hoofdtype van de Cognitive Services-resource. -
principalId
: De Hoofd-ID van de Cognitive Services-resource. -
openai
: de Cognitive Services-accountresource.-
kind
: het type resource, ingesteld opOpenAI
. -
properties
: de eigenschappen van de resource.-
customSubDomainName
: de naam van het aangepaste subdomein voor de resource, op basis van de unieke tekenreeks van de resourcegroep-id. -
publicNetworkAccess
: Ingesteld opEnabled
. -
disableLocalAuth
: Ingesteld optrue
.
-
-
sku
: de SKU van de resource, ingesteld opS0
.
-
-
openai_CognitiveServicesOpenAIContributor
: De eigenaar van de Cognitive Services-resource, op basis van de ingebouwdeAzure Cognitive Services OpenAI Contributor
-rol. Zie Azure Cognitive Services OpenAI Inzendervoor meer informatie. -
preview
: de implementatieresource, op basis van de naam van depreview
.-
properties
: de eigenschappen van de implementatieresource.-
format
: de indeling van de implementatieresource, ingesteld opOpenAI
. -
modelName
: de modelnaam van de implementatieresource, ingesteld opgpt-4.5-preview
. -
modelVersion
: de modelversie van de implementatieresource, ingesteld op2025-02-27
.
-
-
-
connectionString
: de verbindingsreeks die het eindpunt van de Cognitive Services-resource bevat.
De gegenereerde Bicep is een uitgangspunt en kan worden aangepast aan uw specifieke vereisten.
Voorzieningsinfrastructuur personaliseren
Alle .NET AspireAzure resources zijn subklassen van het AzureProvisioningResource type. Hierdoor kunt u de gegenereerde Bicep aanpassen door een fluent-API te bieden voor het configureren van de Azure-resources, met behulp van de ConfigureInfrastructure<T>(IResourceBuilder<T>, Action<AzureResourceInfrastructure>)-API:
builder.AddAzureOpenAI("openai")
.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");
});
De voorgaande code:
- Koppelt een aanroep naar de ConfigureInfrastructure-API:
- De parameter
infra
is een exemplaar van het AzureResourceInfrastructure type. - De voorzienbare resources worden opgehaald door middel van de GetProvisionableResources() methode.
- De enkele resource CognitiveServicesAccount wordt opgehaald.
- De eigenschap CognitiveServicesAccount.Sku wordt toegewezen aan een nieuw exemplaar van CognitiveServicesSku met een
E0
naam en CognitiveServicesSkuTier.Enterprise laag. - Er wordt een tag toegevoegd aan de Cognitive Services-resource met een sleutel van
ExampleKey
en een waarde vanExample value
.
- De parameter
Verbinding maken met een bestaande AzureOpenAI-service
Mogelijk hebt u een bestaande AzureOpenAI-service waarmee u verbinding wilt maken. U kunt een aanroep koppelen om aantekeningen te maken dat uw AzureOpenAIResource een bestaande resource is:
var builder = DistributedApplication.CreateBuilder(args);
var existingOpenAIName = builder.AddParameter("existingOpenAIName");
var existingOpenAIResourceGroup = builder.AddParameter("existingOpenAIResourceGroup");
var openai = builder.AddAzureOpenAI("openai")
.AsExisting(existingOpenAIName, existingOpenAIResourceGroup);
builder.AddProject<Projects.ExampleProject>()
.WithReference(openai);
// After adding all resources, run the app...
Zie Bestaande Azure bronnen gebruikenvoor meer informatie over het behandelen van AzureOpenAI bronnen als bestaande.
U kunt ook een verbindingsreeks aan de app-host toevoegen in plaats van het weergeven van een AzureOpenAI resource. Dit is een zwak getypte benadering die uitsluitend is gebaseerd op een string
waarde. Als u een verbinding wilt toevoegen aan een bestaande AzureOpenAI-service, roept u de AddConnectionString methode aan:
var builder = DistributedApplication.CreateBuilder(args);
var openai = builder.ExecutionContext.IsPublishMode
? builder.AddAzureOpenAI("openai")
: builder.AddConnectionString("openai");
builder.AddProject<Projects.ExampleProject>()
.WithReference(openai);
// After adding all resources, run the app...
Notitie
Verbindingsreeksen worden gebruikt om een breed scala aan verbindingsgegevens weer te geven, waaronder databaseverbindingen, berichtbrokers, eindpunt-URI's en andere services. In .NET.NET Aspire nomenclatuur wordt de term "verbindingsreeks" gebruikt om alle soorten verbindingsgegevens weer te geven.
De verbindingsreeks wordt geconfigureerd in de configuratie van de app-host, meestal onder Gebruikersgeheimen, onder de sectie ConnectionStrings
:
{
"ConnectionStrings": {
"openai": "https://{account_name}.openai.azure.com/"
}
}
Voor meer informatie, zie Bestaande Azure resources toevoegen met verbindingsreeksen.
Client integratie
Installeer het 📦Aspire.Azure.AI.OpenAI NuGet-pakket in het project dat door de client wordt gebruikt, oftewel het project voor de toepassing die van de AzureOpenAI-client gebruikmaakt, om te beginnen met de .NET AspireAzureOpenAI-clientintegratie.
dotnet add package Aspire.Azure.AI.OpenAI
Een AzureOpenAI-client toevoegen
Gebruik in het Program.cs-bestand van uw clientgebruikte project de methode AddAzureOpenAIClient(IHostApplicationBuilder, String, Action<AzureOpenAISettings>,
Action<IAzureClientBuilder<AzureOpenAIClient,AzureOpenAIClientOptions>>) op elke IHostApplicationBuilder om een OpenAIClient
te registreren voor afhankelijkheidsinjectie (DI). De AzureOpenAIClient
is een subklasse van OpenAIClient
, zodat u een van beide typen kunt aanvragen bij DI. Dit zorgt ervoor dat code die niet afhankelijk is van Azure-specifieke functies generiek blijft. Voor de AddAzureOpenAIClient
-methode is een verbindingsnaamparameter vereist.
builder.AddAzureOpenAIClient(connectionName: "openai");
Hint
De parameter connectionName
moet overeenkomen met de naam die wordt gebruikt bij het toevoegen van de AzureOpenAI resource in het app-hostproject. Zie Een AzureOpenAI-resource toevoegenvoor meer informatie.
Nadat u de OpenAIClient
hebt toegevoegd, kunt u het clientexemplaar ophalen met behulp van dependency injection:
public class ExampleService(OpenAIClient client)
{
// Use client...
}
Zie voor meer informatie:
-
Azure. AI.OpenAI documentatie voor voorbeelden van het gebruik van de
OpenAIClient
. - Afhankelijkheidsinjectie in .NET voor meer informatie over afhankelijkheidsinjectie.
- Quickstart: Aan de slag met GPT-35-Turbo en GPT-4 met AzureOpenAI Service.
Azure
OpenAI-client toevoegen met geregistreerde IChatClient
Als u geïnteresseerd bent in het gebruik van de IChatClient-interface, koppelt u met de OpenAI-client een van de volgende API's aan de AddAzureOpenAIClient
methode:
-
AddChatClient(AspireOpenAIClientBuilder, String): Registreert een singleton-
IChatClient
in de diensten die door de AspireOpenAIClientBuilderworden geleverd. -
AddKeyedChatClient(AspireOpenAIClientBuilder, String, String): Registreert een keyed singleton-
IChatClient
in de door de AspireOpenAIClientBuildergeleverde diensten.
Bekijk bijvoorbeeld de volgende C#-code waarmee een IChatClient
wordt toegevoegd aan de DI-container:
builder.AddAzureOpenAIClient(connectionName: "openai")
.AddChatClient("deploymentName");
Op dezelfde manier kunt u een sleutel IChatClient
toevoegen met de volgende C#-code.
builder.AddAzureOpenAIClient(connectionName: "openai")
.AddKeyedChatClient("serviceKey", "deploymentName");
Zie Kunstmatige intelligentie in .NET (preview)-voor meer informatie over de IChatClient
en de bijbehorende bibliotheek.
Clientinstellingen voor AzureOpenAI configureren
De .NET AspireAzureOpenAI-bibliotheek biedt een set instellingen voor het configureren van de AzureOpenAI-client. De methode AddAzureOpenAIClient
maakt een optionele configureSettings
parameter van het type Action<AzureOpenAISettings>?
beschikbaar. Als u instellingen inline wilt configureren, bekijkt u het volgende voorbeeld:
builder.AddAzureOpenAIClient(
connectionName: "openai",
configureSettings: settings =>
{
settings.DisableTracing = true;
var uriString = builder.Configuration["AZURE_OPENAI_ENDPOINT"]
?? throw new InvalidOperationException("AZURE_OPENAI_ENDPOINT is not set.");
settings.Endpoint = new Uri(uriString);
});
Met de voorgaande code wordt de eigenschap AzureOpenAISettings.DisableTracing ingesteld op true
en wordt de eigenschap AzureOpenAISettings.Endpoint ingesteld op het AzureOpenAI-eindpunt.
Opties voor AzureOpenAI clientbouwer configureren
Als u de AzureOpenAIClientOptions voor de client wilt configureren, kunt u de AddAzureOpenAIClient methode gebruiken. Deze methode gebruikt een optionele configureClientBuilder
parameter van het type Action<IAzureClientBuilder<OpenAIClient, AzureOpenAIClientOptions>>?
. Bekijk het volgende voorbeeld:
builder.AddAzureOpenAIClient(
connectionName: "openai",
configureClientBuilder: clientBuilder =>
{
clientBuilder.ConfigureOptions(options =>
{
options.UserAgentApplicationId = "CLIENT_ID";
});
});
De clientbouwer is een exemplaar van het IAzureClientBuilder<TClient,TOptions> type, dat een fluent-API biedt voor het configureren van de clientopties. Met de voorgaande code wordt de eigenschap AzureOpenAIClientOptions.UserAgentApplicationId ingesteld op CLIENT_ID
. Zie ConfigureOptions(ChatClientBuilder, Action<ChatOptions>)voor meer informatie.
Azure OpenAI client toevoegen vanuit de configuratie
Daarnaast biedt het pakket de AddOpenAIClientFromConfiguration(IHostApplicationBuilder, String) extensiemethode voor het registreren van een OpenAIClient
of AzureOpenAIClient
exemplaar op basis van de opgegeven verbindingsreeks. Deze methode volgt deze regels:
- Als het kenmerk
Endpoint
leeg is of ontbreekt, wordt eenOpenAIClient
exemplaar geregistreerd met behulp van de opgegeven sleutel, bijvoorbeeldKey={key};
. - Als het kenmerk
IsAzure
true
is, wordt eenAzureOpenAIClient
geregistreerd; anders wordt eenOpenAIClient
geregistreerd, bijvoorbeeldEndpoint={azure_endpoint};Key={key};IsAzure=true
eenAzureOpenAIClient
registreert, terwijlEndpoint=https://localhost:18889;Key={key}
eenOpenAIClient
registreert. - Als het kenmerk
Endpoint
".azure."
bevat, wordt er eenAzureOpenAIClient
geregistreerd; anders wordt eenOpenAIClient
geregistreerd, bijvoorbeeldEndpoint=https://{account}.azure.com;Key={key};
.
Bekijk het volgende voorbeeld:
builder.AddOpenAIClientFromConfiguration("openai");
Hint
Een geldige verbindingsreeks moet ten minste een Endpoint
of een Key
bevatten.
Bekijk het volgende voorbeeld van verbindingsreeksen en of ze een OpenAIClient
of AzureOpenAIClient
registreren:
Voorbeeld van verbindingsreeks | Geregistreerd cliënttype |
---|---|
Endpoint=https://{account_name}.openai.azure.com/;Key={account_key} |
AzureOpenAIClient |
Endpoint=https://{account_name}.openai.azure.com/;Key={account_key};IsAzure=false |
OpenAIClient |
Endpoint=https://{account_name}.openai.azure.com/;Key={account_key};IsAzure=true |
AzureOpenAIClient |
Endpoint=https://localhost:18889;Key={account_key} |
OpenAIClient |
Keyed AzureOpenAI-clients toevoegen
Er kunnen situaties zijn waarin u meerdere OpenAIClient
exemplaren met verschillende verbindingsnamen wilt registreren. Als u keyed AzureOpenAI-clients wilt registreren, roept u de methode AddKeyedAzureOpenAIClient aan:
builder.AddKeyedAzureOpenAIClient(name: "chat");
builder.AddKeyedAzureOpenAIClient(name: "code");
Belangrijk
Wanneer u sleutelservices gebruikt, moet u ervoor zorgen dat uw AzureOpenAI resource twee benoemde verbindingen configureert, één voor chat
en één voor code
.
Vervolgens kunt u de clientexemplaren ophalen met behulp van afhankelijkheidsinjectie. Bijvoorbeeld om de clients op te halen uit een service:
public class ExampleService(
[KeyedService("chat")] OpenAIClient chatClient,
[KeyedService("code")] OpenAIClient codeClient)
{
// Use clients...
}
Zie Keyed-services in .NETvoor meer informatie.
Sleutel-AzureOpenAI-clients toevoegen vanuit de configuratie
Dezelfde functionaliteit en regels bestaan voor keyed AzureOpenAI clients als voor de niet-gecodeerde clients. U kunt de extensiemethode AddKeyedOpenAIClientFromConfiguration(IHostApplicationBuilder, String) gebruiken om een OpenAIClient
of AzureOpenAIClient
exemplaar te registreren op basis van de opgegeven verbindingsreeks.
Bekijk het volgende voorbeeld:
builder.AddKeyedOpenAIClientFromConfiguration("openai");
Deze methode volgt dezelfde regels als beschreven in de Toevoegen AzureOpenAI client vanuit configuratie.
Configuratie
De .NET AspireAzureOpenAI-bibliotheek biedt meerdere opties voor het configureren van de AzureOpenAI verbinding op basis van de vereisten en conventies van uw project. Er moet een Endpoint
of een ConnectionString
worden opgegeven.
Een verbindingsreeks gebruiken
Wanneer u een verbindingsreeks uit de sectie ConnectionStrings
configuratie gebruikt, kunt u de naam van de verbindingsreeks opgeven bij het aanroepen van builder.AddAzureOpenAIClient
:
builder.AddAzureOpenAIClient("openai");
De verbindingsreeks wordt opgehaald uit de ConnectionStrings
configuratiesectie en er zijn twee ondersteunde indelingen:
Accounteindpunt
De aanbevolen methode is om een Endpoint-te gebruiken, die werkt met de eigenschap AzureOpenAISettings.Credential
om een verbinding tot stand te brengen. Als er geen referentiegegevens zijn geconfigureerd, wordt de DefaultAzureCredential gebruikt.
{
"ConnectionStrings": {
"openai": "https://{account_name}.openai.azure.com/"
}
}
Zie Gebruik AzureOpenAI zonder sleutelsvoor meer informatie.
Verbindingsreeks
U kunt ook een aangepaste verbindingsreeks gebruiken:
{
"ConnectionStrings": {
"openai": "Endpoint=https://{account_name}.openai.azure.com/;Key={account_key};"
}
}
Als u verbinding wilt maken met de niet-AzureOpenAI-service, laat u de eigenschap Endpoint
achterwege en stelt u alleen de eigenschap Sleutel in om de API-sleutelin te stellen.
Configuratieproviders gebruiken
De .NET AspireAzureOpenAI-integratie ondersteunt Microsoft.Extensions.Configuration. Het laadt AzureOpenAISettings
vanuit de configuratie met behulp van de Aspire:Azure:AI:OpenAI
sleutel. Voorbeeld appsettings.json waarmee een aantal van de opties wordt geconfigureerd:
{
"Aspire": {
"Azure": {
"AI": {
"OpenAI": {
"DisableTracing": false
}
}
}
}
}
Inline delegates gebruiken
Je kunt de Action<AzureOpenAISettings> configureSettings
delegate doorgeven om enkele of alle opties inline in te stellen, bijvoorbeeld om tracering vanuit de code uit te schakelen.
builder.AddAzureOpenAIClient(
"openai",
static settings => settings.DisableTracing = true);
U kunt de OpenAIClientOptions ook instellen met behulp van de optionele Action<IAzureClientBuilder<OpenAIClient, OpenAIClientOptions>> configureClientBuilder
parameter van de AddAzureOpenAIClient
methode. Als u bijvoorbeeld de client-id voor deze client wilt instellen:
builder.AddAzureOpenAIClient(
"openai",
configureClientBuilder: builder => builder.ConfigureOptions(
options => options.Diagnostics.ApplicationId = "CLIENT_ID"));
Waarneembaarheid en telemetrie
.NET .NET Aspire integraties stellen automatisch Logging, Tracing en metrische configuraties in, die soms ook wel aangeduid worden als de pijlers van waarneembaarheid. Zie .NET.NET Aspire overzicht van integratieintegratiesvoor meer informatie over de waarneembaarheid en telemetrie van integraties. Afhankelijk van de back-upservice ondersteunen sommige integraties mogelijk slechts enkele van deze functies. Sommige integraties ondersteunen bijvoorbeeld logboekregistratie en tracering, maar geen metrische gegevens. Telemetriefuncties kunnen ook worden uitgeschakeld met behulp van de technieken die worden weergegeven in de sectie Configuratie.
Loggen
De .NET AspireAzureOpenAI-integratie maakt gebruik van de volgende logboekcategorieën:
Azure
Azure.Core
Azure.Identity
Opsporing
De .NET AspireAzureOpenAI-integratie verzendt traceringsactiviteiten met behulp van OpenTelemetry voor bewerkingen die met de OpenAIClient
worden uitgevoerd.
Belangrijk
Tracing is momenteel proefondervindelijk met deze integratie. Als u zich hiervoor wilt aanmelden, stelt u de OPENAI_EXPERIMENTAL_ENABLE_OPEN_TELEMETRY
omgevingsvariabele in op true
of 1
of roept u AppContext.SetSwitch("OpenAI.Experimental.EnableOpenTelemetry", true))
aan tijdens het opstarten van de app.
Zie ook
- Azure OpenAI
- overzicht van .NET.NET Aspire integraties
- overzicht van .NET AspireAzure integraties
- .NET Aspire GitHub repo