Bien démarrer avec le bloc de construction de sécurité Azure OpenAI
Cet article vous montre comment créer et utiliser l’exemple de bloc de construction de sécurité Azure OpenAI. L’objectif est de démontrer l’approvisionnement de comptes Azure OpenAI avec le contrôle d’accès en fonction du rôle (RBAC) pour l’authentification sans clé (Microsoft Entra ID) auprès d’Azure OpenAI. Cet exemple d’application de conversation inclut également toute l’infrastructure et la configuration nécessaires pour approvisionner des ressources Azure OpenAI et déployer l’application sur Azure Container Apps à l’aide de l’interface DE ligne de commande du développeur Azure.
En suivant les instructions de cet article, vous allez :
- Déployez une application de conversation de conteneur Azure sécurisée.
- Utilisez l’identité managée pour l’accès Azure OpenAI.
- Discutez avec un modèle de langage large Azure OpenAI (LLM) à l’aide de la bibliothèque OpenAI.
Une fois que vous avez terminé cet article, vous pouvez commencer à modifier le nouveau projet avec votre code et vos données personnalisés.
Remarque
Cet article utilise un ou plusieurs modèles d’application IA comme base pour les exemples et les conseils qu’il contient. Les modèles d’application IA vous fournissent des implémentations de référence bien gérées et faciles à déployer, qui constituent un point de départ de qualité pour vos applications IA.
Vue d’ensemble de l’architecture
Une architecture simple de l’application de conversation est illustrée dans le diagramme suivant :
L’application de conversation s’exécute en tant qu’application conteneur Azure. L’application utilise une identité managée via l’ID Microsoft Entra pour s’authentifier auprès d’Azure OpenAI, au lieu d’une clé API. L’application de conversation utilise Azure OpenAI pour générer des réponses aux messages utilisateur.
L’architecture d’application s’appuie sur les services et composants suivants :
- Azure OpenAI représente le fournisseur d'IA auquel nous envoyons les requêtes de l'utilisateur.
- Azure Container Apps est l'environnement de conteneurs dans lequel l'application est hébergée.
- Managed Identity nous aide à garantir une sécurité optimale et élimine la nécessité pour vous en tant que développeur de gérer en toute sécurité un secret.
- Fichiers Bicep pour l’approvisionnement de ressources Azure, notamment Azure OpenAI, Azure Container Apps, Azure Container Registry, Azure Log Analytics et rôles RBAC.
- Microsoft AI Chat Protocol fournit des contrats d’API standardisés pour les solutions et les langages d’IA. L’application de chat est conforme au Microsoft AI Chat Protocol, ce qui permet à l’application d’évaluation de fonctionner avec toute application de chat conforme au protocole.
- Quart Python qui utilise le
openai
package pour générer des réponses aux messages utilisateur. - Frontend HTML/JavaScript de base qui diffuse des réponses du back-end à l’aide de lignes JSON sur un readableStream.
- Application web Blazor qui utilise le package NuGet Azure.AI.OpenAI pour générer des réponses aux messages utilisateur.
- Application web TypeScript qui utilise le package openai npm pour générer des réponses aux messages utilisateur.
Cost
Dans une tentative de maintenir la tarification aussi faible que possible dans cet exemple, la plupart des ressources utilisent un niveau tarifaire de base ou de consommation. Modifiez votre niveau selon vos besoins en fonction de votre utilisation prévue. Pour arrêter les frais, supprimez les ressources lorsque vous avez terminé avec l’article.
En savoir plus sur les coûts dans l’exemple de dépôt.
En savoir plus sur les coûts dans l’exemple de dépôt.
En savoir plus sur les coûts dans l’exemple de dépôt.
Prérequis
Un environnement de conteneur de développement est disponible avec toutes les dépendances requises pour terminer cet article. Vous pouvez exécuter le conteneur de développement dans GitHub Codespaces (dans un navigateur) ou localement à l’aide de Visual Studio Code.
Pour utiliser cet article, vous devez remplir les conditions préalables suivantes :
Un abonnement Azure - En créer un gratuitement
Autorisations de compte Azure : votre compte Azure doit disposer
Microsoft.Authorization/roleAssignments/write
d’autorisations, telles que l’administrateur de l’accès utilisateur ou le propriétaire.GitHub
Environnement de développement ouvert
Utilisez les instructions suivantes pour déployer un environnement de développement préconfiguré contenant toutes les dépendances requises pour terminer cet article.
GitHub Codespaces exécute un conteneur de développement géré par GitHub avec Visual Studio Code pour le web comme interface utilisateur. Pour un environnement de développement le plus simple, utilisez GitHub Codespaces pour disposer des outils de développement et des dépendances appropriés préinstallés pour terminer cet article.
Important
Tous les comptes GitHub peuvent utiliser codespaces pendant jusqu’à 60 heures gratuites chaque mois avec 2 instances principales. Pour plus d’informations, consultez Le stockage mensuel inclus et les heures de cœur GitHub Codespaces.
Procédez comme suit pour créer un espace de code GitHub sur la main
branche du Azure-Samples/openai-chat-app-quickstart
dépôt GitHub.
Cliquez avec le bouton droit sur le bouton suivant, puis sélectionnez Ouvrir le lien dans la nouvelle fenêtre. Cette action vous permet d’avoir l’environnement de développement et la documentation disponible pour révision.
Dans la page Créer un espace de code, passez en revue, puis sélectionnez Créer un espace de code
Attendez que le codespace démarre. Ce processus de démarrage peut prendre quelques minutes.
Connectez-vous à Azure avec Azure Developer CLI dans le terminal en bas de l’écran.
azd auth login
Copiez le code à partir du terminal, puis collez-le dans un navigateur. Suivez les instructions pour vous authentifier avec votre compte Azure.
Les tâches restantes de cet article s’effectuent dans ce conteneur de développement.
Procédez comme suit pour créer un espace de code GitHub sur la main
branche du Azure-Samples/openai-chat-app-quickstart-dotnet
dépôt GitHub.
Cliquez avec le bouton droit sur le bouton suivant, puis sélectionnez Ouvrir le lien dans la nouvelle fenêtre. Cette action vous permet d’avoir l’environnement de développement et la documentation disponible pour révision.
Dans la page Créer un espace de code, passez en revue, puis sélectionnez Créer un espace de code
Attendez que le codespace démarre. Ce processus de démarrage peut prendre quelques minutes.
Connectez-vous à Azure avec Azure Developer CLI dans le terminal en bas de l’écran.
azd auth login
Copiez le code à partir du terminal, puis collez-le dans un navigateur. Suivez les instructions pour vous authentifier avec votre compte Azure.
Les tâches restantes de cet article s’effectuent dans ce conteneur de développement.
Procédez comme suit pour créer un espace de code GitHub sur la main
branche du Azure-Samples/openai-chat-app-quickstart-javascript
dépôt GitHub.
- Cliquez avec le bouton droit sur le bouton suivant, puis sélectionnez Ouvrir le lien dans la nouvelle fenêtre. Cette action vous permet d’avoir l’environnement de développement et la documentation disponible pour révision.
Dans la page Créer un espace de code, passez en revue, puis sélectionnez Créer un espace de code
Attendez que le codespace démarre. Ce processus de démarrage peut prendre quelques minutes.
Connectez-vous à Azure avec Azure Developer CLI dans le terminal en bas de l’écran.
azd auth login
Copiez le code à partir du terminal, puis collez-le dans un navigateur. Suivez les instructions pour vous authentifier avec votre compte Azure.
Les tâches restantes de cet article s’effectuent dans ce conteneur de développement.
Déployer et exécuter
L’exemple de référentiel contient tous les fichiers de code et de configuration pour le déploiement Azure de l’application de conversation. Les étapes suivantes vous guident dans l’exemple de processus de déploiement Azure de l’application de conversation.
Déployer une application de conversation sur Azure
Important
Les ressources Azure créées dans cette section entraînent des coûts immédiats. Ces ressources peuvent entraîner des coûts même si vous interrompez la commande avant la fin de exécution.
Exécutez la commande AZURE Developer CLI suivante pour le provisionnement de ressources Azure et le déploiement de code source :
azd up
Utilisez le tableau suivant pour répondre aux invites :
Prompt Réponse Nom de l’environnement Gardez-le court et en minuscules. Ajoutez votre nom ou votre pseudo. Par exemple : secure-chat
. Il est utilisé comme partie du nom du groupe de ressources.Abonnement Sélectionnez l’abonnement pour créer les ressources. Emplacement (pour l’hébergement) Sélectionnez un emplacement près de chez vous dans la liste. Emplacement pour le modèle OpenAI Sélectionnez un emplacement près de chez vous dans la liste. Si le premier emplacement choisi est également disponible, sélectionnez-le. Attendez que l’application soit déployée. Le déploiement prend généralement entre 5 et 10 minutes.
Utiliser l’application de conversation pour poser des questions au modèle de langage volumineux
Le terminal affiche une URL après le déploiement réussi de l’application.
Sélectionnez cette URL étiquetée
Deploying service web
pour ouvrir l’application de conversation dans un navigateur.Dans le navigateur, entrez une question telle que « Pourquoi l’identité managée est-elle mieux que les clés ? ».
La réponse provient d’Azure OpenAI et le résultat s’affiche.
Exploration de l’exemple de code
Bien qu’OpenAI et Azure OpenAI Service s’appuient sur une bibliothèque de client Python commune, de petites modifications de code sont nécessaires lors de l’utilisation de points de terminaison Azure OpenAI. Voyons comment cet exemple configure l’authentification sans clé avec l’ID Microsoft Entra et communique avec Azure OpenAI.
Configurer l’authentification avec une identité managée
Dans cet exemple, le fichier commence par la configuration de l’authentification src\quartapp\chat.py
sans clé.
L’extrait de code suivant utilise le module azure.identity.aio pour créer un flux d’authentification Microsoft Entra asynchrone.
L’extrait de code suivant utilise la AZURE_CLIENT_ID
azd
variable d’environnement pour créer une instance ManagedIdentityCredential capable de s’authentifier via une identité managée affectée par l’utilisateur.
user_assigned_managed_identity_credential = ManagedIdentityCredential(client_id=os.getenv("AZURE_CLIENT_ID"))
Remarque
Les azd
variables d’environnement de ressources sont approvisionnées pendant le azd
déploiement de l’application.
L’extrait de code suivant utilise AZURE_TENANT_ID
azd
la variable d’environnement de ressource pour créer une instance AzureDeveloperCliCredential capable d’être authentifiée avec le locataire Microsoft Entra actuel.
azure_dev_cli_credential = AzureDeveloperCliCredential(tenant_id=os.getenv("AZURE_TENANT_ID"), process_timeout=60)
La bibliothèque cliente Azure Identity fournit des informations d’identification : des classes publiques qui implémentent le protocole TokenCredential de la bibliothèque Azure Core. Les informations d’identification représentent un flux d’authentification distinct pour l’acquisition d’un jeton d’accès à partir de l’ID Microsoft Entra. Ces informations d’identification peuvent être chaînées pour former une séquence ordonnée de mécanismes d’authentification à essayer.
L’extrait de code suivant crée un ChainedTokenCredential
code à l’aide d’un et d’un ManagedIdentityCredential
AzureDeveloperCliCredential
:
- Il
ManagedIdentityCredential
est utilisé pour Azure Functions et Azure App Service. Une identité managée affectée par l’utilisateur est prise en charge par le passage àclient_id
ManagedIdentityCredential
. - Il
AzureDeveloperCliCredential
est utilisé pour le développement local. Il a été défini précédemment en fonction du locataire Microsoft Entra à utiliser.
azure_credential = ChainedTokenCredential(
user_assigned_managed_identity_credential,
azure_dev_cli_credential
)
Conseil
L’ordre des informations d’identification est important, car le premier jeton d’accès Microsoft Entra valide est utilisé. Pour plus d’informations, consultez l’article ChainedTokenCredential Overview .
L’extrait de code suivant obtient le fournisseur de jetons Azure OpenAI en fonction des informations d’identification Azure sélectionnées. Cette valeur est obtenue en appelant le azure.identity.aio.get_bearer_token_provider avec deux arguments :
azure_credential
: instanceChainedTokenCredential
créée précédemment pour authentifier la requête.https://cognitiveservices.azure.com/.default
: étendues de jeton du porteur requises. Dans ce cas, le point de terminaison Azure Cognitive Services .
token_provider = get_bearer_token_provider(
azure_credential, "https://cognitiveservices.azure.com/.default"
)
Les lignes suivantes vérifient les variables d’environnement requises AZURE_OPENAI_ENDPOINT
et AZURE_OPENAI_CHATGPT_DEPLOYMENT
azd
d’environnement de ressources, qui sont provisionnées pendant azd
le déploiement de l’application. Une erreur est levée si une valeur n’est pas présente.
if not os.getenv("AZURE_OPENAI_ENDPOINT"):
raise ValueError("AZURE_OPENAI_ENDPOINT is required for Azure OpenAI")
if not os.getenv("AZURE_OPENAI_CHATGPT_DEPLOYMENT"):
raise ValueError("AZURE_OPENAI_CHATGPT_DEPLOYMENT is required for Azure OpenAI")
Cet extrait de code initialise le client Azure OpenAI, en définissant les api_version
paramètres , azure_endpoint
et azure_ad_token_provider
(client_args
) :
bp.openai_client = AsyncAzureOpenAI(
api_version=os.getenv("AZURE_OPENAI_API_VERSION") or "2024-02-15-preview",
azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT"),
azure_ad_token_provider=token_provider,
)
La ligne suivante définit le nom de déploiement du modèle Azure OpenAI à utiliser dans les appels d’API :
bp.openai_model = os.getenv("AZURE_OPENAI_CHATGPT_DEPLOYMENT")
Remarque
OpenAI utilise l’argument de mot clé model
pour spécifier le modèle à utiliser. Azure OpenAI établit le concept de déploiements de modèles uniques. Lorsque vous utilisez Azure OpenAI, model
reportez-vous au nom de déploiement sous-jacent choisi lors du déploiement du modèle Azure OpenAI.
Une fois cette fonction terminée, le client est correctement configuré et prêt à interagir avec les services Azure OpenAI.
Flux de réponse à l’aide du client et du modèle OpenAI
Gère response_stream
l’appel de saisie semi-automatique de conversation dans l’itinéraire. L’extrait de code suivant montre comment openai_client
et model
sont utilisés.
async def response_stream():
# This sends all messages, so API request may exceed token limits
all_messages = [
{"role": "system", "content": "You are a helpful assistant."},
] + request_messages
chat_coroutine = bp.openai_client.chat.completions.create(
# Azure Open AI takes the deployment name as the model name
model=bp.openai_model,
messages=all_messages,
stream=True,
)
Explorer l’exemple de code
Les applications .NET s’appuient sur la bibliothèque cliente Azure.AI.OpenAI pour communiquer avec les services Azure OpenAI , ce qui dépend de la bibliothèque OpenAI . L’exemple d’application configure l’authentification sans clé à l’aide de l’ID Microsoft Entra pour communiquer avec Azure OpenAI.
Configurer l’authentification et l’inscription de service
Dans cet exemple, l’authentification sans clé est configurée dans le program.cs
fichier. L’extrait de code suivant utilise la AZURE_CLIENT_ID
variable d’environnement définie pour azd
créer une instance ManagedIdentityCredential capable d’s’authentifier via une identité managée affectée par l’utilisateur.
var userAssignedIdentityCredential =
new ManagedIdentityCredential(builder.Configuration.GetValue<string>("AZURE_CLIENT_ID"));
Remarque
Les azd
variables d’environnement de ressources sont approvisionnées pendant le azd
déploiement de l’application.
L’extrait de code suivant utilise la AZURE_TENANT_ID
variable d’environnement définie par azd
pour créer une instance AzureDeveloperCliCredential capable d’s’authentifier localement à l’aide du compte connecté à azd
.
var azureDevCliCredential = new AzureDeveloperCliCredential(
new AzureDeveloperCliCredentialOptions()
{
TenantId = builder.Configuration.GetValue<string>("AZURE_TENANT_ID")
});
La bibliothèque cliente Azure Identity fournit des classes d’informations d’identification qui implémentent le protocole TokenCredential de la bibliothèque Azure Core. Les informations d’identification représentent un flux d’authentification distinct pour l’acquisition d’un jeton d’accès à partir de l’ID Microsoft Entra. Ces informations d’identification peuvent être chaînées à l’aide ChainedTokenCredential
d’une séquence ordonnée de mécanismes d’authentification à essayer.
L’extrait de code suivant inscrit l’injection de dépendances et crée un code à l’aide AzureOpenAIClient
d’un et d’un ManagedIdentityCredential
AzureDeveloperCliCredential
:ChainedTokenCredential
- Il
ManagedIdentityCredential
est utilisé pour Azure Functions et Azure App Service. Une identité managée affectée par l’utilisateur est prise en charge à l’aide de celleAZURE_CLIENT_ID
ManagedIdentityCredential
qui a été fournie au . - Il
AzureDeveloperCliCredential
est utilisé pour le développement local. Il a été défini précédemment en fonction du locataire Microsoft Entra à utiliser.
builder.Services.AddAzureClients(
clientBuilder => {
clientBuilder.AddClient<AzureOpenAIClient, AzureOpenAIClientOptions>((options, _, _)
=> new AzureOpenAIClient(
new Uri(endpoint),
new ChainedTokenCredential(
userAssignedIdentityCredential, azureDevCliCredential), options));
});
Conseil
L’ordre des informations d’identification est important, car le premier jeton d’accès Microsoft Entra valide est utilisé. Pour plus d’informations, consultez l’article ChainedTokenCredential Overview .
Obtenir des achèvements de conversation à l’aide du client Azure OpenAI
L’application web Blazor injecte l’inscription AzureOpenAIClient
en haut du Home.Razor
composant :
@inject AzureOpenAIClient azureOpenAIClient
Lorsque l’utilisateur envoie le formulaire, il AzureOpenAIClient
envoie son invite au modèle OpenAI pour générer une saisie semi-automatique :
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));
Explorer l’exemple de code
Bien que OpenAI et Azure OpenAI Service s’appuient sur un openai (bibliothèque de client JavaScript commune), de petites modifications de code sont nécessaires lors de l’utilisation de points de terminaison Azure OpenAI. Voyons comment cet exemple configure l’authentification sans clé avec l’ID Microsoft Entra et communique avec Azure OpenAI.
Authentification sans clé pour chaque environnement
La bibliothèque cliente Azure Identity fournit des classes d’informations d’identification qui implémentent le protocole TokenCredential de la bibliothèque Azure Core. Les informations d’identification représentent un flux d’authentification distinct pour l’acquisition d’un jeton d’accès à partir de l’ID Microsoft Entra. Ces informations d’identification peuvent être chaînées à l’aide ChainedTokenCredential
d’une séquence ordonnée de mécanismes d’authentification à essayer. Cela vous permet de déployer le même code dans les environnements de production et de développement local.
Configurer l’authentification avec une identité managée
Dans cet exemple, plusieurs ./src/azure-authentication.ts
fonctions permettent de fournir une authentification sans clé à Azure OpenAI.
La première fonction, retourne getChainedCredential()
les premières informations d’identification Azure valides trouvées dans la chaîne.
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 est tenté en premier. Il est configuré avec la variable d’environnement AZURE_CLIENT_ID dans le runtime de production et peut s’authentifier via l’identité managée affectée par l’utilisateur.
- AzureDeveloperCliCredential est tenté deuxième. Il est configuré lorsqu’un développement se connecte avec Azure CLI
az login
.
Conseil
L’ordre des informations d’identification est important, car le premier jeton d’accès Microsoft Entra valide est utilisé. Pour plus d’informations, consultez l’article ChainedTokenCredential Overview .
Obtenir le jeton du porteur pour OpenAI
La deuxième fonction est ./src/azure-authentication.ts
getTokenProvider()
, qui retourne un rappel qui fournit un jeton du porteur délimité au point de terminaison Azure Cognitive Services .
function getTokenProvider(): () => Promise<string> {
const credential = getChainedCredential();
const scope = "https://cognitiveservices.azure.com/.default";
return getBearerTokenProvider(credential, scope);
}
L’extrait de code précédent utilise getBearerTokenProvider
pour prendre les informations d’identification et l’étendue, puis retourne un rappel qui fournit un jeton du porteur.
Créer un client Azure OpenAI authentifié
La troisième fonction est ./src/azure-authentication.ts
getOpenAiClient()
, qui retourne le client Azure OpenAI.
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);
}
}
Ce code prend les options, y compris le jeton correctement délimité, et crée le AzureOpenAI
client
Diffuser en continu une réponse de conversation avec Azure OpenAI
Utilisez le gestionnaire de routage Fastify suivant pour ./src/openai-chat-api.ts
envoyer un message à Azure OpenAI et diffuser en continu la réponse.
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 fonction obtient la conversation de conversation, y compris les messages précédents, et les envoie à Azure OpenAI. À mesure que les blocs de flux sont retournés à partir d’Azure OpenAI, ils sont envoyés au client.
Autres considérations relatives à la sécurité
Cet article montre comment l’exemple utilise ChainedTokenCreadential
pour l’authentification auprès du service Azure OpenAI.
L’exemple comporte également une action GitHub qui analyse les fichiers infrastructure-as-code et génère un rapport contenant tous les problèmes détectés. Pour garantir la poursuite des meilleures pratiques dans votre propre référentiel, nous vous recommandons que toute personne créant des solutions basées sur nos modèles vérifie que le paramètre d’analyse des secrets GitHub est activé.
Envisagez d’autres mesures de sécurité, telles que :
Restreindre l’accès à l’ensemble approprié d’utilisateurs d’applications à l’aide de Microsoft Entra.
Protection de l’instance Azure Container Apps avec un pare-feu et/ou Réseau virtuel.
Nettoyer les ressources
Nettoyage des ressources Azure
Les ressources Azure créées dans cet article sont facturées dans votre abonnement Azure. Si vous pensez ne plus avoir besoin de ces ressources, supprimez-les pour éviter des frais supplémentaires.
Pour supprimer les ressources Azure et supprimer le code source, exécutez la commande CLI Azure Developer suivante :
azd down --purge
Nettoyer GitHub Codespaces
La suppression de l’environnement GitHub Codespaces vous permet d’optimiser le nombre d’heures gratuites par cœur que vous obtenez pour votre compte.
Important
Pour plus d’informations sur les droits de votre compte GitHub, consultez GitHub Codespaces mensuel inclus stockage et heures principales.
Connectez-vous au tableau de bord GitHub Codespaces (https://github.com/codespaces).
Localisez vos codespaces en cours d’exécution provenant du référentiel GitHub
Azure-Samples/openai-chat-app-quickstart
.Ouvrez le menu contextuel du codespace, puis sélectionnez Supprimer.
Connectez-vous au tableau de bord GitHub Codespaces (https://github.com/codespaces).
Localisez vos codespaces en cours d’exécution provenant du référentiel GitHub
Azure-Samples/openai-chat-app-quickstart-dotnet
.Ouvrez le menu contextuel du codespace, puis sélectionnez Supprimer.
Connectez-vous au tableau de bord GitHub Codespaces (https://github.com/codespaces).
Localisez vos codespaces en cours d’exécution provenant du référentiel GitHub
Azure-Samples/openai-chat-app-quickstart-javascript
.Ouvrez le menu contextuel du codespace, puis sélectionnez Supprimer.
Obtenir de l’aide
Si votre problème n’est pas résolu, consignez votre problème dans les Problèmes du référentiel.
Étapes suivantes
Si votre problème n’est pas résolu, consignez votre problème dans les Problèmes du référentiel.
Si votre problème n’est pas résolu, consignez votre problème dans les Problèmes du référentiel.