Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo mostra come creare e utilizzare il modello di blocco di sicurezza Azure OpenAI. Lo scopo è illustrare il provisioning degli account Azure OpenAI con RBAC (controllo degli accessi basato sul ruolo) per l'autenticazione senza chiave tramite Microsoft Entra ID ad Azure OpenAI. Questo esempio di app chat include anche tutta l'infrastruttura e la configurazione necessarie per effettuare il provisioning delle risorse OpenAI Azure e distribuire l'app in App contenitore di Azure usando l'interfaccia della riga di comando per sviluppatori Azure.
Seguendo le istruzioni riportate in questo articolo, potrai:
- Distribuire un'app di chat sicura in App contenitore di Azure.
- Usare l'identità gestita per l'accesso a Azure OpenAI.
- Chattare con un Azure OpenAI Large Language Model (LLM) usando la libreria OpenAI.
Dopo aver completato questo articolo, è possibile iniziare a modificare il nuovo progetto con il codice e i dati personalizzati.
Nota
Questo articolo usa uno o più modelli di app di intelligenza artificiale come base per gli esempi e le linee guida nell’articolo. I modelli di app di intelligenza artificiale offrono implementazioni di riferimento ben gestite e facili da distribuire per garantire un punto di partenza di alta qualità per le app di intelligenza artificiale.
Panoramica dell'architettura
Un'architettura semplice dell'app di chat è illustrata nel diagramma seguente:
L'app di chat viene eseguita come Azure Container App. L'app usa l'identità gestita tramite Microsoft Entra ID per eseguire l'autenticazione con Azure OpenAI anziché con una chiave API. L'app di chat usa Azure OpenAI per generare risposte ai messaggi utente.
L'architettura dell'applicazione si basa sui servizi e sui componenti seguenti:
- Azure OpenAI rappresenta il provider di intelligenza artificiale a cui si inviano le query dell'utente.
- App contenitore di Azure è l'ambiente contenitore in cui è ospitata l'applicazione.
- L'identità gestita consente di garantire la sicurezza ottimale e di eliminare i requisiti per gli sviluppatori per gestire in modo sicuro un segreto.
- File Bicep per il provisioning di risorse Azure, inclusi Azure OpenAI, App contenitore di Azure, Registro Azure Container, Log Analytics di Azure e ruoli di controllo degli accessi in base al ruolo (RBAC).
- Un'app Python Quart che usa il pacchetto
openaie l'API Responses per generare risposte ai messaggi utente. - Front-end HTML/JavaScript di base che trasmette le risposte dal back-end usando righe JSON su un flusso leggibile.
- Un'app Web Blazor che utilizza il pacchetto NuGet Azure.AI.OpenAI per generare risposte ai messaggi degli utenti.
- Un'app Web TypeScript che usa il pacchetto npm OpenAI per generare risposte ai messaggi utente.
Costo
Nel tentativo di mantenere i prezzi il più basso possibile in questo esempio, la maggior parte delle risorse usa un piano tariffario di base o a consumo. Modifica il tuo livello in base al tuo utilizzo previsto. Per evitare di incorrere in costi, elimina le risorse al termine della lettura dell'articolo.
Altre informazioni sul costo nell'esempio di repository.
Altre informazioni sul costo nell'esempio di repository.
Altre informazioni sul costo nell'esempio di repository.
Prerequisiti
Per completare questo articolo è disponibile un ambiente contenitore di sviluppo con tutte le dipendenze necessarie. È possibile eseguire il contenitore di sviluppo in GitHub Codespaces (in un browser) o in locale usando Visual Studio Code.
Per usare questo articolo, è necessario soddisfare i prerequisiti seguenti:
Una sottoscrizione Azure - Crearne una gratuitamente
Azure autorizzazioni dell'account: l'account Azure deve avere autorizzazioni
Microsoft.Authorization/roleAssignments/write, ad esempio Amministratore accesso utente o Proprietario.account GitHub
Ambiente di sviluppo aperto
Usare le istruzioni seguenti per distribuire un ambiente di sviluppo preconfigurato contenente tutte le dipendenze necessarie per completare questo articolo.
GitHub Codespaces esegue un contenitore di sviluppo gestito da GitHub con Visual Studio Code per web come interfaccia utente. Per l'ambiente di sviluppo più semplice, usare GitHub Codespaces in modo che siano preinstallati gli strumenti di sviluppo e le dipendenze corretti per completare questo articolo.
Importante
Tutti gli account GitHub possono usare Codespaces per un massimo di 60 ore gratuite ogni mese con 2 istanze principali. Per ulteriori informazioni, consulta lo spazio di archiviazione mensile incluso e le ore core di GitHub Codespaces.
Usare la procedura seguente per creare un nuovo GitHub Codespace nel ramo main del repository Azure-Samples/openai-chat-app-quickstart GitHub.
Fare clic con il pulsante destro del mouse sul pulsante seguente e scegliere Apri collegamento in una nuova finestra. Questa azione consente di avere l'ambiente di sviluppo e la documentazione disponibile per la revisione.
Nella pagina Crea spazio codici esaminare e quindi selezionare Crea nuovo spazio di codice
Attendere l'avvio del codespace. Questo processo di avvio può richiedere alcuni minuti.
Accedi ad Azure con l'Azure Developer CLI nel terminale in basso nella schermata.
azd auth loginCopia il codice dal terminale e incollalo in un browser. Seguire le istruzioni per eseguire l'autenticazione con l'account Azure.
Le attività rimanenti in questo articolo vengono eseguite nel contesto di questo contenitore di sviluppo.
Usare la procedura seguente per creare un nuovo GitHub Codespace nel ramo main del repository Azure-Samples/openai-chat-app-quickstart-dotnet GitHub.
Fare clic con il pulsante destro del mouse sul pulsante seguente e scegliere Apri collegamento in una nuova finestra. Questa azione consente di avere l'ambiente di sviluppo e la documentazione disponibile per la revisione.
Nella pagina Crea spazio di codice, esaminare e quindi selezionare Crea spazio di codice
Attendere l'avvio del codespace. Questo processo di avvio può richiedere alcuni minuti.
Accedi ad Azure con l'Azure Developer CLI nel terminale in basso nella schermata.
azd auth loginCopia il codice dal terminale e incollalo in un browser. Seguire le istruzioni per eseguire l'autenticazione con l'account Azure.
Le attività rimanenti in questo articolo vengono eseguite nel contesto di questo contenitore di sviluppo.
Usare la procedura seguente per creare un nuovo GitHub Codespace nel ramo main del repository Azure-Samples/openai-chat-app-quickstart-javascript GitHub.
- Fare clic con il pulsante destro del mouse sul pulsante seguente e scegliere Apri collegamento in una nuova finestra. Questa azione consente di avere l'ambiente di sviluppo e la documentazione disponibile per la revisione.
Nella pagina Crea spazio codici esaminare e quindi selezionare Crea nuovo spazio di codice
Attendere l'avvio del codespace. Questo processo di avvio può richiedere alcuni minuti.
Accedi ad Azure con l'Azure Developer CLI nel terminale in basso nella schermata.
azd auth loginCopia il codice dal terminale e incollalo in un browser. Seguire le istruzioni per eseguire l'autenticazione con l'account Azure.
Le attività rimanenti in questo articolo vengono eseguite nel contesto di questo contenitore di sviluppo.
Distribuire ed eseguire
Il repository di esempio contiene tutto il codice e i file di configurazione per la distribuzione dell'app chat su Azure. La procedura seguente illustra il processo di distribuzione dell'app di chat di esempio su Azure.
Distribuire l'applicazione di chat su Azure
Importante
Le risorse di Azure create in questa sezione comportano dei costi immediati. Queste risorse possono accumulare costi anche se si interrompe il comando prima che venga eseguito completamente.
Esegui il seguente comando della CLI per sviluppatori di Azure per il provisioning delle risorse e la distribuzione del codice sorgente:
azd upUsare la tabella seguente per rispondere alle richieste:
Richiesta Risposta Nome ambiente Tienila breve e minuscola. Aggiungere il nome o l'alias. Ad esempio: secure-chat. Viene usato come parte del nome del gruppo di risorse.Abbonamento Selezionare la sottoscrizione in cui creare le risorse. Località (per l'hosting) Seleziona una località vicina dall'elenco. Posizione del modello OpenAI Seleziona una località vicina dall'elenco. Se la stessa posizione è disponibile come prima posizione, selezionala. Attendi la distribuzione dell'app. Il completamento della distribuzione richiede in genere tra 5 e 10 minuti.
Usare l'app chat per porre domande al modello linguistico di grandi dimensioni
Il terminale visualizza un URL dopo la corretta distribuzione dell'applicazione.
Seleziona l'URL etichettato
Deploying service webper aprire l'applicazione di chat in un browser.Nel browser immettere una domanda, ad esempio "Perché l'identità gestita è migliore delle chiavi?".
La risposta proviene da Azure OpenAI e il risultato viene visualizzato.
Esplorazione del codice di esempio
Mentre OpenAI e Servizio Azure OpenAI si basano su una libreria client Python comune, quando si usano gli endpoint di Azure OpenAI sono necessarie piccole modifiche al codice. Vediamo come questo esempio configura l'autenticazione senza chiave con Microsoft Entra ID e comunica con Azure OpenAI.
Configurare l'autenticazione con l'identità gestita
In questo esempio il src/quartapp/chat.py file inizia con la configurazione dell'autenticazione senza chiave.
Il frammento di codice seguente usa il modulo azure.identity.aio per creare un flusso di autenticazione asincrono Microsoft Entra.
Il frammento di codice seguente usa la AZURE_CLIENT_IDazd variabile di ambiente per creare un'istanza managedIdentityCredential in grado di eseguire l'autenticazione tramite l'identità gestita assegnata dall'utente.
user_assigned_managed_identity_credential = ManagedIdentityCredential(client_id=os.getenv("AZURE_CLIENT_ID"))
Nota
La configurazione delle azd variabili di ambiente delle risorse viene effettuata durante la azd distribuzione dell'applicazione.
Il frammento di codice seguente usa AZURE_TENANT_IDazd variabile di ambiente delle risorse per creare un'istanza di AzureDeveloperCliCredential in grado di eseguire l'autenticazione con il tenant Microsoft Entra corrente.
azure_dev_cli_credential = AzureDeveloperCliCredential(tenant_id=os.getenv("AZURE_TENANT_ID"), process_timeout=60)
La libreria client Azure Identity fornisce credenziali: classi pubbliche che implementano il protocollo TokenCredential della libreria Azure Core. Una credenziale rappresenta un flusso di autenticazione distinto per l'acquisizione di un token di accesso da Microsoft Entra ID. Queste credenziali si possono concatenare per formare una sequenza ordinata di meccanismi di autenticazione da tentare.
Il frammento di codice seguente crea un ChainedTokenCredential utilizzando un ManagedIdentityCredential e un AzureDeveloperCliCredential:
- Il
ManagedIdentityCredentialviene usato per Funzioni di Azure, Servizio app di Azure e App contenitore di Azure. Un'identità gestita assegnata dall'utente è supportata passandoclient_idaManagedIdentityCredential. -
AzureDeveloperCliCredentialviene utilizzato per lo sviluppo locale. È stato impostato in precedenza in base al tenant di Microsoft Entra da utilizzare.
azure_credential = ChainedTokenCredential(
user_assigned_managed_identity_credential,
azure_dev_cli_credential
)
Suggerimento
L'ordine delle credenziali è importante, perché viene usato il primo token di accesso valido Microsoft Entra. Per ulteriori informazioni, vedere l'articolo Panoramica di ChainedTokenCredential.
Il frammento di codice seguente ottiene il provider di token OpenAI di Azure in base alla credenziale Azure selezionata. Questo valore viene ottenuto chiamando il azure.identity.aio.get_bearer_token_provider con due argomenti:
azure_credentialChainedTokenCredential: istanza creata in precedenza per autenticare la richiesta.https://cognitiveservices.azure.com/.default: obbligatorio uno o più ambiti del token portatore. In questo caso, l'endpoint Azure Cognitive Services.
token_provider = get_bearer_token_provider(
azure_credential, "https://cognitiveservices.azure.com/.default"
)
Le righe seguenti controllano la presenza delle variabili di ambiente necessarie AZURE_OPENAI_ENDPOINT e AZURE_OPENAI_CHAT_DEPLOYMENT, le quali sono impostate durante il provisioning di azdazd. Se un valore non è presente, viene generato un errore.
openai_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT")
if not openai_endpoint:
raise ValueError("AZURE_OPENAI_ENDPOINT is required for Azure OpenAI")
if not os.getenv("AZURE_OPENAI_CHAT_DEPLOYMENT"):
raise ValueError("AZURE_OPENAI_CHAT_DEPLOYMENT is required for Azure OpenAI")
Questo frammento di codice inizializza il client OpenAI rispetto all'endpoint /openai/v1/ di Azure, passando il provider di token come api_key. Non api_version è necessario con l'endpoint v1:
bp.openai_client = AsyncOpenAI(
base_url=f"{openai_endpoint.rstrip('/')}/openai/v1/",
api_key=token_provider,
)
La riga seguente imposta il nome di distribuzione del modello OpenAI Azure da usare nelle chiamate API:
bp.openai_model = os.getenv("AZURE_OPENAI_CHAT_DEPLOYMENT")
Nota
OpenAI usa l'argomento della parola chiave model per specificare il modello da usare. Azure OpenAI ha il concetto di distribuzioni di modelli uniche. Quando si usa Azure OpenAI, model deve fare riferimento al nome della distribuzione sottostante scelto durante la distribuzione del modello OpenAI in Azure.
Al termine di questa funzione, il client è configurato correttamente e pronto per interagire con Azure servizi OpenAI.
Trasmettere risposte usando l'API Risposte OpenAI
response_stream gestisce nella route la chiamata di streaming dell'API Responses. Il frontend invia direttamente gli elementi a forma di risposte input e il backend li inoltra a responses.stream():
async def response_stream():
try:
async with bp.openai_client.responses.stream(
model=bp.openai_model,
input=request_input,
store=False,
) as openai_stream:
async for event in openai_stream:
yield json.dumps(event.model_dump(), ensure_ascii=False) + "\n"
except Exception as e:
current_app.logger.exception("Responses stream failed")
yield json.dumps({"error": str(e)}, ensure_ascii=False) + "\n"
Esplorare il codice di esempio
Le applicazioni .NET fanno affidamento sulla libreria client Azure.AI.OpenAI per comunicare con i servizi Azure OpenAI, che dipende dalla libreria OpenAI. L'app di esempio configura l'autenticazione senza chiave usando Microsoft Entra ID per comunicare con Azure OpenAI.
Configurare l'autenticazione e la registrazione del servizio
In questo esempio l'autenticazione senza chiave viene configurata nel program.cs file . Il frammento di codice seguente usa la AZURE_CLIENT_ID variabile di ambiente impostata da azd per creare un'istanza managedIdentityCredential in grado di eseguire l'autenticazione tramite l'identità gestita assegnata dall'utente.
var userAssignedIdentityCredential =
new ManagedIdentityCredential(builder.Configuration.GetValue<string>("AZURE_CLIENT_ID"));
Nota
La configurazione delle azd variabili di ambiente delle risorse viene effettuata durante la azd distribuzione dell'applicazione.
Il frammento di codice seguente usa la AZURE_TENANT_ID variabile di ambiente impostata da azd per creare un'istanza di AzureDeveloperCliCredential in grado di autenticarsi localmente usando l'account connesso a azd.
var azureDevCliCredential = new AzureDeveloperCliCredential(
new AzureDeveloperCliCredentialOptions()
{
TenantId = builder.Configuration.GetValue<string>("AZURE_TENANT_ID")
});
La libreria client Azure Identity fornisce classi di credenziali che implementano il protocollo TokenCredential della libreria Azure Core. Una credenziale rappresenta un flusso di autenticazione distinto per l'acquisizione di un token di accesso da Microsoft Entra ID. Queste credenziali possono essere concatenate usando ChainedTokenCredential per formare una sequenza ordinata di meccanismi di autenticazione da tentare.
Il frammento di codice seguente registra AzureOpenAIClient per l'iniezione delle dipendenze e crea un nuovo ChainedTokenCredential usando un ManagedIdentityCredential e un AzureDeveloperCliCredential:
- Il
ManagedIdentityCredentialviene usato per Funzioni di Azure, Servizio app di Azure e App contenitore di Azure. Un'identità gestita assegnata dall'utente è supportata utilizzando ilAZURE_CLIENT_IDfornito aManagedIdentityCredential. -
AzureDeveloperCliCredentialviene utilizzato per lo sviluppo locale. È stato configurato in precedenza per il tenant di Microsoft Entra da utilizzare.
builder.Services.AddAzureClients(
clientBuilder => {
clientBuilder.AddClient<AzureOpenAIClient, AzureOpenAIClientOptions>((options, _, _)
=> new AzureOpenAIClient(
new Uri(endpoint),
new ChainedTokenCredential(
userAssignedIdentityCredential, azureDevCliCredential), options));
});
Suggerimento
L'ordine delle credenziali è importante, perché viene usato il primo token di accesso valido Microsoft Entra. Per ulteriori informazioni, vedere l'articolo Panoramica di ChainedTokenCredential.
Ottenere i completamenti della chat usando il client OpenAI Azure
L'app Web Blazor inserisce l'oggetto registrato AzureOpenAIClient nella parte superiore del componente Home.Razor.
@inject AzureOpenAIClient azureOpenAIClient
Quando l'utente invia il modulo, invia AzureOpenAIClient la richiesta al modello OpenAI di generare un completamento:
ChatClient chatClient = azureOpenAIClient.GetChatClient("gpt-4o-mini");
messages.Add(new UserChatMessage(model.UserMessage));
ChatCompletion completion = await chatClient.CompleteChatAsync(messages);
messages.Add(new SystemChatMessage(completion.Content[0].Text));
Esplorare il codice di esempio
Mentre OpenAI e Servizio Azure OpenAI si basano su un openai (libreria client JavaScript comune), quando si usano gli endpoint OpenAI Azure sono necessarie piccole modifiche al codice. Vediamo come questo esempio configura l'autenticazione senza chiave con Microsoft Entra ID e comunica con Azure OpenAI.
Autenticazione senza chiave per ogni ambiente
La libreria client Azure Identity fornisce classi di credenziali che implementano il protocollo TokenCredential della libreria Azure Core. Una credenziale rappresenta un flusso di autenticazione distinto per l'acquisizione di un token di accesso da Microsoft Entra ID. Queste credenziali possono essere concatenate usando chainedTokenCredential per formare una sequenza ordinata di meccanismi di autenticazione da tentare. In questo modo è possibile distribuire lo stesso codice sia in ambienti di produzione che in ambienti di sviluppo locali.
Configurare l'autenticazione con l'identità gestita
In questo esempio, il ./src/azure-authentication.ts fornisce diverse funzioni per fornire l'autenticazione senza chiave per Azure OpenAI.
La prima funzione, getChainedCredential(), restituisce la prima credenziale valida Azure trovata nella catena.
function getChainedCredential() {
return new ChainedTokenCredential(
new ManagedIdentityCredential(process.env.AZURE_CLIENT_ID!),
new AzureDeveloperCliCredential({
tenantId: process.env.AZURE_TENANT_ID! ? process.env.AZURE_TENANT_ID! : undefined
})
);
}
- ManagedIdentityCredential viene tentato per primo. Viene configurato con la variabile di ambiente AZURE_CLIENT_ID nel runtime di produzione ed è in grado di eseguire l'autenticazione tramite l'identità gestita assegnata dall'utente.
-
Il tentativo di AzureDeveloperCliCredential è il secondo. Viene configurato quando uno sviluppatore accede con l'interfaccia della riga di comando di Azure Developer usando
azd auth login.
Suggerimento
L'ordine delle credenziali è importante, perché viene usato il primo token di accesso valido Microsoft Entra. Per ulteriori informazioni, vedere l'articolo Panoramica di ChainedTokenCredential.
Ottenere il token Bearer per OpenAI
La seconda funzione in ./src/azure-authentication.ts è getTokenProvider(), che restituisce un callback che fornisce un token di connessione per l'endpoint Azure Cognitive Services.
function getTokenProvider(): () => Promise<string> {
const credential = getChainedCredential();
const scope = "https://cognitiveservices.azure.com/.default";
return getBearerTokenProvider(credential, scope);
}
Il frammento di codice precedente utilizza getBearerTokenProvider per ottenere le credenziali e l'ambito, quindi restituisce un callback che fornisce un bearer token.
Creare un client OpenAI di Azure autenticato
La terza funzione in ./src/azure-authentication.ts è getOpenAiClient(), che restituisce il client OpenAI Azure.
export function getOpenAiClient(): AzureOpenAI | undefined{
try {
if (!process.env.AZURE_OPENAI_ENDPOINT) {
throw new Error("AZURE_OPENAI_ENDPOINT is required for Azure OpenAI");
}
if (!process.env.AZURE_OPENAI_CHAT_DEPLOYMENT) {
throw new Error("AZURE_OPENAI_CHAT_DEPLOYMENT is required for Azure OpenAI");
}
const options = {
azureADTokenProvider: getTokenProvider(),
deployment: process.env.AZURE_OPENAI_CHAT_DEPLOYMENT!,
apiVersion: process.env.AZURE_OPENAI_API_VERSION! || "2024-02-15-preview",
endpoint: process.env.AZURE_OPENAI_ENDPOINT!
}
// Create the Asynchronous Azure OpenAI client
return new AzureOpenAI (options);
} catch (error) {
console.error('Error getting Azure OpenAI client: ', error);
}
}
Questo codice accetta le opzioni, incluso il token con ambito corretto, e crea il AzureOpenAI client
Rispondere alla chat in streaming con Azure OpenAI
Usare il gestore di route Fastify seguente in ./src/openai-chat-api.ts per inviare un messaggio a Azure OpenAI e trasmettere la risposta.
import { FastifyReply, FastifyRequest } from 'fastify';
import { AzureOpenAI } from "openai";
import { getOpenAiClient } from './azure-authentication.js';
import { ChatCompletionChunk, ChatCompletionMessageParam } from 'openai/resources/chat/completions';
interface ChatRequestBody {
messages: ChatCompletionMessageParam [];
}
export async function chatRoute (request: FastifyRequest<{ Body: ChatRequestBody }>, reply: FastifyReply) {
const requestMessages: ChatCompletionMessageParam[] = request?.body?.messages;
const openaiClient: AzureOpenAI | undefined = getOpenAiClient();
if (!openaiClient) {
throw new Error("Azure OpenAI client is not configured");
}
const allMessages = [
{ role: "system", content: "You are a helpful assistant."},
...requestMessages
] as ChatCompletionMessageParam [];
const chatCompletionChunks = await openaiClient.chat.completions.create({
// Azure Open AI takes the deployment name as the model name
model: process.env.AZURE_OPENAI_CHAT_DEPLOYMENT_MODEL || "gpt-4o-mini",
messages: allMessages,
stream: true
})
reply.raw.setHeader('Content-Type', 'text/html; charset=utf-8');
reply.raw.setHeader('Cache-Control', 'no-cache');
reply.raw.setHeader('Connection', 'keep-alive');
reply.raw.flushHeaders();
for await (const chunk of chatCompletionChunks as AsyncIterable<ChatCompletionChunk>) {
for (const choice of chunk.choices) {
reply.raw.write(JSON.stringify(choice) + "\n")
}
}
reply.raw.end()
}
La funzione ottiene la conversazione di chat, inclusi i messaggi precedenti e li invia a Azure OpenAI. Man mano che i blocchi di flusso vengono restituiti da Azure OpenAI, vengono inviati al client.
Altre considerazioni sulla sicurezza
Questo articolo illustra come l'esempio usa ChainedTokenCredential per l'autenticazione nel servizio OpenAI Azure.
L'esempio include anche un GitHub Action che analizza i file di infrastruttura come codice e genera un report contenente eventuali problemi rilevati. Per garantire l'adozione continua delle migliori pratiche nel proprio repository, consigliamo a chiunque crei soluzioni basate sui nostri modelli di verificare che l'impostazione di scansione dei segreti GitHub sia attivata.
Prendere in considerazione altre misure di sicurezza, ad esempio:
Limita l'accesso al set appropriato di utenti dell'app utilizzando Microsoft Entra.
Protezione dell'istanza di App contenitore di Azure con un firewall e/o Rete virtuale.
Pulire le risorse
Pulire le risorse Azure
Le risorse di Azure create in questo articolo vengono fatturate al tuo abbonamento Azure. Se prevedi che queste risorse non ti servano in futuro, eliminale per evitare di incorrere in costi aggiuntivi.
Per eliminare le risorse Azure e rimuovere il codice sorgente, eseguire il comando della Azure Developer CLI seguente:
azd down --purge
Riordinare GitHub Codespaces
L'eliminazione dell'ambiente GitHub Codespaces garantisce che sia possibile massimizzare la quantità di ore gratuite per core che si ottiene per l'account.
Importante
Per ulteriori informazioni sui diritti del tuo account GitHub, consulta Archiviazione mensile inclusa e ore core di GitHub Codespaces.
Accedere al dashboard GitHub Codespaces.
Trova i tuoi Codespaces attualmente in esecuzione originati dal repository
Azure-Samples/openai-chat-app-quickstartGitHub.Aprire il menu di scelta rapida per il codespace e selezionare Elimina.
Accedere al dashboard GitHub Codespaces.
Trova i tuoi Codespaces attualmente in esecuzione originati dal repository
Azure-Samples/openai-chat-app-quickstart-dotnetGitHub.Aprire il menu di scelta rapida per il codespace e selezionare Elimina.
Accedere al dashboard GitHub Codespaces.
Trova i tuoi Codespaces attualmente in esecuzione originati dal repository
Azure-Samples/openai-chat-app-quickstart-javascriptGitHub.Aprire il menu di scelta rapida per il codespace e selezionare Elimina.
Come ottenere assistenza
Se il problema non viene risolto, registrare il problema nel Issues del repository.
Passaggi successivi
Se il problema non viene risolto, registrare il problema nel Issues del repository.
Se il problema non viene risolto, registrare il problema nel Issues del repository.