Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule przedstawiono sposób tworzenia i używania przykładowego bloku konstrukcyjnego zabezpieczeń Azure OpenAI. Celem jest zademonstrowanie aprowizacji konta Azure OpenAI z użyciem Microsoft Entra ID do uwierzytelniania bez kluczy i przy użyciu kontroli dostępu opartej na rolach (RBAC) dla usługi Azure OpenAI. Ten przykład aplikacji do czatu zawiera również całą infrastrukturę i konfigurację wymaganą do aprowizacji zasobów Azure OpenAI i wdrażania aplikacji na Azure Container Apps przy użyciu Azure Developer CLI.
Postępując zgodnie z instrukcjami w tym artykule, wykonasz następujące czynności:
- Wdróż bezpieczną aplikację do czatu na Azure Container Apps.
- Użyj tożsamości zarządzanej na potrzeby dostępu Azure OpenAI.
- Porozmawiaj z Azure OpenAI Large Language Model (LLM) przy użyciu biblioteki OpenAI.
Po ukończeniu tego artykułu możesz rozpocząć modyfikowanie nowego projektu przy użyciu niestandardowego kodu i danych.
Uwaga
W tym artykule użyto co najmniej jednego szablonu aplikacji sztucznej inteligencji jako podstawy przykładów i wskazówek w artykule. Szablony aplikacji sztucznej inteligencji zapewniają dobrze utrzymywane, łatwe w wdrażaniu implementacje referencyjne, które pomagają zapewnić wysokiej jakości punkt wyjścia dla aplikacji sztucznej inteligencji.
Omówienie architektury
Prosta architektura aplikacji do czatu jest pokazana na poniższym diagramie:
Aplikacja do czatu działa jako aplikacja kontenera Azure. Aplikacja używa tożsamości zarządzanej za pośrednictwem Microsoft Entra ID do uwierzytelniania z Azure OpenAI zamiast klucza API. Aplikacja do czatu używa Azure OpenAI do generowania odpowiedzi na wiadomości użytkowników.
Architektura aplikacji opiera się na następujących usługach i składnikach:
- Azure OpenAI reprezentuje dostawcę sztucznej inteligencji, do którego wysyłamy zapytania użytkownika.
- Azure Container Apps to środowisko kontenera, w którym jest hostowana aplikacja.
- Tożsamość zarządzana pomaga nam zapewnić najlepsze w swojej klasie zabezpieczenia i eliminuje konieczność bezpiecznego zarządzania tajnym kluczem przez Ciebie jako programistę.
- Pliki Bicep do udostępniania zasobów Azure, w tym Azure OpenAI, Azure Container Apps, Azure Container Registry, Azure Log Analytics oraz ról RBAC.
- Aplikacja Python Quart korzystająca z pakietu
openaii interfejsu API Responses API do generowania odpowiedzi na komunikaty użytkowników. - Podstawowy interfejs frontendowy HTML/JavaScript, który przesyła strumieniowo odpowiedzi z zaplecza przy użyciu linii JSON za pomocą ReadableStream.
- Aplikacja internetowa platformy Blazor, która używa Azure. AI. OpenAI pakiet NuGet w celu wygenerowania odpowiedzi na komunikaty użytkownika.
- Aplikacja internetowa TypeScript, która używa pakietu npm openAI do generowania odpowiedzi na komunikaty użytkowników.
Koszt
W tym przykładzie, próbując zachować możliwie niskie ceny, większość zasobów korzysta z poziomu cenowego podstawowy lub zużycia. Zmień poziom zgodnie z potrzebami w zależności od zamierzonego użycia. Aby zatrzymać naliczanie opłat, usuń zasoby po zakończeniu pracy z artykułem.
Dowiedz się więcej o koszcie w przykładowym repozytorium.
Dowiedz się więcej o koszcie w repozytorium przykładowym.
Dowiedz się więcej o koszcie w przykładowym repozytorium.
Wymagania wstępne
Środowisko kontenera deweloperskiego jest dostępne ze wszystkimi zależnościami wymaganymi do ukończenia tego artykułu. Kontener deweloperów można uruchomić w usłudze GitHub Codespaces (w przeglądarce) lub lokalnie przy użyciu Visual Studio Code.
Aby użyć tego artykułu, należy spełnić następujące wymagania wstępne:
Subskrypcja Azure — Utwórz ją bezpłatnie
uprawnienia konta Azure — Konto Azure musi mieć uprawnienia
Microsoft.Authorization/roleAssignments/write, takie jak Administrator dostępu użytkownika lub Owner.konto GitHub
Otwieranie środowiska projektowego
Skorzystaj z poniższych instrukcji, aby wdrożyć wstępnie skonfigurowane środowisko programistyczne zawierające wszystkie wymagane zależności, aby ukończyć ten artykuł.
GitHub Codespaces uruchamia kontener deweloperów zarządzany przez GitHub za pomocą Visual Studio Code dla sieci Web jako interfejsu użytkownika. W przypadku najprostszego środowiska programistycznego użyj GitHub Codespaces, aby mieć wstępnie zainstalowane odpowiednie narzędzia deweloperskie i zależności, aby ukończyć ten artykuł.
Ważne
Wszystkie konta GitHub mogą korzystać z usługi Codespaces przez maksymalnie 60 godzin bezpłatnych każdego miesiąca z 2 podstawowymi wystąpieniami. Aby uzyskać więcej informacji, zobacz miesięczne wliczone w abonament godziny przechowywania i rdzeni GitHub Codespaces.
Wykonaj poniższe kroki, aby utworzyć nową GitHub Codespace w gałęzi main repozytorium Azure-Samples/openai-chat-app-quickstart GitHub.
Kliknij prawym przyciskiem myszy poniższy przycisk i wybierz polecenie Otwórz link w nowym oknie. Ta akcja umożliwia zapoznanie się ze środowiskiem deweloperów i dokumentacją.
Na stronie Tworzenia przestrzeni kodu przejrzyj, a następnie wybierz Utwórz nową przestrzeń kodu
Poczekaj na uruchomienie przestrzeni roboczej dla kodu. Ten proces uruchamiania może potrwać kilka minut.
Zaloguj się do Azure przy użyciu Azure Developer CLI w terminalu u dołu ekranu.
azd auth loginSkopiuj kod z terminalu, a następnie wklej go w przeglądarce. Postępuj zgodnie z instrukcjami, aby uwierzytelnić się przy użyciu konta Azure.
Pozostałe zadania w tym artykule mają miejsce w kontekście tego kontenera deweloperskiego.
Wykonaj poniższe kroki, aby utworzyć nową GitHub Codespace w gałęzi main repozytorium Azure-Samples/openai-chat-app-quickstart-dotnet GitHub.
Kliknij prawym przyciskiem myszy poniższy przycisk i wybierz polecenie Otwórz link w nowym oknie. Ta akcja umożliwia zapoznanie się ze środowiskiem deweloperów i dokumentacją.
Na stronie Tworzenie przestrzeni kodu przejrzyj, a następnie wybierz Utwórz przestrzeń kodu.
Poczekaj na uruchomienie przestrzeni roboczej dla kodu. Ten proces uruchamiania może potrwać kilka minut.
Zaloguj się do Azure przy użyciu Azure Developer CLI w terminalu na dole ekranu.
azd auth loginSkopiuj kod z terminalu, a następnie wklej go w przeglądarce. Postępuj zgodnie z instrukcjami, aby uwierzytelnić się przy użyciu konta Azure.
Pozostałe zadania w tym artykule mają miejsce w kontekście tego kontenera deweloperskiego.
Wykonaj poniższe kroki, aby utworzyć nową GitHub Codespace w gałęzi main repozytorium Azure-Samples/openai-chat-app-quickstart-javascript GitHub.
- Kliknij prawym przyciskiem myszy poniższy przycisk i wybierz polecenie Otwórz link w nowym oknie. Ta akcja umożliwia zapoznanie się ze środowiskiem deweloperów i dokumentacją.
Na stronie Tworzenia przestrzeni kodu przejrzyj, a następnie wybierz Utwórz nową przestrzeń kodu
Poczekaj na uruchomienie przestrzeni roboczej dla kodu. Ten proces uruchamiania może potrwać kilka minut.
Zaloguj się do Azure przy użyciu Azure Developer CLI w terminalu na dole ekranu.
azd auth loginSkopiuj kod z terminalu, a następnie wklej go w przeglądarce. Postępuj zgodnie z instrukcjami, aby uwierzytelnić się przy użyciu konta Azure.
Pozostałe zadania w tym artykule mają miejsce w kontekście tego kontenera deweloperskiego.
Wdrażanie i uruchamianie
Przykładowe repozytorium zawiera wszystkie pliki kodu oraz konfiguracji aplikacji czatu na Azure wdrożenia. W poniższych krokach opisano proces wdrażania przykładowej aplikacji do czatu na platformie Azure.
Wdrażanie aplikacji do czatu w Azure
Ważne
Zasoby Azure, utworzone w tej sekcji, generują natychmiastowe koszty. Te zasoby mogą naliczać koszty, nawet jeśli przerywasz wykonywanie polecenia, zanim zostanie ono w pełni wykonane.
Uruchom następujące polecenie interfejsu wiersza polecenia Azure dla deweloperów w celu aprowizacji zasobów Azure i wdrożenia kodu źródłowego:
azd upUżyj poniższej tabeli, aby odpowiedzieć na pytania.
Komunikat Odpowiedź Nazwa środowiska Zachowaj to krótkie i pisane małymi literami. Dodaj swoją nazwę lub alias. Na przykład secure-chat. Jest ona używana jako część nazwy grupy zasobów.Subskrypcja Wybierz subskrypcję, w ramach której chcesz utworzyć zasoby. Lokalizacja (na potrzeby hostingu) Wybierz lokalizację w pobliżu z listy. Lokalizacja modelu OpenAI Wybierz lokalizację w pobliżu z listy. Jeśli ta sama lokalizacja jest dostępna jako pierwsza lokalizacja, wybierz tę lokalizację. Poczekaj na wdrożenie aplikacji. Wdrożenie zwykle trwa od 5 do 10 minut.
Używanie aplikacji do czatu w celu zadawania pytań do modelu dużego języka
W terminalu zostanie wyświetlony adres URL po pomyślnym wdrożeniu aplikacji.
Wybierz ten adres URL oznaczony
Deploying service webetykietą, aby otworzyć aplikację czatu w przeglądarce.W przeglądarce wprowadź pytanie, takie jak "Dlaczego tożsamość zarządzana jest lepsza niż klucze?".
Odpowiedź pochodzi z Azure OpenAI i zostanie wyświetlony wynik.
Eksplorowanie przykładowego kodu
Podczas gdy interfejs OpenAI i Azure OpenAI Service polegają na wspólnej bibliotece klienta Python, podczas korzystania z endpointów Azure OpenAI potrzebne są niewielkie zmiany w kodzie. Zobaczmy, jak ten przykład konfiguruje uwierzytelnianie bez klucza za pomocą Microsoft Entra ID i komunikuje się z Azure OpenAI.
Konfigurowanie uwierzytelniania przy użyciu tożsamości zarządzanej
W tym przykładzie src/quartapp/chat.py plik rozpoczyna się od konfigurowania uwierzytelniania bez klucza.
Poniższy fragment kodu używa modułu azure.identity.aio w celu utworzenia asynchronicznego przepływu uwierzytelniania Microsoft Entra.
Poniższy fragment kodu używa AZURE_CLIENT_IDazd zmiennej środowiskowej do utworzenia wystąpienia ManagedIdentityCredential umożliwiającego uwierzytelnianie za pośrednictwem tożsamości zarządzanej przypisanej przez użytkownika.
user_assigned_managed_identity_credential = ManagedIdentityCredential(client_id=os.getenv("AZURE_CLIENT_ID"))
Uwaga
Zmienne środowiskowe azd są udostępniane w trakcie azd wdrażania aplikacji.
Poniższy fragment kodu używa zmiennej środowiskowej zasobów AZURE_TENANT_IDazd, aby utworzyć wystąpienie AzureDeveloperCliCredential, umożliwiające uwierzytelnianie przy użyciu bieżącej dzierżawy Microsoft Entra.
azure_dev_cli_credential = AzureDeveloperCliCredential(tenant_id=os.getenv("AZURE_TENANT_ID"), process_timeout=60)
Biblioteka klienta Azure Identity udostępnia dane uwierzytelniające — publiczne klasy implementujące protokół TokenCredential biblioteki Azure Core. Poświadczenie reprezentuje odrębny przepływ uwierzytelniania na potrzeby uzyskiwania tokenu dostępu z Microsoft Entra ID. Te poświadczenia można połączyć w łańcuch, aby utworzyć uporządkowaną sekwencję mechanizmów uwierzytelniania, których należy użyć.
Poniższy fragment kodu tworzy ChainedTokenCredential za pomocą ManagedIdentityCredential oraz AzureDeveloperCliCredential.
-
ManagedIdentityCredentialjest używany do Azure Functions, Azure App Service i Azure Container Apps. Tożsamość zarządzana przypisana przez użytkownika jest obsługiwana przez przekazanie elementuclient_iddoManagedIdentityCredential. - Element
AzureDeveloperCliCredentialjest używany do programowania lokalnego. Została ona wcześniej ustawiona na podstawie tenant Microsoft Entra do wykorzystania.
azure_credential = ChainedTokenCredential(
user_assigned_managed_identity_credential,
azure_dev_cli_credential
)
Wskazówka
Kolejność poświadczeń jest ważna, ponieważ jest używany pierwszy prawidłowy token dostępu Microsoft Entra. Aby uzyskać więcej informacji, zapoznaj się z artykułem o ChainedTokenCredential Overview.
Poniższy fragment kodu pobiera dostawcę tokenów Azure OpenAI na podstawie wybranego poświadczenia Azure. Ta wartość jest uzyskiwana przez wywołanie azure.identity.aio.get_bearer_token_provider z dwoma argumentami:
azure_credential: wystąpienieChainedTokenCredentialutworzone wcześniej w celu uwierzytelnienia żądania.https://cognitiveservices.azure.com/.default: Wymagany co najmniej jeden zakres tokenu elementu nośnego. W tym przypadku punkt końcowy usług Azure Cognitive Services.
token_provider = get_bearer_token_provider(
azure_credential, "https://cognitiveservices.azure.com/.default"
)
Poniższe wiersze sprawdzają wymagane AZURE_OPENAI_ENDPOINT i AZURE_OPENAI_CHAT_DEPLOYMENT, dwie zmienne środowiskowe ustawione podczas udostępniania azd. Błąd zgłaszany jest, jeśli wartość nie jest obecna.
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")
Ten fragment kodu inicjuje klienta OpenAI względem punktu końcowego Azure api_version.
bp.openai_client = AsyncOpenAI(
base_url=f"{openai_endpoint.rstrip('/')}/openai/v1/",
api_key=token_provider,
)
Poniższy wiersz ustawia nazwę wdrożenia modelu openAI Azure do użycia w wywołaniach interfejsu API:
bp.openai_model = os.getenv("AZURE_OPENAI_CHAT_DEPLOYMENT")
Uwaga
Interfejs OpenAI używa argumentu kluczowego model , aby określić, który model ma być używany. Azure OpenAI ma koncepcję wdrożeń modeli unique. W przypadku używania Azure OpenAI model powinien odwoływać się do nazwy wdrożenia wybranej podczas wdrażania modelu Azure OpenAI.
Po zakończeniu tej funkcji klient jest prawidłowo skonfigurowany i gotowy do interakcji z usługami Azure OpenAI.
Strumieniowe przesyłanie odpowiedzi przy użyciu API OpenAI Responses
Element response_stream obsługuje strumieniowe wywołanie API odpowiedzi w trasie. Fronton wysyła bezpośrednio elementy uformowane jako odpowiedzi input, a zaplecze przekazuje je do 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"
Poznawanie przykładowego kodu
.NET aplikacje korzystają z biblioteki klienta Azure.AI.OpenAI do komunikowania się z usługami Azure OpenAI, która ma zależność od biblioteki OpenAI. Przykładowa aplikacja konfiguruje uwierzytelnianie bez klucza przy użyciu Microsoft Entra ID do komunikowania się z usługą Azure OpenAI.
Konfigurowanie uwierzytelniania i rejestracji usługi
W tym przykładzie uwierzytelnianie bez klucza jest skonfigurowane w pliku program.cs. Poniższy fragment kodu używa zmiennej środowiskowej AZURE_CLIENT_ID, ustawionej przez azd, aby utworzyć wystąpienie ManagedIdentityCredential pozwalające na uwierzytelnianie za pomocą przypisanej przez użytkownika tożsamości zarządzanej.
var userAssignedIdentityCredential =
new ManagedIdentityCredential(builder.Configuration.GetValue<string>("AZURE_CLIENT_ID"));
Uwaga
Zmienne środowiskowe azd są udostępniane w trakcie azd wdrażania aplikacji.
Poniższy fragment kodu używa zmiennej środowiskowej ustawionej przez AZURE_TENANT_ID na azd w celu utworzenia wystąpienia AzureDeveloperCliCredential, które może uwierzytelniać się lokalnie przy użyciu konta zalogowanego do azd.
var azureDevCliCredential = new AzureDeveloperCliCredential(
new AzureDeveloperCliCredentialOptions()
{
TenantId = builder.Configuration.GetValue<string>("AZURE_TENANT_ID")
});
Biblioteka klienta Azure Identity udostępnia klasy poświadczeń, które implementują protokół TokenCredential biblioteki Azure Core. Poświadczenie reprezentuje odrębny przepływ uwierzytelniania na potrzeby uzyskiwania tokenu dostępu z Microsoft Entra ID. Te poświadczenia można połączyć w łańcuch za pomocą polecenia ChainedTokenCredential, aby utworzyć uporządkowaną sekwencję mechanizmów uwierzytelniania do przetestowania.
Poniższy fragment kodu rejestruje AzureOpenAIClient do iniekcji zależności i tworzy ChainedTokenCredential przy użyciu ManagedIdentityCredential i AzureDeveloperCliCredential.
-
ManagedIdentityCredentialjest używany do Azure Functions, Azure App Service i Azure Container Apps. Tożsamość zarządzana przypisana przez użytkownika jest obsługiwana za pomocąAZURE_CLIENT_IDpodanego doManagedIdentityCredential. - Element
AzureDeveloperCliCredentialjest używany do programowania lokalnego. Ustawiono to wcześniej na podstawie dzierżawcy Microsoft Entra, którego należy użyć.
builder.Services.AddAzureClients(
clientBuilder => {
clientBuilder.AddClient<AzureOpenAIClient, AzureOpenAIClientOptions>((options, _, _)
=> new AzureOpenAIClient(
new Uri(endpoint),
new ChainedTokenCredential(
userAssignedIdentityCredential, azureDevCliCredential), options));
});
Wskazówka
Kolejność poświadczeń jest ważna, ponieważ jest używany pierwszy prawidłowy token dostępu Microsoft Entra. Aby uzyskać więcej informacji, zapoznaj się z artykułem o ChainedTokenCredential Overview.
Uzyskiwanie ukończenia czatu przy użyciu klienta Azure OpenAI
Aplikacja internetowa Blazor wstrzykuje zarejestrowany AzureOpenAIClient na górze składnika Home.Razor.
@inject AzureOpenAIClient azureOpenAIClient
Gdy użytkownik przesyła formularz, AzureOpenAIClient wysyła żądanie do modelu OpenAI, aby wygenerować odpowiedź.
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));
Poznawanie przykładowego kodu
Podczas gdy interfejs OpenAI i Azure OpenAI Service polegają na openai (typowej biblioteki klienta JavaScript), podczas korzystania z punktów końcowych Azure OpenAI są wymagane niewielkie zmiany kodu. Zobaczmy, jak ten przykład konfiguruje uwierzytelnianie bez klucza za pomocą Microsoft Entra ID i komunikuje się z Azure OpenAI.
Uwierzytelnianie bez klucza dla każdego środowiska
Biblioteka klienta Azure Identity udostępnia klasy poświadczeń, które implementują protokół Azure Core biblioteki TokenCredential. Poświadczenie reprezentuje odrębny przepływ uwierzytelniania na potrzeby uzyskiwania tokenu dostępu z Microsoft Entra ID. Te poświadczenia można połączyć za pomocą ChainedTokenCredential, tworząc uporządkowaną sekwencję mechanizmów uwierzytelniania do wypróbowania. Dzięki temu można wdrożyć ten sam kod zarówno w środowiskach produkcyjnych, jak i lokalnych.
Konfigurowanie uwierzytelniania przy użyciu tożsamości zarządzanej
W tym przykładzie ./src/azure-authentication.ts udostępnia kilka funkcji zapewniających uwierzytelnianie bez klucza Azure OpenAI.
Pierwsza funkcja, getChainedCredential(), zwraca pierwsze prawidłowe poświadczenie Azure znalezione w łańcuchu.
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
})
);
}
- Najpierw próbowano użyć ManagedIdentityCredential. Jest ona skonfigurowana przy użyciu zmiennej środowiskowej AZURE_CLIENT_ID w środowisku produkcyjnym i może uwierzytelniać się za pomocą tożsamości zarządzanej przypisanej przez użytkownika.
-
AzureDeveloperCliCredential jest próbą drugą. Jest konfigurowany, gdy deweloper loguje się za pomocą Azure Developer CLI przy użyciu
azd auth login.
Wskazówka
Kolejność poświadczeń jest ważna, ponieważ jest używany pierwszy prawidłowy token dostępu Microsoft Entra. Aby uzyskać więcej informacji, zapoznaj się z artykułem o ChainedTokenCredential Overview.
Uzyskiwanie tokenu typu bearer dla OpenAI
Druga funkcja w ./src/azure-authentication.ts to getTokenProvider(), która zwraca wywołanie zwrotne udostępniające token uwierzytelniający przypisany do punktu końcowego Azure Cognitive Services.
function getTokenProvider(): () => Promise<string> {
const credential = getChainedCredential();
const scope = "https://cognitiveservices.azure.com/.default";
return getBearerTokenProvider(credential, scope);
}
Powyższy fragment kodu używa getBearerTokenProvider do pobrania poświadczeń i zakresu, a następnie zwraca wywołanie zwrotne, które udostępnia token nosiciela.
Tworzenie uwierzytelnionego klienta Azure OpenAI
Trzecia funkcja w ./src/azure-authentication.ts jest getOpenAiClient(), która zwraca klienta 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);
}
}
Ten kod pobiera opcje, w tym prawidłowy token o określonym zakresie, i tworzy klienta AzureOpenAI.
Przesyłanie odpowiedzi na czat w trybie strumieniowym za pomocą Azure OpenAI
Użyj następującego kontrolera trasy Fastify w ./src/openai-chat-api.ts, aby wysłać komunikat do Azure OpenAI i strumieniowo przesyłać odpowiedź.
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()
}
Funkcja pobiera konwersację czatu, w tym wszystkie poprzednie wiadomości, i wysyła je do Azure OpenAI. Gdy fragmenty strumienia są zwracane z Azure OpenAI, zostają przesłane do klienta.
Inne zagadnienia dotyczące zabezpieczeń
W tym artykule pokazano, jak przykład używa ChainedTokenCredential do uwierzytelniania w usłudze Azure OpenAI.
Przykład zawiera również GitHub Action, który skanuje pliki infrastruktury-jako-kodu i generuje raport zawierający wykryte problemy. Aby zapewnić utrzymanie najlepszych praktyk we własnym repozytorium, zalecamy włączenie ustawienia skanowania tajnych danych GitHub każdej osobie tworzącej rozwiązania na podstawie naszych szablonów.
Rozważ inne środki zabezpieczeń, takie jak:
Ogranicz dostęp do odpowiedniego zestawu użytkowników aplikacji przy użyciu Microsoft Entra.
Ochrona wystąpienia Azure Container Apps za pomocą firewall i/lub Virtual Network.
Czyszczenie zasobów
Czyszczenie zasobów Azure
Za zasoby Azure utworzone w tym artykule są naliczane opłaty za subskrypcję Azure. Jeśli nie spodziewasz się, że te zasoby będą potrzebne w przyszłości, usuń je, aby uniknąć naliczania dodatkowych opłat.
Aby usunąć zasoby Azure i usunąć kod źródłowy, uruchom następujące polecenie interfejsu wiersza polecenia dewelopera Azure:
azd down --purge
Wyczyść GitHub Codespaces
Usunięcie środowiska GitHub Codespaces gwarantuje, że możesz zmaksymalizować ilość bezpłatnych godzin na godziny, które otrzymasz dla twojego konta.
Ważne
Aby uzyskać więcej informacji na temat uprawnień konta GitHub, zobacz GitHub Codespaces miesięczne zawarte godziny zapasowe i rdzeniowe.
Zaloguj się do pulpitu nawigacyjnego GitHub Codespaces.
Znajdź aktualnie uruchomione usługi Codespaces pochodzące z repozytorium
Azure-Samples/openai-chat-app-quickstartGitHub.Otwórz menu kontekstowe dla przestrzeni kodu, a następnie wybierz pozycję Usuń.
Zaloguj się do pulpitu nawigacyjnego GitHub Codespaces.
Znajdź aktualnie uruchomione usługi Codespaces pochodzące z repozytorium
Azure-Samples/openai-chat-app-quickstart-dotnetGitHub.Otwórz menu kontekstowe dla przestrzeni kodu, a następnie wybierz pozycję Usuń.
Zaloguj się do pulpitu nawigacyjnego GitHub Codespaces.
Znajdź aktualnie uruchomione usługi Codespaces pochodzące z repozytorium
Azure-Samples/openai-chat-app-quickstart-javascriptGitHub.Otwórz menu kontekstowe dla przestrzeni kodu, a następnie wybierz pozycję Usuń.
Uzyskaj pomoc
Jeśli problem nie został rozwiązany, zgłoś swój problem do sekcji Issues w repozytorium.
Następne kroki
Jeśli problem nie został rozwiązany, zgłoś swój problem do sekcji Issues w repozytorium.
Jeśli problem nie został rozwiązany, zgłoś swój problem do sekcji Issues w repozytorium.