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:
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 Blazor-webbapp som använder NuGet-paketet Azure.AI.OpenAI för att generera svar på användarmeddelanden.
- 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.
Läs mer om kostnaden i exempelrepo.
Läs mer om kostnaden i exempelrepo.
Läs mer om kostnaden i exempelrepo.
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.
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.
På sidan Skapa kodområde granskar du och väljer sedan Skapa nytt kodområde
Vänta tills kodområdet har startats. Den här startprocessen kan ta några minuter.
Logga in på Azure med Azure Developer CLI i terminalen längst ned på skärmen.
azd auth login
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.
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.
På sidan Skapa kodområde granskar du och väljer sedan Skapa kodområde
Vänta tills kodområdet har startats. Den här startprocessen kan ta några minuter.
Logga in på Azure med Azure Developer CLI i terminalen längst ned på skärmen.
azd auth login
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.
- 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.
På sidan Skapa kodområde granskar du och väljer sedan Skapa nytt kodområde
Vänta tills kodområdet har startats. Den här startprocessen kan ta några minuter.
Logga in på Azure med Azure Developer CLI i terminalen längst ned på skärmen.
azd auth login
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.
Kör följande Azure Developer CLI-kommando för Azure-resursetablering och källkodsdistribution:
azd up
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. 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
Terminalen visar en URL efter en lyckad programdistribution.
Välj den URL:en som är märkt
Deploying service web
för att öppna chattprogrammet i en webbläsare.I webbläsaren anger du en fråga som "Varför är hanterad identitet bättre än nycklar?".
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_ID
azd
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_ID
azd
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 skickaclient_id
tillManagedIdentityCredential
. -
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
: DenChainedTokenCredential
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_DEPLOYMENT
azd
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_endpoint
och 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-instansazd
som 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 avAZURE_CLIENT_ID
den som angavs förManagedIdentityCredential
. -
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.
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:
Begränsa åtkomsten till lämplig uppsättning appanvändare med hjälp av Microsoft Entra.
Skydda Azure Container Apps-instansen med en brandvägg och/eller ett virtuellt nätverk.
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.
Logga in på GitHub Codespaces-instrumentpanelen (https://github.com/codespaces).
Leta upp de codespaces som körs från
Azure-Samples/openai-chat-app-quickstart
GitHub-lagringsplatsen.Öppna snabbmenyn för kodområdet och välj sedan Ta bort.
Logga in på GitHub Codespaces-instrumentpanelen (https://github.com/codespaces).
Leta upp de codespaces som körs från
Azure-Samples/openai-chat-app-quickstart-dotnet
GitHub-lagringsplatsen.Öppna snabbmenyn för kodområdet och välj sedan Ta bort.
Logga in på GitHub Codespaces-instrumentpanelen (https://github.com/codespaces).
Leta upp de codespaces som körs från
Azure-Samples/openai-chat-app-quickstart-javascript
GitHub-lagringsplatsen.Ö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.