Rozpoczynanie pracy z blokiem konstrukcyjnym zabezpieczeń usługi Azure OpenAI
W tym artykule przedstawiono sposób tworzenia i używania przykładowego bloku konstrukcyjnego zabezpieczeń usługi Azure OpenAI. Celem jest zademonstrowanie aprowizacji konta usługi Azure OpenAI przy użyciu kontroli dostępu opartej na rolach (RBAC) na potrzeby uwierzytelniania bez klucza (Microsoft Entra ID) w usłudze Azure OpenAI. Ten przykład aplikacji do czatów zawiera również całą infrastrukturę i konfigurację wymaganą do aprowizacji zasobów usługi Azure OpenAI oraz wdrażania aplikacji w usłudze Azure Container Apps przy użyciu interfejsu wiersza polecenia dla deweloperów platformy Azure.
Postępując zgodnie z instrukcjami w tym artykule, wykonasz następujące czynności:
- Wdróż bezpieczną aplikację czatu kontenera platformy Azure.
- Użyj tożsamości zarządzanej na potrzeby dostępu azure OpenAI.
- Porozmawiaj z usługą 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 platformy Azure. Aplikacja używa tożsamości zarządzanej za pośrednictwem identyfikatora Entra firmy Microsoft do uwierzytelniania za pomocą usługi Azure OpenAI zamiast klucza interfejsu API. Aplikacja do czatu używa usługi Azure OpenAI do generowania odpowiedzi na komunikaty użytkowników.
Architektura aplikacji opiera się na następujących usługach i składnikach:
- Usługa Azure OpenAI reprezentuje dostawcę sztucznej inteligencji, do którego wysyłamy zapytania użytkownika.
- Usługa Azure Container Apps to środowisko kontenera, w którym jest hostowana aplikacja.
- Tożsamość zarządzana pomaga nam zapewnić najlepsze zabezpieczenia w klasie i wyeliminować wymaganie, aby jako deweloper bezpiecznie zarządzać wpisem tajnym.
- Pliki Bicep do aprowizowania zasobów platformy Azure, w tym azure OpenAI, Azure Container Apps, Azure Container Registry, Azure Log Analytics i ról RBAC.
- Protokół Microsoft AI Chat Protocol udostępnia standardowe kontrakty interfejsu API w rozwiązaniach i językach sztucznej inteligencji. Aplikacja do czatu jest zgodna z protokołem Microsoft AI Chat Protocol, który umożliwia uruchamianie aplikacji ewaluacyjnej względem dowolnej aplikacji czatu zgodnej z protokołem.
- Kwart języka Python, który używa
openai
pakietu do generowania odpowiedzi na komunikaty użytkownika. - Podstawowy fronton HTML/JavaScript, który przesyła strumieniowo odpowiedzi z zaplecza przy użyciu linii JSON za pośrednictwem elementu ReadableStream.
- Aplikacja internetowa platformy Blazor, która używa pakietu NuGet Azure.AI.OpenAI do generowania odpowiedzi na komunikaty użytkowników.
- Aplikacja internetowa TypeScript, która używa pakietu npm openai do generowania odpowiedzi na komunikaty użytkowników.
Koszt
Próbując zachować możliwie niskie ceny w tym przykładzie, większość zasobów korzysta z warstwy cenowej podstawowa lub zużycie. Zmień poziom warstwy zgodnie z potrzebami na podstawie zamierzonego użycia. Aby zatrzymać naliczanie opłat, usuń zasoby po zakończeniu pracy z artykułem.
Dowiedz się więcej o kosztach w repozytorium przykładowym.
Dowiedz się więcej o kosztach w repozytorium przykładowym.
Dowiedz się więcej o kosztach w repozytorium przykładowym.
Wymagania wstępne
Środowisko kontenera deweloperskiego jest dostępne ze wszystkimi zależnościami wymaganymi do ukończenia tego artykułu. Kontener deweloperski można uruchomić w usłudze GitHub Codespaces (w przeglądarce) lub lokalnie przy użyciu programu Visual Studio Code.
Aby użyć tego artykułu, należy spełnić następujące wymagania wstępne:
Subskrypcja platformy Azure — utwórz bezpłatnie
Uprawnienia konta platformy Azure — Twoje konto platformy Azure musi mieć
Microsoft.Authorization/roleAssignments/write
uprawnienia, takie jak administrator dostępu użytkowników lub właściciel.Konto usługi 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ł.
Usługa GitHub Codespaces uruchamia kontener deweloperski zarządzany przez usługę GitHub za pomocą programu Visual Studio Code dla sieci Web jako interfejsu użytkownika. W przypadku najprostszego środowiska programistycznego użyj usługi GitHub Codespaces, aby wstępnie zainstalować odpowiednie narzędzia deweloperskie i zależności, aby ukończyć ten artykuł.
Ważne
Wszystkie konta usługi 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 GitHub Codespaces monthly included storage and core hours (Miesięczne miejsca do magazynowania i godzin rdzeni usługi GitHub Codespaces).
Wykonaj poniższe kroki, aby utworzyć nową usługę GitHub Codespace w main
gałęzi Azure-Samples/openai-chat-app-quickstart
repozytorium 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 pozycję Utwórz nową przestrzeń kodu
Poczekaj na uruchomienie przestrzeni kodu. Ten proces uruchamiania może potrwać kilka minut.
Zaloguj się na platformie Azure przy użyciu interfejsu wiersza polecenia dla deweloperów platformy Azure w terminalu w dolnej części ekranu.
azd auth login
Skopiuj kod z terminalu, a następnie wklej go w przeglądarce. Postępuj zgodnie z instrukcjami, aby uwierzytelnić się przy użyciu konta platformy Azure.
Pozostałe zadania w tym artykule mają miejsce w kontekście tego kontenera deweloperskiego.
Wykonaj poniższe kroki, aby utworzyć nową usługę GitHub Codespace w main
gałęzi Azure-Samples/openai-chat-app-quickstart-dotnet
repozytorium 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 pozycję Utwórz przestrzeń kodu
Poczekaj na uruchomienie przestrzeni kodu. Ten proces uruchamiania może potrwać kilka minut.
Zaloguj się na platformie Azure przy użyciu interfejsu wiersza polecenia dla deweloperów platformy Azure w terminalu w dolnej części ekranu.
azd auth login
Skopiuj kod z terminalu, a następnie wklej go w przeglądarce. Postępuj zgodnie z instrukcjami, aby uwierzytelnić się przy użyciu konta platformy Azure.
Pozostałe zadania w tym artykule mają miejsce w kontekście tego kontenera deweloperskiego.
Wykonaj poniższe kroki, aby utworzyć nową usługę GitHub Codespace w main
gałęzi Azure-Samples/openai-chat-app-quickstart-javascript
repozytorium 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 pozycję Utwórz nową przestrzeń kodu
Poczekaj na uruchomienie przestrzeni kodu. Ten proces uruchamiania może potrwać kilka minut.
Zaloguj się na platformie Azure przy użyciu interfejsu wiersza polecenia dla deweloperów platformy Azure w terminalu w dolnej części ekranu.
azd auth login
Skopiuj kod z terminalu, a następnie wklej go w przeglądarce. Postępuj zgodnie z instrukcjami, aby uwierzytelnić się przy użyciu konta platformy 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 i konfiguracji dla wdrożenia aplikacji czatu na platformie Azure. W poniższych krokach przedstawiono przykładowy proces wdrażania aplikacji czatu platformy Azure.
Wdrażanie aplikacji czatu na platformie Azure
Ważne
Zasoby platformy Azure utworzone w tej sekcji generują natychmiastowe koszty. Te zasoby mogą naliczać koszty nawet w przypadku przerwania działania polecenia przed jego pełnym wykonaniem.
Uruchom następujące polecenie interfejsu wiersza polecenia dla deweloperów platformy Azure na potrzeby aprowizacji zasobów platformy Azure i wdrożenia kodu źródłowego:
azd up
Użyj poniższej tabeli, aby odpowiedzieć na monity:
Monit Odpowiedź Nazwa środowiska Zachowaj krótkie i małe litery. 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órych 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 web
etykietą, 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 usługi Azure OpenAI i zostanie wyświetlony wynik.
Eksplorowanie przykładowego kodu
Chociaż interfejsy OpenAI i Azure OpenAI Service opierają się na wspólnej bibliotece klienta języka Python, podczas korzystania z punktów końcowych usługi Azure OpenAI potrzebne są niewielkie zmiany kodu. Zobaczmy, jak ten przykład konfiguruje uwierzytelnianie bez klucza za pomocą identyfikatora Entra firmy Microsoft i komunikuje się z usługą 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 do utworzenia asynchronicznego przepływu uwierzytelniania firmy Microsoft Entra.
Poniższy fragment kodu używa AZURE_CLIENT_ID
azd
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
azd
Zmienne środowiskowe zasobu są aprowizowane podczas azd
wdrażania aplikacji.
Poniższy fragment kodu używa AZURE_TENANT_ID
azd
zmiennej środowiskowej zasobu, aby utworzyć wystąpienie azureDeveloperCliCredential , które może uwierzytelniać się za pomocą bieżącej dzierżawy firmy Microsoft Entra.
azure_dev_cli_credential = AzureDeveloperCliCredential(tenant_id=os.getenv("AZURE_TENANT_ID"), process_timeout=60)
Biblioteka klienta tożsamości platformy Azure udostępnia poświadczenia — klasy publiczne, które implementują protokół TokenCredential biblioteki Azure Core. Poświadczenie reprezentuje odrębny przepływ uwierzytelniania na potrzeby uzyskiwania tokenu dostępu z identyfikatora Entra firmy Microsoft. Te poświadczenia można połączyć w łańcuch, aby utworzyć uporządkowaną sekwencję mechanizmów uwierzytelniania, które mają być podejmowane.
Poniższy fragment kodu tworzy ChainedTokenCredential
obiekt przy użyciu elementu ManagedIdentityCredential
i AzureDeveloperCliCredential
:
- Element
ManagedIdentityCredential
jest używany dla usług Azure Functions i aplikacja systemu Azure Service. Tożsamość zarządzana przypisana przez użytkownika jest obsługiwana przez przekazanie elementuclient_id
doManagedIdentityCredential
. - Element
AzureDeveloperCliCredential
jest używany do programowania lokalnego. Została ona wcześniej ustawiona na podstawie dzierżawy firmy Microsoft Entra do użycia.
azure_credential = ChainedTokenCredential(
user_assigned_managed_identity_credential,
azure_dev_cli_credential
)
Napiwek
Kolejność poświadczeń jest ważna, ponieważ jest używany pierwszy prawidłowy token dostępu firmy Microsoft Entra. Aby uzyskać więcej informacji, zapoznaj się z artykułem ChainedTokenCredential Overview (Omówienie elementu ChainedTokenCredential).
Poniższy fragment kodu pobiera dostawcę tokenu usługi Azure OpenAI na podstawie wybranego poświadczenia platformy Azure. Ta wartość jest uzyskiwana przez wywołanie azure.identity.aio.get_bearer_token_provider z dwoma argumentami:
azure_credential
: wystąpienieChainedTokenCredential
utworzone 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
zmienne środowiskowe i AZURE_OPENAI_CHATGPT_DEPLOYMENT
azd
środowiskowe zasobów, które są aprowidowane podczas azd
wdrażania aplikacji. Błąd jest zgłaszany, jeśli wartość nie jest obecna.
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")
Ten fragment kodu inicjuje klienta usługi Azure OpenAI, ustawiając api_version
parametry , azure_endpoint
i 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,
)
Poniższy wiersz ustawia nazwę wdrożenia modelu usługi Azure OpenAI do użycia w wywołaniach interfejsu API:
bp.openai_model = os.getenv("AZURE_OPENAI_CHATGPT_DEPLOYMENT")
Uwaga
Interfejs OpenAI używa argumentu kluczowego model
, aby określić, który model ma być używany. Usługa Azure OpenAI ma koncepcję unikatowych wdrożeń modelu. W przypadku korzystania z usługi Azure OpenAI model
należy odwołać się do podstawowej nazwy wdrożenia wybranej podczas wdrażania modelu usługi Azure OpenAI.
Po zakończeniu tej funkcji klient jest prawidłowo skonfigurowany i gotowy do interakcji z usługami Azure OpenAI.
Strumień odpowiedzi przy użyciu klienta i modelu OpenAI
Element response_stream
obsługuje wywołanie ukończenia czatu w trasie. Poniższy fragment kodu pokazuje, jak openai_client
i model
są używane.
async def response_stream():
# This sends all messages, so API request may exceed token limits
all_messages = [
{"role": "system", "content": "You are a helpful assistant."},
] + request_messages
chat_coroutine = bp.openai_client.chat.completions.create(
# Azure Open AI takes the deployment name as the model name
model=bp.openai_model,
messages=all_messages,
stream=True,
)
Poznawanie przykładowego kodu
Aplikacje platformy .NET korzystają z biblioteki klienta Azure.AI.OpenAI w celu komunikowania się z usługami Azure OpenAI, które są zależne od biblioteki OpenAI . Przykładowa aplikacja konfiguruje uwierzytelnianie bez klucza przy użyciu identyfikatora Entra firmy Microsoft do komunikowania się z usługą Azure OpenAI.
Konfigurowanie uwierzytelniania i rejestracji usługi
W tym przykładzie w pliku skonfigurowano program.cs
uwierzytelnianie bez klucza. Poniższy fragment kodu używa zmiennej środowiskowej ustawionej AZURE_CLIENT_ID
przez azd
program w celu utworzenia wystąpienia ManagedIdentityCredential umożliwiającego uwierzytelnianie za pomocą tożsamości zarządzanej przypisanej przez użytkownika.
var userAssignedIdentityCredential =
new ManagedIdentityCredential(builder.Configuration.GetValue<string>("AZURE_CLIENT_ID"));
Uwaga
azd
Zmienne środowiskowe zasobu są aprowizowane podczas azd
wdrażania aplikacji.
Poniższy fragment kodu używa zmiennej środowiskowej ustawionej AZURE_TENANT_ID
przez azd
program w celu utworzenia wystąpienia azureDeveloperCliCredential , które może uwierzytelniać się lokalnie przy użyciu konta zalogowanego do azd
usługi .
var azureDevCliCredential = new AzureDeveloperCliCredential(
new AzureDeveloperCliCredentialOptions()
{
TenantId = builder.Configuration.GetValue<string>("AZURE_TENANT_ID")
});
Biblioteka klienta tożsamości platformy Azure 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 identyfikatora Entra firmy Microsoft. Te poświadczenia można połączyć w łańcuch za pomocą polecenia ChainedTokenCredential
, aby utworzyć uporządkowaną sekwencję mechanizmów uwierzytelniania, które mają być podejmowane.
Poniższy fragment kodu rejestruje AzureOpenAIClient
iniekcję zależności i tworzy obiekt ChainedTokenCredential
przy użyciu elementu ManagedIdentityCredential
i AzureDeveloperCliCredential
:
- Element
ManagedIdentityCredential
jest używany dla usług Azure Functions i aplikacja systemu Azure Service. Tożsamość zarządzana przypisana przez użytkownika jest obsługiwana przy użyciuAZURE_CLIENT_ID
elementu podanego w plikuManagedIdentityCredential
. - Element
AzureDeveloperCliCredential
jest używany do programowania lokalnego. Została ona wcześniej ustawiona na podstawie dzierżawy firmy Microsoft Entra do użycia.
builder.Services.AddAzureClients(
clientBuilder => {
clientBuilder.AddClient<AzureOpenAIClient, AzureOpenAIClientOptions>((options, _, _)
=> new AzureOpenAIClient(
new Uri(endpoint),
new ChainedTokenCredential(
userAssignedIdentityCredential, azureDevCliCredential), options));
});
Napiwek
Kolejność poświadczeń jest ważna, ponieważ jest używany pierwszy prawidłowy token dostępu firmy Microsoft Entra. Aby uzyskać więcej informacji, zapoznaj się z artykułem ChainedTokenCredential Overview (Omówienie elementu ChainedTokenCredential).
Uzyskiwanie ukończenia czatu przy użyciu klienta usługi Azure OpenAI
Aplikacja internetowa platformy Blazor wprowadza zarejestrowaną AzureOpenAIClient
w górnej Home.Razor
części składnika:
@inject AzureOpenAIClient azureOpenAIClient
Po przesłaniu formularza AzureOpenAIClient
użytkownik wysyła monit do modelu OpenAI w celu wygenerowania ukończenia:
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 interfejsy OpenAI i Azure OpenAI Service opierają się na bibliotece klienta openai (typowej bibliotece klienta Języka JavaScript), podczas korzystania z punktów końcowych usługi Azure OpenAI potrzebne są niewielkie zmiany kodu. Zobaczmy, jak ten przykład konfiguruje uwierzytelnianie bez klucza za pomocą identyfikatora Entra firmy Microsoft i komunikuje się z usługą Azure OpenAI.
Uwierzytelnianie bez klucza dla każdego środowiska
Biblioteka klienta tożsamości platformy Azure 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 identyfikatora Entra firmy Microsoft. Te poświadczenia można połączyć w łańcuch za pomocą polecenia ChainedTokenCredential
, aby utworzyć uporządkowaną sekwencję mechanizmów uwierzytelniania, które mają być podejmowane. 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
przedstawiono kilka funkcji zapewniających uwierzytelnianie bez klucza w usłudze Azure OpenAI.
Pierwsza funkcja , getChainedCredential()
zwraca pierwsze prawidłowe poświadczenia platformy 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 podjęto próbę 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.
- Podjęto próbę drugiego elementu AzureDeveloperCliCredential . Jest on konfigurowany, gdy programowanie loguje się za pomocą interfejsu wiersza polecenia
az login
platformy Azure .
Napiwek
Kolejność poświadczeń jest ważna, ponieważ jest używany pierwszy prawidłowy token dostępu firmy Microsoft Entra. Aby uzyskać więcej informacji, zapoznaj się z artykułem ChainedTokenCredential Overview (Omówienie elementu ChainedTokenCredential).
Uzyskiwanie tokenu elementu nośnego dla interfejsu OpenAI
Druga funkcja w pliku ./src/azure-authentication.ts
to getTokenProvider()
, która zwraca wywołanie zwrotne, które zapewnia token elementu nośnego o zakresie do punktu końcowego usług 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
metody do pobrania poświadczeń i zakresu, a następnie zwraca wywołanie zwrotne, które udostępnia token elementu nośnego.
Tworzenie uwierzytelnioowanego klienta usługi Azure OpenAI
Trzecia funkcja w pliku ./src/azure-authentication.ts
to getOpenAiClient()
, która zwraca klienta usługi 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 AzureOpenAI
klienta
Przesyłanie strumieniowe odpowiedzi na czat za pomocą usługi Azure OpenAI
Użyj następującej procedury obsługi tras Fastify w programie , ./src/openai-chat-api.ts
aby wysłać komunikat do usługi Azure OpenAI i przesłać strumieniowo 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 usługi Azure OpenAI. Ponieważ fragmenty strumienia są zwracane z usługi Azure OpenAI, element jest wysyłany do klienta.
Inne zagadnienia dotyczące zabezpieczeń
W tym artykule przedstawiono sposób użycia ChainedTokenCreadential
przykładu do uwierzytelniania w usłudze Azure OpenAI.
Przykład zawiera również akcję usługi GitHub, która skanuje pliki infrastruktury jako kodu i generuje raport zawierający wykryte problemy. Aby zapewnić dalsze najlepsze rozwiązania we własnym repozytorium, zalecamy, aby każda osoba tworząca rozwiązania na podstawie naszych szablonów zapewniła włączenie ustawienia skanowania wpisów tajnych usługi GitHub.
Rozważ inne środki zabezpieczeń, takie jak:
Ogranicz dostęp do odpowiedniego zestawu użytkowników aplikacji przy użyciu usługi Microsoft Entra.
Ochrona wystąpienia usługi Azure Container Apps za pomocą zapory i/lub sieci wirtualnej.
Czyszczenie zasobów
Czyszczenie zasobów platformy Azure
Zasoby platformy Azure utworzone w tym artykule są rozliczane z subskrypcją platformy 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 platformy Azure i usunąć kod źródłowy, uruchom następujące polecenie interfejsu wiersza polecenia dla deweloperów platformy Azure:
azd down --purge
Czyszczenie usługi GitHub Codespaces
Usunięcie środowiska Usługi GitHub Codespaces gwarantuje, że możesz zmaksymalizować ilość bezpłatnych godzin na godziny korzystania z konta.
Ważne
Aby uzyskać więcej informacji na temat uprawnień konta usługi GitHub, zobacz Artykuł GitHub Codespaces monthly included storage and core hours (Miesięczne miejsca do magazynowania i godzin rdzeni w usłudze GitHub).
Zaloguj się do pulpitu nawigacyjnego usługi GitHub Codespaces (https://github.com/codespaces).
Znajdź aktualnie uruchomione środowisko Codespaces pochodzące z
Azure-Samples/openai-chat-app-quickstart
repozytorium GitHub.Otwórz menu kontekstowe dla przestrzeni kodu, a następnie wybierz pozycję Usuń.
Zaloguj się do pulpitu nawigacyjnego usługi GitHub Codespaces (https://github.com/codespaces).
Znajdź aktualnie uruchomione środowisko Codespaces pochodzące z
Azure-Samples/openai-chat-app-quickstart-dotnet
repozytorium GitHub.Otwórz menu kontekstowe dla przestrzeni kodu, a następnie wybierz pozycję Usuń.
Zaloguj się do pulpitu nawigacyjnego usługi GitHub Codespaces (https://github.com/codespaces).
Znajdź aktualnie uruchomione środowisko Codespaces pochodzące z
Azure-Samples/openai-chat-app-quickstart-javascript
repozytorium GitHub.Otwórz menu kontekstowe dla przestrzeni kodu, a następnie wybierz pozycję Usuń.
Uzyskaj pomoc
Jeśli problem nie został rozwiązany, zarejestruj problem w repozytorium Problemy.
Następne kroki
Jeśli problem nie został rozwiązany, zarejestruj problem w repozytorium Problemy.
Jeśli problem nie został rozwiązany, zarejestruj problem w repozytorium Problemy.