.NET Aspire Azure OpenAI integrering (förhandsvisning)
omfattar: Hosting-integration och
Client integrering
Azure OpenAI Service ger åtkomst till OpenAI:s kraftfulla språk- och inbäddningsmodeller med den säkerhet och det företagslöfte som erbjuds av Azure. Med integreringen .NET AspireAzureOpenAI kan du ansluta till AzureOpenAI Service eller OpenAIAPI från dina .NET program.
Integrering av värdtjänster
.NET .NET Aspire Azure OpenAI som är värd för integrationsmodeller AzureOpenAI resurser som AzureOpenAIResource. Om du vill komma åt dessa typer och API:er för uttryck i din applikationsvärd projekt installerar du 📦Aspire.Hosting.Azure.CognitiveServices NuGet-paketet:
dotnet add package Aspire.Hosting.Azure.CognitiveServices
Mer information finns i dotnet add package eller Hantera paketberoenden i .NET applikationer.
Lägga till en AzureOpenAI resurs
För att lägga till en AzureOpenAIResource i ditt appvärdprojekt, anropa metoden AddAzureOpenAI:
var builder = DistributedApplication.CreateBuilder(args);
var openai = builder.AddAzureOpenAI("openai");
builder.AddProject<Projects.ExampleProject>()
.WithReference(openai);
// After adding all resources, run the app...
Föregående kod lägger till en AzureOpenAI resurs med namnet openai
till appvärdprojektet. Metoden WithReference skickar anslutningsinformationen till ExampleProject
-projektet.
Viktigt!
När du anropar AddAzureOpenAIanropas implicit AddAzureProvisioning(IDistributedApplicationBuilder)– vilket ger stöd för att generera Azure resurser dynamiskt under appstarten. Appen måste konfigurera lämplig prenumeration och plats. För mer information, se Lokal etablering: Konfiguration.
Lägga till en AzureOpenAI distributionsresurs
Om du vill lägga till en AzureOpenAI distributionsresurs anropar du metoden AddDeployment(IResourceBuilder<AzureOpenAIResource>, AzureOpenAIDeployment):
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...
Föregående kod:
- Lägger till en AzureOpenAI resurs med namnet
openai
. - Lägger till en AzureOpenAI distributionsresurs med namnet
preview
med modellnamnetgpt-4.5-preview
. Modellnamnet måste motsvara en tillgänglig modell i AzureOpenAI-tjänsten.
Genererat tillhandahållande av Bicep
Om du är ny på Bicepär det ett domänspecifikt språk för att definiera Azure-resurser. Med .NET.NET Aspirebehöver du inte skriva Bicep för hand, i stället genererar etablerings-API:erna Bicep åt dig. När du publicerar din app etablerar den genererade Bicep en AzureOpenAI resurs med standardvärden.
@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}'
Föregående Bicep är en modul som etablerar en Azure Cognitive Services-resurs med följande standardvärden:
-
location
: Platsen för resursgruppen. -
principalType
: Huvudtypen för Cognitive Services-resursen. -
principalId
: Huvud-ID för Cognitive Services-resursen. -
openai
: Cognitive Services-kontoresursen.-
kind
: Typen av resurs, inställd påOpenAI
. -
properties
: Resursens egenskaper.-
customSubDomainName
: Resursens anpassade underdomännamn baserat på den unika strängen i resursgrupps-ID:t. -
publicNetworkAccess
: Ange tillEnabled
. -
disableLocalAuth
: Ange tilltrue
.
-
-
sku
: Resursens SKU, inställd påS0
.
-
-
openai_CognitiveServicesOpenAIContributor
: Cognitive Services-resursägare baserat på den inbyggda rollenAzure Cognitive Services OpenAI Contributor
. Mer information finns i Azure Cognitive Services OpenAI Medverkare. -
preview
: Distributionsresursen baserat påpreview
namn.-
properties
: Egenskaperna för distributionsresursen.-
format
: Distributionsresursens format, inställt påOpenAI
. -
modelName
: Modellnamnet för distributionsresursen, inställt pågpt-4.5-preview
. -
modelVersion
: Modellversionen av distributionsresursen, inställd på2025-02-27
.
-
-
-
connectionString
: Anslutningssträngen som innehåller slutpunkten för Cognitive Services-resursen.
Den genererade Bicep-mallen är en utgångspunkt och kan anpassas för att möta dina specifika behov.
Anpassa infrastruktur för provisionering
Alla .NET AspireAzure resurser är underklasser av den AzureProvisioningResource typen. Detta möjliggör anpassning av den genererade Bicep genom att tillhandahålla ett fluent API för att konfigurera Azure resurser med hjälp av ConfigureInfrastructure<T>(IResourceBuilder<T>, Action<AzureResourceInfrastructure>)-API:et.
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");
});
Föregående kod:
- Kedjar ett anrop till ConfigureInfrastructure-API:et:
- Parametern
infra
är en instans av den AzureResourceInfrastructure typen. - De tillgängliga resurserna hämtas genom att anropa GetProvisionableResources()-metoden.
- Den enda CognitiveServicesAccount resursen hämtas.
- Egenskapen CognitiveServicesAccount.Sku tilldelas till en ny instans av CognitiveServicesSku med ett
E0
namn och CognitiveServicesSkuTier.Enterprise nivå. - En tagg läggs till i Cognitive Services-resursen med nyckeln
ExampleKey
och värdetExample value
.
- Parametern
Ansluta till en befintlig AzureOpenAI-tjänst
Du kan ha en befintlig AzureOpenAI tjänst som du vill ansluta till. Du kan länka ett anrop för att kommentera att din AzureOpenAIResource är en befintlig resurs:
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...
Mer information om hur du behandlar AzureOpenAI resurser som befintliga resurser finns i Använd befintliga Azure resurser.
I stället för att representera en AzureOpenAI resurs kan du också lägga till en anslutningssträng till appvärden. Vilket är en svagt typad metod som baseras enbart på ett string
värde. Om du vill lägga till en anslutning till en befintlig AzureOpenAI-tjänst anropar du metoden AddConnectionString:
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...
Anmärkning
Anslutningssträngar används för att representera ett brett spektrum av anslutningsinformation, inklusive databasanslutningar, meddelandeköer, slutpunkts-URI:er och andra tjänster. I .NET.NET Aspire nomenklatur används termen "anslutningssträng" för att representera alla typer av anslutningsinformation.
Anslutningssträngen konfigureras i appvärdens konfiguration, vanligtvis under Användarhemligheter, under avsnittet ConnectionStrings
:
{
"ConnectionStrings": {
"openai": "https://{account_name}.openai.azure.com/"
}
}
För mer information, se Lägg till befintliga Azure resurser med anslutningssträngar.
Client integration
Kom igång med .NET AspireAzureOpenAI-klientintegrering genom att installera 📦Aspire.Azure.AI.OpenAI NuGet-paket i det klientanropande projektet, det vill säga projektet för programmet som använder AzureOpenAI-klienten.
dotnet add package Aspire.Azure.AI.OpenAI
Lägga till en AzureOpenAI-klient
I den Program.cs-filen för ditt klientkrävande projekt använder du metoden AddAzureOpenAIClient(IHostApplicationBuilder, String, Action<AzureOpenAISettings>,
Action<IAzureClientBuilder<AzureOpenAIClient,AzureOpenAIClientOptions>>) på någon IHostApplicationBuilder för att registrera en OpenAIClient
för beroendeinjektion (DI).
AzureOpenAIClient
är en underklass av OpenAIClient
, så att du kan begära någon av typerna från DI. Detta säkerställer att koden inte är beroende av Azure-specifika funktioner förblir generisk. Metoden AddAzureOpenAIClient
kräver en parameter för anslutningsnamn.
builder.AddAzureOpenAIClient(connectionName: "openai");
Tips
Parametern connectionName
måste matcha namnet som används när du lägger till AzureOpenAI-resurs i appens värdprojekt. För mer information, se Lägg till en AzureOpenAI resurs.
När du har lagt till OpenAIClient
kan du hämta klientinstansen med hjälp av beroendeinjektion.
public class ExampleService(OpenAIClient client)
{
// Use client...
}
Mer information finns i:
-
Azure.AI.OpenAI dokumentation för exempel på hur du använder
OpenAIClient
. - Beroendeinjektion i .NET för mer information om beroendeinjektion.
- Snabbstart: Kom igång med GPT-35-Turbo och GPT-4 med AzureOpenAI Service.
Lägg till AzureOpenAI klient med registrerad IChatClient
Om du är intresserad av att använda IChatClient-gränssnittet, med OpenAI-klienten, kedjar du bara någon av följande API:er till metoden AddAzureOpenAIClient
:
-
AddChatClient(AspireOpenAIClientBuilder, String): Registrerar en singleton-
IChatClient
i de tjänster som tillhandahålls av AspireOpenAIClientBuilder. -
AddKeyedChatClient(AspireOpenAIClientBuilder, String, String): Registrerar en nyckelad singleton-
IChatClient
i de tjänster som tillhandahålls av AspireOpenAIClientBuilder.
Tänk till exempel på följande C#-kod som lägger till en IChatClient
till DI-containern:
builder.AddAzureOpenAIClient(connectionName: "openai")
.AddChatClient("deploymentName");
På samma sätt kan du lägga till en nyckelad IChatClient
med följande C#-kod:
builder.AddAzureOpenAIClient(connectionName: "openai")
.AddKeyedChatClient("serviceKey", "deploymentName");
Mer information om IChatClient
och dess motsvarande bibliotek finns i Artificiell intelligens i .NET (förhandsversion).
Konfigurera klientinställningar för AzureOpenAI
.NET Aspire
Azure
OpenAI-biblioteket innehåller en uppsättning inställningar för att konfigurera AzureOpenAI-klienten. Metoden AddAzureOpenAIClient
exponerar en valfri configureSettings
parameter av typen Action<AzureOpenAISettings>?
. För att konfigurera inställningar direkt, överväg följande exempel:
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);
});
Föregående kod anger egenskapen AzureOpenAISettings.DisableTracing till true
och anger egenskapen AzureOpenAISettings.Endpoint till AzureOpenAI slutpunkt.
Konfigurera AzureOpenAI klientbyggarens inställningar
Om du vill konfigurera AzureOpenAIClientOptions för klienten kan du använda metoden AddAzureOpenAIClient. Den här metoden tar en valfri configureClientBuilder
parameter av typen Action<IAzureClientBuilder<OpenAIClient, AzureOpenAIClientOptions>>?
. Tänk på följande exempel:
builder.AddAzureOpenAIClient(
connectionName: "openai",
configureClientBuilder: clientBuilder =>
{
clientBuilder.ConfigureOptions(options =>
{
options.UserAgentApplicationId = "CLIENT_ID";
});
});
Klientbyggaren är en instans av den IAzureClientBuilder<TClient,TOptions> typen, som tillhandahåller ett fluent-API för att konfigurera klientalternativen. Koden ovan anger egenskapen AzureOpenAIClientOptions.UserAgentApplicationId till CLIENT_ID
. Mer information finns i ConfigureOptions(ChatClientBuilder, Action<ChatOptions>).
Lägga till AzureOpenAI klient från konfigurationen
Dessutom tillhandahåller paketet tilläggsmetoden AddOpenAIClientFromConfiguration(IHostApplicationBuilder, String) för att registrera en instans av antingen OpenAIClient
eller AzureOpenAIClient
, baserat på den angivna anslutningssträngen. Den här metoden följer dessa regler:
- Om attributet
Endpoint
är tomt eller saknas registreras enOpenAIClient
-instans med hjälp av den angivna nyckeln, till exempelKey={key};
. - Om attributet
IsAzure
ärtrue
registreras enAzureOpenAIClient
. Annars registreras enOpenAIClient
, till exempelEndpoint={azure_endpoint};Key={key};IsAzure=true
registrerar enAzureOpenAIClient
, medanEndpoint=https://localhost:18889;Key={key}
registrerar enOpenAIClient
. - Om attributet
Endpoint
innehåller".azure."
registreras enAzureOpenAIClient
. annars registreras enOpenAIClient
, till exempelEndpoint=https://{account}.azure.com;Key={key};
.
Tänk på följande exempel:
builder.AddOpenAIClientFromConfiguration("openai");
Tips
En giltig anslutningssträng måste innehålla minst en Endpoint
eller en Key
.
Överväg följande exempel på anslutningssträngar och om de registrerar en OpenAIClient
eller AzureOpenAIClient
:
Exempel på anslutningssträng | Registrerad klienttyp |
---|---|
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 |
Lägga till nyckelade AzureOpenAI klienter
Det kan finnas situationer där du vill registrera flera OpenAIClient
instanser med olika anslutningsnamn. Om du vill registrera nyckelade AzureOpenAI klienter anropar du metoden AddKeyedAzureOpenAIClient:
builder.AddKeyedAzureOpenAIClient(name: "chat");
builder.AddKeyedAzureOpenAIClient(name: "code");
Viktigt!
När du använder nyckelade tjänster kontrollerar du att din AzureOpenAI resurs konfigurerar två namngivna anslutningar, en för chat
och en för code
.
Sedan kan du hämta klientinstanserna med hjälp av dependency injection. Om du till exempel vill hämta klienterna från en tjänst:
public class ExampleService(
[KeyedService("chat")] OpenAIClient chatClient,
[KeyedService("code")] OpenAIClient codeClient)
{
// Use clients...
}
Mer information finns i Nyckelade tjänster i .NET.
Lägga till nyckelade AzureOpenAI klienter från konfigurationen
Samma funktioner och regler finns för nyckelade AzureOpenAI klienter som för icke-nyckelade klienter. Du kan använda AddKeyedOpenAIClientFromConfiguration(IHostApplicationBuilder, String)-tilläggsmetoden för att registrera en OpenAIClient
eller AzureOpenAIClient
instans baserat på den angivna anslutningssträngen.
Tänk på följande exempel:
builder.AddKeyedOpenAIClientFromConfiguration("openai");
Den här metoden följer samma regler som beskrivs i Lägg till AzureOpenAI-klienten från konfigurationen.
Konfiguration
.NET Aspire
Azure
OpenAI-biblioteket innehåller flera alternativ för att konfigurera AzureOpenAI-anslutningen baserat på kraven och konventionerna i projektet. Antingen måste en Endpoint
eller en ConnectionString
anges.
Använda en anslutningssträng
När du använder en anslutningssträng från ConnectionStrings
konfigurationsavsnittet kan du ange namnet på anslutningssträngen när du anropar builder.AddAzureOpenAIClient
:
builder.AddAzureOpenAIClient("openai");
Anslutningssträngen hämtas från avsnittet ConnectionStrings
konfiguration och det finns två format som stöds:
Kontoslutpunkt
Den rekommenderade metoden är att använda en slutpunkt, som fungerar med egenskapen AzureOpenAISettings.Credential
för att upprätta en anslutning. Om inga autentiseringsuppgifter har konfigurerats används DefaultAzureCredential.
{
"ConnectionStrings": {
"openai": "https://{account_name}.openai.azure.com/"
}
}
Mer information finns i Använd AzureOpenAI utan nycklar.
Anslutningssträng
Du kan också använda en anpassad anslutningssträng:
{
"ConnectionStrings": {
"openai": "Endpoint=https://{account_name}.openai.azure.com/;Key={account_key};"
}
}
Om du vill ansluta till tjänsten som inte ärAzureOpenAI släpper du egenskapen Endpoint
och anger endast egenskapen Nyckel för att ange API-nyckel.
Använda konfigurationsprovidrar
.NET Aspire
Azure
OpenAI-integreringen stöder Microsoft.Extensions.Configuration. Den läser in AzureOpenAISettings
från konfigurationen med hjälp av Aspire:Azure:AI:OpenAI
-nyckeln. Exempel appsettings.json som konfigurerar några av alternativen:
{
"Aspire": {
"Azure": {
"AI": {
"OpenAI": {
"DisableTracing": false
}
}
}
}
}
Det fullständiga AzureOpenAI klientintegreringsschemat JSON finns i Aspire.Azure. Artificiell intelligens.OpenAI/ConfigurationSchema.json.
Använd inline-delegater
Du kan skicka Action<AzureOpenAISettings> configureSettings
-delegat för att konfigurera vissa eller alla alternativ inline, till exempel för att inaktivera spårning från koden:
builder.AddAzureOpenAIClient(
"openai",
static settings => settings.DisableTracing = true);
Du kan också konfigurera OpenAIClientOptions med den valfria parametern Action<IAzureClientBuilder<OpenAIClient, OpenAIClientOptions>> configureClientBuilder
för metoden AddAzureOpenAIClient
. Om du till exempel vill ange klient-ID för den här klienten:
builder.AddAzureOpenAIClient(
"openai",
configureClientBuilder: builder => builder.ConfigureOptions(
options => options.Diagnostics.ApplicationId = "CLIENT_ID"));
Observerbarhet och telemetri
.NET .NET Aspire integreringar konfigurerar automatiskt konfigurationer för loggning, spårning och mått, som ibland kallas grundpelarna för observerbarhet. Mer information om integreringsobservabilitet och telemetri finns i översikten över .NET.NET Aspire integreringar. Beroende på säkerhetskopieringstjänsten kanske vissa integreringar bara stöder vissa av dessa funktioner. Vissa integreringar stöder till exempel loggning och spårning, men inte mått. Telemetrifunktioner kan också inaktiveras med hjälp av de tekniker som visas i avsnittet Configuration.
Skogsavverkning
.NET Aspire Azure OpenAI-integreringen använder följande loggkategorier:
Azure
Azure.Core
Azure.Identity
Spårning
.NET Aspire
Azure
OpenAI-integreringen genererar spårningsaktiviteter med hjälp av OpenTelemetry för åtgärder som utförs med OpenAIClient
.
Viktigt!
Spårning är för närvarande på experimentstadiet med den här integrationen. Om du vill anmäla dig till den anger du antingen OPENAI_EXPERIMENTAL_ENABLE_OPEN_TELEMETRY
miljövariabeln till true
eller 1
, eller anropar AppContext.SetSwitch("OpenAI.Experimental.EnableOpenTelemetry", true))
under appstart.
Se även
- Azure OpenAI
- översikt över .NET.NET Aspire integreringar
- översikt över .NET AspireAzure integreringar
- .NET Aspire GitHub repo
.NET Aspire