Dela via


Kom igång med Azure OpenAI-säkerhetsblocket

Den här artikeln visar hur du skapar och använder Azure OpenAI-säkerhetsblockexemplet. Syftet är att demonstrera Azure OpenAI-kontoetablering med rollbaserad åtkomstkontroll (RBAC) för nyckellös autentisering (Microsoft Entra ID) till Azure OpenAI. Det här chattappexemplet innehåller även all infrastruktur och konfiguration som krävs för att etablera Azure OpenAI-resurser och distribuera appen till Azure Container Apps med hjälp av Azure Developer CLI.

Genom att följa anvisningarna i den här artikeln gör du följande:

  • Distribuera en säker Azure Container-chattapp.
  • Använd hanterad identitet för Azure OpenAI-åtkomst.
  • Chatta med en Stor språkmodell för Azure OpenAI (LLM) med hjälp av OpenAI-biblioteket.

När du har slutfört den här artikeln kan du börja ändra det nya projektet med din anpassade kod och dina data.

Kommentar

Den här artikeln använder en eller flera AI-appmallar som grund för exemplen och vägledningen i artikeln. Med AI-appmallar får du väl underhållna och enkla att distribuera referensimplementeringar som hjälper dig att säkerställa en högkvalitativ startpunkt för dina AI-appar.

Arkitekturöversikt

En enkel arkitektur för chattappen visas i följande diagram: Diagram som visar arkitektur från klient till serverdelsapp.

Chattappen körs som en Azure Container App. Appen använder hanterad identitet via Microsoft Entra-ID för att autentisera med Azure OpenAI i stället för en API-nyckel. Chattappen använder Azure OpenAI för att generera svar på användarmeddelanden.

Programarkitekturen förlitar sig på följande tjänster och komponenter:

  • Azure OpenAI representerar DEN AI-provider som vi skickar användarens frågor till.
  • Azure Container Apps är den containermiljö där programmet finns.
  • Hanterad identitet hjälper oss att säkerställa förstklassig säkerhet och eliminerar kravet på att du som utvecklare ska hantera en hemlighet på ett säkert sätt.
  • Bicep-filer för etablering av Azure-resurser, inklusive Azure OpenAI, Azure Container Apps, Azure Container Registry, Azure Log Analytics och RBAC-roller.
  • Microsoft AI Chat Protocol tillhandahåller standardiserade API-kontrakt mellan AI-lösningar och språk. Chattappen överensstämmer med Microsoft AI Chat Protocol, som gör att utvärderingsappen kan köras mot alla chattappar som överensstämmer med protokollet.
  • En Python-kvart som använder openai paketet för att generera svar på användarmeddelanden.
  • En grundläggande HTML-/JavaScript-klientdel som strömmar svar från serverdelen med hjälp av JSON-rader via en ReadableStream.
  • En TypeScript-webbapp som använder openai npm-paketet för att generera svar på användarmeddelanden.

Kostnad

I ett försök att hålla priserna så låga som möjligt i det här exemplet använder de flesta resurser en prisnivå för grundläggande eller förbrukning. Ändra nivånivån efter behov baserat på din avsedda användning. Om du vill sluta debiteras tar du bort resurserna när du är klar med artikeln.

Förutsättningar

En utvecklingscontainermiljö är tillgänglig med alla beroenden som krävs för att slutföra den här artikeln. Du kan köra utvecklingscontainern i GitHub Codespaces (i en webbläsare) eller lokalt med hjälp av Visual Studio Code.

Om du vill använda den här artikeln måste du uppfylla följande krav:

  • En Azure-prenumeration – Skapa en kostnadsfritt

  • Azure-kontobehörigheter – Ditt Azure-konto måste ha Microsoft.Authorization/roleAssignments/write behörigheter, till exempel administratör för användaråtkomst eller ägare.

  • GitHub-konto

Öppna utvecklingsmiljön

Använd följande instruktioner för att distribuera en förkonfigurerad utvecklingsmiljö som innehåller alla nödvändiga beroenden för att slutföra den här artikeln.

GitHub Codespaces kör en utvecklingscontainer som hanteras av GitHub med Visual Studio Code för webben som användargränssnitt. För den enklaste utvecklingsmiljön använder du GitHub Codespaces så att du har rätt utvecklarverktyg och beroenden förinstallerade för att slutföra den här artikeln.

Viktigt!

Alla GitHub-konton kan använda Codespaces i upp till 60 timmar kostnadsfritt varje månad med 2 kärninstanser. Mer information finns i GitHub Codespaces månadsvis inkluderade lagrings- och kärntimmar.

Använd följande steg för att skapa ett nytt GitHub Codespace på grenen main av Azure-Samples/openai-chat-app-quickstart GitHub-lagringsplatsen.

  1. Högerklicka på följande knapp och välj Öppna länk i nytt fönster. Med den här åtgärden kan du ha utvecklingsmiljön och dokumentationen tillgänglig för granskning.

  2. På sidan Skapa kodområde granskar du och väljer sedan Skapa nytt kodområde

    Skärmbild av bekräftelseskärmen innan du skapar ett nytt kodområde.

  3. Vänta tills kodområdet har startats. Den här startprocessen kan ta några minuter.

  4. Logga in på Azure med Azure Developer CLI i terminalen längst ned på skärmen.

    azd auth login
    
  5. Kopiera koden från terminalen och klistra sedan in den i en webbläsare. Följ anvisningarna för att autentisera med ditt Azure-konto.

De återstående uppgifterna i den här artikeln sker i samband med den här utvecklingscontainern.

Använd följande steg för att skapa ett nytt GitHub Codespace på grenen main av Azure-Samples/openai-chat-app-quickstart-dotnet GitHub-lagringsplatsen.

  1. Högerklicka på följande knapp och välj Öppna länk i nytt fönster. Med den här åtgärden kan du ha utvecklingsmiljön och dokumentationen tillgänglig för granskning.

  2. På sidan Skapa kodområde granskar du och väljer sedan Skapa kodområde

    Skärmbild av bekräftelseskärmen innan du skapar ett nytt kodområde.

  3. Vänta tills kodområdet har startats. Den här startprocessen kan ta några minuter.

  4. Logga in på Azure med Azure Developer CLI i terminalen längst ned på skärmen.

    azd auth login
    
  5. Kopiera koden från terminalen och klistra sedan in den i en webbläsare. Följ anvisningarna för att autentisera med ditt Azure-konto.

De återstående uppgifterna i den här artikeln sker i samband med den här utvecklingscontainern.

Använd följande steg för att skapa ett nytt GitHub Codespace på grenen main av Azure-Samples/openai-chat-app-quickstart-javascript GitHub-lagringsplatsen.

  1. Högerklicka på följande knapp och välj Öppna länk i nytt fönster. Med den här åtgärden kan du ha utvecklingsmiljön och dokumentationen tillgänglig för granskning.

Öppna i GitHub Codespaces

  1. På sidan Skapa kodområde granskar du och väljer sedan Skapa nytt kodområde

    Skärmbild av bekräftelseskärmen innan du skapar ett nytt kodområde.

  2. Vänta tills kodområdet har startats. Den här startprocessen kan ta några minuter.

  3. Logga in på Azure med Azure Developer CLI i terminalen längst ned på skärmen.

    azd auth login
    
  4. Kopiera koden från terminalen och klistra sedan in den i en webbläsare. Följ anvisningarna för att autentisera med ditt Azure-konto.

De återstående uppgifterna i den här artikeln sker i samband med den här utvecklingscontainern.

Distribuera och köra

Exempellagringsplatsen innehåller alla kod- och konfigurationsfiler för distribution av chattappen i Azure. Följande steg vägleder dig genom azure-distributionsprocessen för exempelchattappen.

Distribuera chattapp till Azure

Viktigt!

Azure-resurser som skapas i det här avsnittet medför omedelbara kostnader. Dessa resurser kan medföra kostnader även om du avbryter kommandot innan det körs fullständigt.

  1. Kör följande Azure Developer CLI-kommando för Azure-resursetablering och källkodsdistribution:

    azd up
    
  2. Använd följande tabell för att besvara anvisningarna:

    Prompt Svar
    Miljönamn Håll den kort och gemen. Lägg till ditt namn eller alias. Exempel: secure-chat Den används som en del av resursgruppens namn.
    Prenumeration Välj den prenumeration som resurserna ska skapas i.
    Plats (för värd) Välj en plats nära dig i listan.
    Plats för OpenAI-modellen Välj en plats nära dig i listan. Om samma plats är tillgänglig som din första plats väljer du det.
  3. Vänta tills appen har distribuerats. Distributionen tar vanligtvis mellan 5 och 10 minuter att slutföra.

Använd chattappen för att ställa frågor till modellen för stora språk

  1. Terminalen visar en URL efter en lyckad programdistribution.

  2. Välj den URL:en som är märkt Deploying service web för att öppna chattprogrammet i en webbläsare.

    Skärmbild av chattappen i webbläsaren som visar flera förslag på chattinmatning och chatttextrutan för att ange en fråga.

  3. I webbläsaren anger du en fråga som "Varför är hanterad identitet bättre än nycklar?".

  4. Svaret kommer från Azure OpenAI och resultatet visas.

Utforska exempelkoden

OpenAI och Azure OpenAI Service är beroende av ett vanligt Python-klientbibliotek, men små kodändringar krävs när du använder Azure OpenAI-slutpunkter. Nu ska vi se hur det här exemplet konfigurerar nyckellös autentisering med Microsoft Entra-ID och kommunicerar med Azure OpenAI.

Konfigurera autentisering med hanterad identitet

I det här exemplet src\quartapp\chat.py börjar filen med att konfigurera nyckellös autentisering.

Följande kodfragment använder modulen azure.identity.aio för att skapa ett asynkront Microsoft Entra-autentiseringsflöde.

Följande kodfragment använder AZURE_CLIENT_IDazd miljövariabeln för att skapa en ManagedIdentityCredential-instans som kan autentisera via användartilldelad hanterad identitet.

user_assigned_managed_identity_credential = ManagedIdentityCredential(client_id=os.getenv("AZURE_CLIENT_ID")) 

Kommentar

Resursmiljövariablerna azd etableras under azd appdistributionen.

Följande kodfragment använder AZURE_TENANT_IDazd resursmiljövariabeln för att skapa en AzureDeveloperCliCredential-instans som kan autentisera med den aktuella Microsoft Entra-klientorganisationen.

azure_dev_cli_credential = AzureDeveloperCliCredential(tenant_id=os.getenv("AZURE_TENANT_ID"), process_timeout=60)  

Azure Identity-klientbiblioteket innehåller autentiseringsuppgifter – offentliga klasser som implementerar Azure Core-bibliotekets TokenCredential-protokoll . En autentiseringsuppgift representerar ett distinkt autentiseringsflöde för att hämta en åtkomsttoken från Microsoft Entra-ID. Dessa autentiseringsuppgifter kan kopplas samman för att bilda en ordnad sekvens med autentiseringsmekanismer som ska försökas.

Följande kodfragment skapar en ChainedTokenCredential med hjälp av en ManagedIdentityCredential och en AzureDeveloperCliCredential:

  • ManagedIdentityCredential Används för Azure Functions och Azure App Service. En användartilldelad hanterad identitet stöds genom att skicka client_id till ManagedIdentityCredential.
  • AzureDeveloperCliCredential Används för lokal utveckling. Den angavs tidigare baserat på Microsoft Entra-klientorganisationen som ska användas.
azure_credential = ChainedTokenCredential(
    user_assigned_managed_identity_credential,
    azure_dev_cli_credential
)

Dricks

Ordningen på autentiseringsuppgifterna är viktig eftersom den första giltiga Microsoft Entra-åtkomsttoken används. Mer information finns i artikeln Översikt över ChainedTokenCredential.

Följande kodfragment hämtar Azure OpenAI-tokenprovidern baserat på den valda Azure-autentiseringsuppgiften. Det här värdet erhålls genom att anropa azure.identity.aio.get_bearer_token_provider med två argument:

  • azure_credential: Den ChainedTokenCredential instans som skapades tidigare för att autentisera begäran.

  • https://cognitiveservices.azure.com/.default: Krävs en eller flera omfång för ägartoken. I det här fallet Azure Cognitive Services-slutpunkten .

token_provider = get_bearer_token_provider(
    azure_credential, "https://cognitiveservices.azure.com/.default"
)

Följande rader söker efter nödvändiga AZURE_OPENAI_ENDPOINT miljövariabler och AZURE_OPENAI_CHATGPT_DEPLOYMENTazd resursmiljövariabler som etableras under azd appdistributionen. Ett fel utlöses om ett värde inte finns.

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")

Det här kodfragmentet initierar Azure OpenAI-klienten och anger parametrarna api_version, azure_endpointoch 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,
)  

Följande rad anger distributionsnamnet för Azure OpenAI-modellen för användning i API-anrop:

bp.openai_model = os.getenv("AZURE_OPENAI_CHATGPT_DEPLOYMENT")

Kommentar

OpenAI använder nyckelordsargumentet model för att ange vilken modell som ska användas. Azure OpenAI har begreppet unika modelldistributioner. När du använder Azure OpenAI model bör du referera till det underliggande distributionsnamnet som valdes under Azure OpenAI-modelldistributionen.

När den här funktionen är klar är klienten korrekt konfigurerad och redo att interagera med Azure OpenAI-tjänster.

Svarsström med hjälp av OpenAI-klienten och modellen

Hanterar response_stream chattens slutförandeanrop i vägen. Följande kodfragment visar hur openai_client och model används.

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 OpenAI takes the deployment name as the model name
        model=bp.openai_model,
        messages=all_messages,
        stream=True,
    )

Utforska exempelkoden

.NET-program förlitar sig på Azure.AI.OpenAI-klientbiblioteket för att kommunicera med Azure OpenAI-tjänster, som är beroende av OpenAI-biblioteket . Exempelappen konfigurerar nyckellös autentisering med hjälp av Microsoft Entra-ID för att kommunicera med Azure OpenAI.

Konfigurera autentisering och tjänstregistrering

I det här exemplet konfigureras nyckellös autentisering i program.cs filen. Följande kodfragment använder miljövariabeln AZURE_CLIENT_ID som anges av azd för att skapa en ManagedIdentityCredential-instans som kan autentisera via användartilldelad hanterad identitet.

var userAssignedIdentityCredential = 
    new ManagedIdentityCredential(builder.Configuration.GetValue<string>("AZURE_CLIENT_ID"));

Kommentar

Resursmiljövariablerna azd etableras under azd appdistributionen.

Följande kodfragment använder AZURE_TENANT_ID miljövariabeln som anges av azd för att skapa en AzureDeveloperCliCredential-instansazdsom kan autentisera lokalt med kontot som är inloggad på .

var azureDevCliCredential = new AzureDeveloperCliCredential(
    new AzureDeveloperCliCredentialOptions()
    { 
        TenantId = builder.Configuration.GetValue<string>("AZURE_TENANT_ID") 
    });

Azure Identity-klientbiblioteket innehåller autentiseringsklasser som implementerar Azure Core-bibliotekets TokenCredential-protokoll . En autentiseringsuppgift representerar ett distinkt autentiseringsflöde för att hämta en åtkomsttoken från Microsoft Entra-ID. Dessa autentiseringsuppgifter kan kopplas samman med hjälp av ChainedTokenCredential för att bilda en ordnad sekvens av autentiseringsmekanismer som ska försökas.

Följande kodfragment registrerar AzureOpenAIClient för beroendeinmatning och skapar en ChainedTokenCredential med hjälp av en ManagedIdentityCredential och en AzureDeveloperCliCredential:

  • ManagedIdentityCredential Används för Azure Functions och Azure App Service. En användartilldelad hanterad identitet stöds med hjälp av AZURE_CLIENT_ID den som angavs för ManagedIdentityCredential.
  • AzureDeveloperCliCredential Används för lokal utveckling. Den angavs tidigare baserat på Microsoft Entra-klientorganisationen som ska användas.
builder.Services.AddAzureClients(
    clientBuilder => {
        clientBuilder.AddClient<AzureOpenAIClient, AzureOpenAIClientOptions>((options, _, _)
            => new AzureOpenAIClient(
                new Uri(endpoint),
                new ChainedTokenCredential(
                    userAssignedIdentityCredential, azureDevCliCredential), options));
    });

Dricks

Ordningen på autentiseringsuppgifterna är viktig eftersom den första giltiga Microsoft Entra-åtkomsttoken används. Mer information finns i artikeln Översikt över ChainedTokenCredential.

Få chatten slutförd med Hjälp av Azure OpenAI-klienten

Blazor-webbappen matar in den registrerade överst AzureOpenAIClient i komponenten Home.Razor :

@inject AzureOpenAIClient azureOpenAIClient

När användaren skickar formuläret skickar meddelandet AzureOpenAIClient till OpenAI-modellen för att generera ett slutförande:

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));

Utforska exempelkoden

Även om OpenAI och Azure OpenAI Service förlitar sig på en openai (vanligt JavaScript-klientbibliotek), krävs små kodändringar när du använder Azure OpenAI-slutpunkter. Nu ska vi se hur det här exemplet konfigurerar nyckellös autentisering med Microsoft Entra-ID och kommunicerar med Azure OpenAI.

Nyckellös autentisering för varje miljö

Azure Identity-klientbiblioteket innehåller autentiseringsklasser som implementerar Azure Core-bibliotekets TokenCredential-protokoll . En autentiseringsuppgift representerar ett distinkt autentiseringsflöde för att hämta en åtkomsttoken från Microsoft Entra-ID. Dessa autentiseringsuppgifter kan kopplas samman med hjälp av ChainedTokenCredential för att bilda en ordnad sekvens av autentiseringsmekanismer som ska försökas. På så sätt kan du distribuera samma kod i både produktionsmiljöer och lokala utvecklingsmiljöer.

Diagram som visar de två autentiseringsuppgifterna i flödet där den hanterade identiteten provas först och sedan testas standardautentiseringsuppgifterna för Azure.

Konfigurera autentisering med hanterad identitet

I det här exemplet ./src/azure-authentication.ts innehåller flera funktioner för att tillhandahålla nyckellös autentisering till Azure OpenAI.

Den första funktionen, getChainedCredential(), returnerar den första giltiga Azure-autentiseringsuppgiften som finns i kedjan.

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 görs först. Den har konfigurerats med miljövariabeln AZURE_CLIENT_ID i produktionskörningen och kan autentiseras via användartilldelad hanterad identitet.
  • AzureDeveloperCliCredential görs tvåa. Den konfigureras när du utvecklar inloggningar med Azure CLI az login.

Dricks

Ordningen på autentiseringsuppgifterna är viktig eftersom den första giltiga Microsoft Entra-åtkomsttoken används. Mer information finns i artikeln Översikt över ChainedTokenCredential.

Hämta ägartoken för OpenAI

Den andra funktionen i ./src/azure-authentication.ts är getTokenProvider(), som returnerar ett återanrop som tillhandahåller en ägartoken som är begränsad till Azure Cognitive Services-slutpunkten .

function getTokenProvider(): () => Promise<string> {
    const credential  = getChainedCredential();
    const scope = "https://cognitiveservices.azure.com/.default";
    return getBearerTokenProvider(credential, scope);
}

Föregående kodfragment använder getBearerTokenProvider för att ta autentiseringsuppgifterna och omfånget och returnerar sedan ett återanrop som tillhandahåller en ägartoken.

Skapa autentiserad Azure OpenAI-klient

Den tredje funktionen i ./src/azure-authentication.ts är getOpenAiClient(), som returnerar Azure OpenAI-klienten.

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);
    }
}

Den här koden tar alternativen, inklusive den korrekt begränsade token, och skapar AzureOpenAI klienten

Stream chat-svar med Azure OpenAI

Använd följande Fastify-väghanterare i ./src/openai-chat-api.ts för att skicka ett meddelande till Azure OpenAI och strömma svaret.

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()

}

Funktionen hämtar chattkonversationen, inklusive eventuella tidigare meddelanden, och skickar dem till Azure OpenAI. När dataströmsegmenten returneras från Azure OpenAI skickas de till klienten.

Andra säkerhetsöverväganden

Den här artikeln visar hur exemplet använder ChainedTokenCredential för att autentisera till Azure OpenAI-tjänsten.

Exemplet har också en GitHub-åtgärd som genomsöker filerna infrastruktur som kod och genererar en rapport som innehåller eventuella identifierade problem. För att säkerställa fortsatt metodtips på din egen lagringsplats rekommenderar vi att alla som skapar lösningar baserat på våra mallar ser till att inställningen För hemlig genomsökning i GitHub är aktiverad.

Överväg andra säkerhetsåtgärder, till exempel:

Rensa resurser

Rensa Azure-resurser

De Azure-resurser som skapas i den här artikeln faktureras till din Azure-prenumeration. Om du inte förväntar dig att behöva dessa resurser i framtiden tar du bort dem för att undvika att debiteras mer.

Om du vill ta bort Azure-resurserna och ta bort källkoden kör du följande Azure Developer CLI-kommando:

azd down --purge

Rensa GitHub Codespaces

Om du tar bort GitHub Codespaces-miljön kan du maximera mängden kostnadsfria timmar per kärna som du får för ditt konto.

Viktigt!

Mer information om ditt GitHub-kontos rättigheter finns i GitHub Codespaces månadsvis inkluderade lagrings- och kärntimmar.

  1. Logga in på GitHub Codespaces-instrumentpanelen (https://github.com/codespaces).

  2. Leta upp de codespaces som körs från Azure-Samples/openai-chat-app-quickstart GitHub-lagringsplatsen.

  3. Öppna snabbmenyn för kodområdet och välj sedan Ta bort.

  1. Logga in på GitHub Codespaces-instrumentpanelen (https://github.com/codespaces).

  2. Leta upp de codespaces som körs från Azure-Samples/openai-chat-app-quickstart-dotnet GitHub-lagringsplatsen.

  3. Öppna snabbmenyn för kodområdet och välj sedan Ta bort.

  1. Logga in på GitHub Codespaces-instrumentpanelen (https://github.com/codespaces).

  2. Leta upp de codespaces som körs från Azure-Samples/openai-chat-app-quickstart-javascript GitHub-lagringsplatsen.

  3. Öppna snabbmenyn för kodområdet och välj sedan Ta bort.

Få hjälp

Om problemet inte åtgärdas loggar du problemet till lagringsplatsens problem.

Nästa steg

Om problemet inte åtgärdas loggar du problemet till lagringsplatsens problem.

Om problemet inte åtgärdas loggar du problemet till lagringsplatsens problem.