integrazione di .NET AspireAzureOpenAI (anteprima)
Articolo
include integrazione dell'hosting e integrazione di Client
Azure
OpenAI Service consente di accedere ai potenti modelli linguistici avanzati e di incorporamento di OpenAIcon la sicurezza e la garanzia aziendale di Azure. L'integrazione .NET AspireAzureOpenAI consente di connettersi all'API di AzureOpenAI o di OpenAIdalle applicazioni .NET.
var builder = DistributedApplication.CreateBuilder(args);
var openai = builder.AddAzureOpenAI("openai");
builder.AddProject<Projects.ExampleProject>()
.WithReference(openai);
// After adding all resources, run the app...
Il codice precedente aggiunge una risorsa AzureOpenAI denominata openai al progetto host dell'app. Il metodo WithReference passa le informazioni di connessione al progetto ExampleProject.
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...
Il codice precedente:
Aggiunge una risorsa AzureOpenAI denominata openai.
Aggiunge una risorsa di distribuzione AzureOpenAI chiamata preview con il nome del modello gpt-4.5-preview. Il nome del modello deve corrispondere a un modello OpenAI.
Generazione dell'approvvigionamento Bicep
Se sei nuovo a Bicep, si tratta di un linguaggio specifico per definire le risorse Azure. Con .NET.NET Aspire, non è necessario scrivere manualmente Bicep, poiché le API di provisioning generano automaticamente Bicep per te. Quando si pubblica l'applicazione, il Bicep generato provvede al provisioning di una risorsa AzureOpenAI con impostazioni predefinite standard.
Il Bicep precedente è un modulo che fornisce una risorsa dei Servizi cognitivi Azure con le seguenti impostazioni predefinite:
location: posizione del gruppo di risorse.
principalType: tipo principale della risorsa Servizi cognitivi.
principalId: ID principale della risorsa servizi cognitivi.
openai: la risorsa dell'account Servizi Cognitivi.
kind: tipo di risorsa, impostato su OpenAI.
properties: proprietà della risorsa.
customSubDomainName: nome del sottodominio personalizzato per la risorsa, in base alla stringa univoca dell'ID del gruppo di risorse.
publicNetworkAccess: impostare su Enabled.
disableLocalAuth: impostare su true.
sku: SKU della risorsa, impostato su S0.
openai_CognitiveServicesOpenAIContributor: Proprietario della risorsa di Servizi cognitivi, basato sul ruolo predefinito Azure Cognitive Services OpenAI Contributor. Per altre informazioni, vedere Azure Servizi cognitivi OpenAI Collaboratore.
preview: La risorsa di distribuzione, basata sul nome preview.
properties: proprietà della risorsa di distribuzione.
format: formato della risorsa di distribuzione, impostato su OpenAI.
modelName: nome del modello della risorsa di distribuzione, impostato su gpt-4.5-preview.
modelVersion: versione del modello della risorsa di distribuzione, impostata su 2025-02-27.
connectionString: stringa di connessione contenente l'endpoint della risorsa servizi cognitivi.
Il Bicep generato è un punto di partenza e viene influenzato dalle modifiche apportate all'infrastruttura di provisioning in C#. Le personalizzazioni del file Bicep verranno direttamente sovrascritte, quindi è necessario apportare modifiche tramite le API di provisioning C# per garantire che siano riflesse nei file generati.
Un tag viene aggiunto alla risorsa Servizi cognitivi con una chiave di ExampleKey e un valore di Example value.
Collegarsi a un servizio esistente AzureOpenAI
Potrebbe essere disponibile un servizio di AzureOpenAI esistente a cui connettersi. È possibile concatenare una chiamata per annotare che il AzureOpenAIResource è una risorsa esistente:
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...
Per altre informazioni sulla gestione delle risorse di AzureOpenAI come risorse esistenti, vedere Usare risorse Azure esistenti.
In alternativa, anziché rappresentare una risorsa AzureOpenAI, è possibile aggiungere una stringa di connessione all'host dell'app. Si tratta di un approccio di tipo debole basato esclusivamente su un valore string. Per aggiungere una connessione a un servizio di AzureOpenAI esistente, chiamare il metodo 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...
Nota
Le stringhe di connessione vengono usate per rappresentare un'ampia gamma di informazioni di connessione, tra cui connessioni di database, broker di messaggi, URI degli endpoint e altri servizi. Nella nomenclatura .NET.NET Aspire, il termine "stringa di connessione" è utilizzato per rappresentare qualsiasi tipo di informazioni di connessione.
La stringa di connessione è configurata nella configurazione dell'host dell'app, in genere in Segreti utente, nella sezione ConnectionStrings:
Per iniziare a usare l'integrazione client .NET AspireAzureOpenAI, installare il pacchetto NuGet 📦Aspire.Azure.AI.OpenAI nel progetto consumer, ovvero il progetto per l'applicazione che utilizza il client AzureOpenAI.
Il parametro connectionName deve corrispondere al nome usato quando si aggiunge la risorsa AzureOpenAI nel progetto host dell'app. Per altre informazioni, vedere Aggiungere una risorsa AzureOpenAI.
Dopo aver aggiunto il OpenAIClient, è possibile recuperare l'istanza client tramite Dependency Injection:
public class ExampleService(OpenAIClient client)
{
// Use client...
}
Aggiungere AzureOpenAI client con IChatClient registrati
Se si è interessati a usare l'interfaccia IChatClient, con il client OpenAI, è sufficiente concatenare una delle API seguenti al metodo AddAzureOpenAIClient:
La libreria .NET AspireAzureOpenAI fornisce un set di impostazioni per configurare il client AzureOpenAI. Il metodo AddAzureOpenAIClient espone un parametro facoltativo configureSettings di tipo Action<AzureOpenAISettings>?. Per configurare le impostazioni inline, considerare l'esempio seguente:
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);
});
Configurare le opzioni del costruttore client AzureOpenAI
Per configurare il AzureOpenAIClientOptions per il client, è possibile usare il metodo AddAzureOpenAIClient. Questo metodo accetta un parametro configureClientBuilder facoltativo di tipo Action<IAzureClientBuilder<OpenAIClient, AzureOpenAIClientOptions>>?. Si consideri l'esempio seguente:
Aggiungere AzureOpenAI client dalla configurazione
Inoltre, il pacchetto fornisce il metodo di estensione AddOpenAIClientFromConfiguration(IHostApplicationBuilder, String) per registrare un'istanza di OpenAIClient o AzureOpenAIClient in base alla stringa di connessione specificata. Questo metodo segue queste regole:
Se l'attributo Endpoint è vuoto o mancante, un'istanza di OpenAIClient viene registrata usando la chiave fornita, ad esempio Key={key};.
Se l'attributo IsAzure è true, viene registrato un AzureOpenAIClient; in caso contrario, viene registrato un OpenAIClient, ad esempio, Endpoint={azure_endpoint};Key={key};IsAzure=true registra un AzureOpenAIClient, mentre Endpoint=https://localhost:18889;Key={key} registra un OpenAIClient.
Se l'attributo Endpoint contiene ".azure.", viene registrato un AzureOpenAIClient; in caso contrario, viene registrato un OpenAIClient, ad esempio Endpoint=https://{account}.azure.com;Key={key};.
In alcuni casi potrebbe essere necessario registrare più istanze di OpenAIClient con nomi di connessione diversi. Per registrare i client AzureOpenAI con chiave, chiamare il metodo AddKeyedAzureOpenAIClient:
Aggiungi client AzureOpenAI con chiave dalla configurazione
Esistono le stesse funzionalità e regole per i client con chiave AzureOpenAI per i client non con chiave. È possibile usare il metodo di estensione AddKeyedOpenAIClientFromConfiguration(IHostApplicationBuilder, String) per registrare un'istanza di OpenAIClient o AzureOpenAIClient in base alla stringa di connessione specificata.
La libreria .NET AspireAzureOpenAI offre più opzioni per configurare la connessione AzureOpenAI in base ai requisiti e alle convenzioni del progetto. È necessario fornire un Endpoint o un ConnectionString.
Usare una stringa di connessione
Quando si usa una stringa di connessione dalla sezione di configurazione ConnectionStrings, è possibile specificare il nome della stringa di connessione quando si chiama builder.AddAzureOpenAIClient:
builder.AddAzureOpenAIClient("openai");
La stringa di connessione viene recuperata dalla sezione di configurazione ConnectionStrings e sono supportati due formati:
Endpoint dell'account
L'approccio consigliato consiste nell'usare un Endpoint, che funziona con la proprietà AzureOpenAISettings.Credential per stabilire una connessione. Se non è configurata alcuna credenziale, viene usato il DefaultAzureCredential.
Per connettersi al servizio nonAzureOpenAI, eliminare la proprietà Endpoint e impostare solo la proprietà Key per impostare la chiave API .
Usare i fornitori di configurazione
L'integrazione .NET AspireAzureOpenAI supporta Microsoft.Extensions.Configuration. Carica il AzureOpenAISettings dalla configurazione usando la chiave Aspire:Azure:AI:OpenAI. Esempio appsettings.json che configura alcune delle opzioni:
È possibile passare il delegato Action<AzureOpenAISettings> configureSettings per configurare alcune o tutte le opzioni direttamente, ad esempio per disabilitare il tracciamento dal codice:
È anche possibile configurare OpenAIClientOptions usando il parametro facoltativo Action<IAzureClientBuilder<OpenAIClient, OpenAIClientOptions>> configureClientBuilder del metodo AddAzureOpenAIClient. Ad esempio, per impostare l'ID client per questo client:
.NET
.NET Aspire le integrazioni impostano automaticamente le configurazioni di logging, tracciamento e metriche, talvolta chiamate i pilastri dell'osservabilità. Per altre informazioni sull'osservabilità e la telemetria dell'integrazione, vedere panoramica delle integrazioni .NET.NET Aspire. A seconda del servizio di backup, alcune integrazioni possono supportare solo alcune di queste funzionalità. Ad esempio, alcune integrazioni supportano la registrazione e la traccia, ma non le metriche. Le funzionalità di telemetria possono essere disabilitate anche usando le tecniche presentate nella sezione Configurazione .
Registrazione
L'integrazione .NET AspireAzureOpenAI usa le categorie di log seguenti:
Azure
Azure.Core
Azure.Identity
Tracciamento
L'integrazione .NET AspireAzureOpenAI genera attività di traccia usando OpenTelemetry per le operazioni eseguite con il OpenAIClient.
Importante
Il monitoraggio è attualmente sperimentale con questa integrazione. Per acconsentire esplicitamente, impostare la variabile di ambiente OPENAI_EXPERIMENTAL_ENABLE_OPEN_TELEMETRY su true o 1o chiamare AppContext.SetSwitch("OpenAI.Experimental.EnableOpenTelemetry", true)) durante l'avvio dell'app.
L'origine di questo contenuto è disponibile in GitHub, in cui è anche possibile creare ed esaminare i problemi e le richieste pull. Per ulteriori informazioni, vedere la guida per i collaboratori.
Feedback su .NET Aspire
.NET Aspire è un progetto di open source. Selezionare un collegamento per fornire feedback:
Informazioni su come usare l'hosting e l'integrazione client di Ollama .NET.NET Aspire per ospitare modelli Ollama usando il contenitore Ollama e accedervi tramite il client OllamaSharp.
Scopri come usare l'hosting .NET.NET Aspire Meilisearch e l'integrazione del client per eseguire il contenitore Meilisearch e accedervi tramite il client Meilisearch.