Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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 (Microsoft Entra ID) autentisering 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 för att Azure Container Apps med hjälp av cli:et Azure Developer.
Genom att följa anvisningarna i den här artikeln gör du följande:
- Distribuera en säker chattapp på Azure Container Apps.
- Använd hanterad identitet för Azure OpenAI-åtkomst.
- Chatta med en Azure OpenAI Large Language Model (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 AI-providern som vi skickar användarens frågor till.
- Azure Container Apps är containermiljön 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 tillhandahållande av Azure-resurser, inklusive Azure OpenAI, Azure Container Apps, Azure Container Registry, Azure Log Analytics och RBAC-roller.
- En Python Quart-app som använder paketet
openaioch api:et Responses 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 Azure. AI. OpenAI NuGet-paket 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 använder de flesta resurser i det här exemplet en grundläggande eller förbrukningsprisnivå. Ä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 kostnad i exempelrepo.
Läs mer om kostnad i exempelrepo.
Läs mer om kostnad 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 kostnadsfri
Azure kontobehörigheter – Ditt Azure-konto måste ha
Microsoft.Authorization/roleAssignments/writebehörigheter, till exempel Användare åtkomstadministratör eller Owner.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ånatliga inkluderade lagrings- och kärntimmar.
Använd följande steg för att skapa ett nytt GitHub Codespace på main-grenen på lagringsplatsen Azure-Samples/openai-chat-app-quickstart GitHub.
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 kodsidan 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 loginKopiera 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å main-grenen på lagringsplatsen Azure-Samples/openai-chat-app-quickstart-dotnet GitHub.
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 kodsidan 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 loginKopiera 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å main-grenen på lagringsplatsen Azure-Samples/openai-chat-app-quickstart-javascript GitHub.
- 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 kodsidan 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 loginKopiera 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 chattappen Azure distribution. Följande steg vägleder dig genom exempelchattappen Azure distributionsprocessen.
Distribuera chattapp till Azure
Viktigt!
Azure resurser som skapas i det här avsnittet medför omedelbara kostnader. Dessa resurser kan tillfö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 upAnvänd följande tabell för att besvara anvisningarna:
Omedelbar Svar Miljönamn Håll den kort och med små bokstäver. Lägg till ditt namn eller alias. Exempel: secure-chatDen 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 chattapplikationen för att ställa frågor till Large Language Model
Terminalen visar en URL efter en lyckad programdistribution.
Välj den URL:en som är märkt
Deploying service webfö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 förlitar sig på ett gemensamt 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övariabler för att skapa en AzureDeveloperCliCredential instans som kan autentisera med den aktuella Microsoft Entra tenant.
azure_dev_cli_credential = AzureDeveloperCliCredential(tenant_id=os.getenv("AZURE_TENANT_ID"), process_timeout=60)
Klientbiblioteket för Azure Identity innehåller credentials – 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:
-
ManagedIdentityCredentialanvänds för Azure Functions, Azure App Service och Azure Container Apps. En användartilldelad hanterad identitet stöds genom att skickaclient_idtillManagedIdentityCredential. -
AzureDeveloperCliCredentialAnvänds för lokal utveckling. Den angavs tidigare baserat på den Microsoft Entra klientorganisation som ska användas.
azure_credential = ChainedTokenCredential(
user_assigned_managed_identity_credential,
azure_dev_cli_credential
)
Tips
Autentiseringsuppgifternas ordning ä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-tokenleverantören 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: DenChainedTokenCredentialinstans som skapades tidigare för att autentisera begäran.https://cognitiveservices.azure.com/.default: Ett eller flera bärartoken-omfång krävs. I det här fallet slutpunkten Azure Cognitive Services.
token_provider = get_bearer_token_provider(
azure_credential, "https://cognitiveservices.azure.com/.default"
)
Följande rader söker efter de obligatoriska AZURE_OPENAI_ENDPOINT och AZURE_OPENAI_CHAT_DEPLOYMENT, två azd miljövariabler som anges under azd hanteringen. Ett fel utlöses om ett värde inte finns.
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")
Det här kodfragmentet initierar OpenAI-klienten mot Azure /openai/v1/ slutpunkt och skickar tokenprovidern som api_key.
api_version behövs inte med v1-slutpunkten:
bp.openai_client = AsyncOpenAI(
base_url=f"{openai_endpoint.rstrip('/')}/openai/v1/",
api_key=token_provider,
)
Följande rad anger distributionsnamnet för Azure OpenAI-modell för användning i API-anrop:
bp.openai_model = os.getenv("AZURE_OPENAI_CHAT_DEPLOYMENT")
Kommentar
OpenAI använder nyckelordsargumentet model för att ange vilken modell som ska användas. Azure OpenAI har konceptet unika modellutplaceringar. När du använder Azure OpenAI bör model referera till distributionsnamnet underunderlying som valdes under Azure OpenAI-modelldistribution.
När den här funktionen har slutförts är klienten korrekt konfigurerad och redo att interagera med Azure OpenAI-tjänster.
Strömma svar med openAI-svars-API:et
response_stream hanterar strömningsanropet för svars-API:et på rutten. Klientdelen skickar svarsformade input objekt direkt, och serverdelen vidarebefordrar dem till 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"
Utforska exempelkoden
.NET program förlitar sig på Azure. AI. OpenAI-klientbibliotek för att kommunicera med Azure OpenAI-tjänster, som är beroende av biblioteket OpenAI. 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")
});
Klientbiblioteket Azure Identity innehåller autentiseringsklasser som implementerar Azure Core-bibliotekets protokoll TokenCredential. 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:
-
ManagedIdentityCredentialanvänds för Azure Functions, Azure App Service och Azure Container Apps. En användartilldelad hanterad identitet stöds genomAZURE_CLIENT_IDsom gavs tillManagedIdentityCredential. -
AzureDeveloperCliCredentialAnvänds för lokal utveckling. Den angavs tidigare baserat på den Microsoft Entra klientorganisation som ska användas.
builder.Services.AddAzureClients(
clientBuilder => {
clientBuilder.AddClient<AzureOpenAIClient, AzureOpenAIClientOptions>((options, _, _)
=> new AzureOpenAIClient(
new Uri(endpoint),
new ChainedTokenCredential(
userAssignedIdentityCredential, azureDevCliCredential), options));
});
Tips
Autentiseringsuppgifternas ordning ä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 injicerar den registrerade AzureOpenAIClient överst i Home.Razor-komponenten.
@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å ett 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ö
Klientbiblioteket Azure Identity innehåller autentiseringsklasser som implementerar Azure Core-bibliotekets protokoll TokenCredential. 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 en ChainedTokenCredential för att bilda en ordnad sekvens med 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 innehåller ./src/azure-authentication.ts flera funktioner för att tillhandahålla nyckellös autentisering för Azure OpenAI.
Den första funktionen, getChainedCredential(), returnerar den första giltiga Azure autentiseringsuppgifter 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 försöks först. Den har konfigurerats med miljövariabeln AZURE_CLIENT_ID i produktionskörningen och kan autentiseras via användartilldelad hanterad identitet.
-
AzureDeveloperCliCredential försöks som nummer två. Den konfigureras när en utvecklare loggar in med cli:et Azure Developer med hjälp av
azd auth login.
Tips
Autentiseringsuppgifternas ordning ä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 en callback som tillhandahåller en bearertoken som är begränsad till Azure Cognitive Services slutpunkt.
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 ger en bärartoken.
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-routningshanterare 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 autentisering 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 bästa praxis i ditt eget repository rekommenderar vi att alla som skapar lösningar baserade på våra mallar säkerställer att GitHub-inställningen för hemlig skanning är aktiverad.
Överväg andra säkerhetsåtgärder, till exempel:
Begränsa åtkomst till lämplig uppsättning appanvändare med hjälp av Microsoft Entra.
Skydda Azure Container Apps-instansen med en firewall och/eller Virtual Network.
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 resurser och ta bort källkoden kör du följande cli-kommando för Azure Developer:
azd down --purge
Rensa GitHub Codespaces
Att ta bort GitHub Codespaces-miljön säkerställer att du kan maximera antalet kostnadsfria timmar per kärna som finns tillgängligt för ditt konto.
Viktigt!
Mer information om rättigheterna för ditt GitHub-konto finns i GitHub Codespaces månadsvis inkluderad lagring och kärntimmar.
Logga in på GitHub Codespaces-dashboard.
Leta upp dina aktuellt körande Codespaces från
Azure-Samples/openai-chat-app-quickstartGitHub-lagringsplatsen.Öppna snabbmenyn för kodområdet och välj sedan Ta bort.
Logga in på GitHub Codespaces-instrumentpanelen.
Hitta dina aktuellt körande Codespaces från
Azure-Samples/openai-chat-app-quickstart-dotnetGitHub-lagringsplatsen.Öppna snabbmenyn för kodområdet och välj sedan Ta bort.
Logga in på instrumentpanelen för GitHub Codespaces.
Lokalisera dina för närvarande körande Codespaces som hämtas från
Azure-Samples/openai-chat-app-quickstart-javascriptGitHub-lagringsplatsen.Öppna snabbmenyn för kodområdet och välj sedan Ta bort.
Få hjälp
Om problemet inte åtgärdas kan du registrera ditt problem på lagringsplatsens Issues.
Nästa steg
Om problemet inte åtgärdas kan du registrera ditt problem på lagringsplatsens Issues.
Om problemet inte åtgärdas kan du registrera ditt problem på lagringsplatsens Issues.