Erste Schritte mit dem Azure OpenAI-Sicherheitsbaustein
In diesem Artikel erfahren Sie, wie Sie das Azure OpenAI-Sicherheitsbausteinebeispiel erstellen und verwenden. Der Zweck besteht darin, die Bereitstellung von Azure OpenAI-Konten mit rollenbasierter Zugriffssteuerung (RBAC) für die Authentifizierung ohne Schlüssel (Microsoft Entra ID) für Azure OpenAI zu demonstrieren. Dieses Beispiel für Eine Chat-App enthält auch alle Infrastruktur und Konfiguration, die für die Bereitstellung von Azure OpenAI-Ressourcen und die Bereitstellung der App in Azure-Container-Apps mit der Azure Developer CLI erforderlich ist.
Indem Sie die Anweisungen in diesem Artikel befolgen, werden Sie:
- Stellen Sie eine sichere Azure Container-Chat-App bereit.
- Verwenden Sie verwaltete Identität für den Azure OpenAI-Zugriff.
- Chatten Sie mit einem Azure OpenAI Large Language Model (LLM) mithilfe der OpenAI-Bibliothek.
Nachdem Sie das Verfahren in diesem Artikel abgeschlossen haben, können Sie mit dem Ändern des neuen Projekts mit Ihrem benutzerdefinierten Code und Ihren Daten beginnen.
Hinweis
In diesem Artikel wird mindestens eine KI-App-Vorlage als Grundlage für die Beispiele und Anleitungen im Artikel verwendet. KI-App-Vorlagen bieten Ihnen gut gepflegte, einfach bereitzustellende Referenzimplementierungen, die helfen, einen qualitativ hochwertigen Ausgangspunkt für Ihre KI-Apps zu gewährleisten.
Übersicht über die Architektur
Eine einfache Architektur der Chat-App wird im folgenden Diagramm gezeigt:
Die Chat-App wird als Azure-Container-App ausgeführt. Die App verwendet verwaltete Identität über Microsoft Entra ID, um sich mit Azure OpenAI zu authentifizieren, anstatt mit einem API-Schlüssel. Die Chat-App verwendet Azure OpenAI, um Antworten auf Benutzernachrichten zu generieren.
Die Anwendungsarchitektur basiert auf den folgenden Diensten und Komponenten:
- Azure OpenAI stellt den KI-Anbieter dar, an den die Abfragen des Benutzers gesendet werden.
- Azure Container Apps ist die Containerumgebung, in der die Anwendung gehostet wird.
- Managed Identity hilft uns dabei, eine erstklassige Sicherheit zu gewährleisten und die Anforderung für Sie als Entwickler zu beseitigen, einen geheimen Schlüssel sicher zu verwalten.
- Bicep-Dateien für die Bereitstellung von Azure-Ressourcen, einschließlich Azure OpenAI, Azure Container Apps, Azure Container Registry, Azure Log Analytics und RBAC-Rollen.
- Das Microsoft KI-Chat-Protokoll bietet standardisierte API-Verträge über KI-Lösungen und Sprachen hinweg. Die Chat-App entspricht dem Microsoft KI-Chat-Protokoll, mit dem die Evaluierungs-App für jede Chat-App ausgeführt werden kann, die dem Protokoll entspricht.
- Ein Python Quart , das das
openai
Paket verwendet, um Antworten auf Benutzernachrichten zu generieren. - Ein einfaches HTML/JavaScript-Frontend, das Antworten aus dem Back-End mithilfe von JSON-Zeilen über einen ReadableStream streamt.
- Eine Blazor-Web-App, die das Azure.AI.OpenAI NuGet-Paket verwendet, um Antworten auf Benutzernachrichten zu generieren.
- Eine TypeScript-Web-App, die das openai npm-Paket verwendet, um Antworten auf Benutzernachrichten zu generieren.
Kosten
Bei dem Versuch, die Preise in diesem Beispiel so niedrig wie möglich zu halten, verwenden die meisten Ressourcen ein Einfaches oder Verbrauchspreisniveau. Ändern Sie die Ebenenebene je nach Bedarf basierend auf Ihrer beabsichtigten Verwendung. Löschen Sie die Ressourcen, wenn Sie mit dem Artikel fertig sind, um die Anfallenden Gebühren zu beenden.
Weitere Informationen zu den Kosten im Beispielrepository finden Sie hier.
Weitere Informationen zu den Kosten im Beispielrepository finden Sie hier.
Weitere Informationen zu den Kosten im Beispielrepository finden Sie hier.
Voraussetzungen
Eine Entwicklungscontainerumgebung ist mit allen Abhängigkeiten verfügbar, die zum Abschließen dieses Artikels erforderlich sind. Sie können den Entwicklungscontainer in GitHub Codespaces (in einem Browser) oder lokal mit Visual Studio Code ausführen.
Um diesen Artikel zu verwenden, müssen Sie die folgenden Voraussetzungen erfüllen:
Azure-Abonnement: Kostenloses Azure-Konto
Azure-Kontoberechtigungen – Ihr Azure-Konto muss
Microsoft.Authorization/roleAssignments/write
über Berechtigungen verfügen, z . B. Benutzerzugriffsadministrator oder Besitzer.GitHub -Konto
Öffnen Sie die Entwicklungsumgebung
Verwenden Sie die folgenden Anweisungen, um eine vorkonfigurierte Entwicklungsumgebung bereitzustellen, die alle erforderlichen Abhängigkeiten enthält, um diesen Artikel abzuschließen.
GitHub Codespaces führt einen von GitHub verwalteten Entwicklungscontainer mit Visual Studio Code für Web als Benutzeroberfläche aus. Verwenden Sie für die einfachste Entwicklungsumgebung GitHub Codespaces, damit Sie die richtigen Entwicklertools und Abhängigkeiten vorinstalliert haben, um diesen Artikel abzuschließen.
Wichtig
Alle GitHub-Konten können Codespaces für bis zu 60 Stunden pro Monat mit zwei Kerninstanzen kostenlos verwenden. Weitere Informationen finden Sie im Artikel zu monatlich enthaltener Speicherkapazität und Kernstunden in GitHub Codespaces.
Führen Sie die folgenden Schritte aus, um einen neuen GitHub Codespace auf der main
Verzweigung des Azure-Samples/openai-chat-app-quickstart
GitHub-Repositorys zu erstellen.
Klicken Sie mit der rechten Maustaste auf die folgende Schaltfläche, und wählen Sie im neuen Fenster "Link öffnen" aus. Mit dieser Aktion können Sie die Entwicklungsumgebung und die Dokumentation zur Überprüfung zur Verfügung stellen.
Überprüfen Sie auf der Seite "Codespace erstellen" die Option "Neuen Codespace erstellen", und wählen Sie dann "Neuen Codespace erstellen" aus.
Warten Sie den Start des Codespaces ab. Dieser Startvorgang kann einige Minuten dauern.
Melden Sie sich mit der Azure Developer CLI am unteren Bildschirmrand bei Azure an.
azd auth login
Kopieren Sie den Code vom Terminal und fügen Sie ihn dann in einen Browser ein. Befolgen Sie die Anweisungen zum Authentifizieren mit Ihrem Azure-Konto.
Die verbleibenden Aufgaben in diesem Artikel finden im Kontext dieses Entwicklungscontainers statt.
Führen Sie die folgenden Schritte aus, um einen neuen GitHub Codespace auf der main
Verzweigung des Azure-Samples/openai-chat-app-quickstart-dotnet
GitHub-Repositorys zu erstellen.
Klicken Sie mit der rechten Maustaste auf die folgende Schaltfläche, und wählen Sie im neuen Fenster "Link öffnen" aus. Mit dieser Aktion können Sie die Entwicklungsumgebung und die Dokumentation zur Überprüfung zur Verfügung stellen.
Überprüfen Sie auf der Seite "Codespace erstellen" die Option "Codespace erstellen", und wählen Sie dann "Codespace erstellen" aus.
Warten Sie den Start des Codespaces ab. Dieser Startvorgang kann einige Minuten dauern.
Melden Sie sich mit der Azure Developer CLI am unteren Bildschirmrand bei Azure an.
azd auth login
Kopieren Sie den Code vom Terminal und fügen Sie ihn dann in einen Browser ein. Befolgen Sie die Anweisungen zum Authentifizieren mit Ihrem Azure-Konto.
Die verbleibenden Aufgaben in diesem Artikel finden im Kontext dieses Entwicklungscontainers statt.
Führen Sie die folgenden Schritte aus, um einen neuen GitHub Codespace auf der main
Verzweigung des Azure-Samples/openai-chat-app-quickstart-javascript
GitHub-Repositorys zu erstellen.
- Klicken Sie mit der rechten Maustaste auf die folgende Schaltfläche, und wählen Sie im neuen Fenster "Link öffnen" aus. Mit dieser Aktion können Sie die Entwicklungsumgebung und die Dokumentation zur Überprüfung zur Verfügung stellen.
Überprüfen Sie auf der Seite "Codespace erstellen" die Option "Neuen Codespace erstellen", und wählen Sie dann "Neuen Codespace erstellen" aus.
Warten Sie den Start des Codespaces ab. Dieser Startvorgang kann einige Minuten dauern.
Melden Sie sich mit der Azure Developer CLI am unteren Bildschirmrand bei Azure an.
azd auth login
Kopieren Sie den Code vom Terminal und fügen Sie ihn dann in einen Browser ein. Befolgen Sie die Anweisungen zum Authentifizieren mit Ihrem Azure-Konto.
Die verbleibenden Aufgaben in diesem Artikel finden im Kontext dieses Entwicklungscontainers statt.
Bereitstellen und Ausführen
Das Beispiel-Repository enthält alle Code- und Konfigurationsdateien für die Azure-Bereitstellung von Chat-Apps. Die folgenden Schritte führen Sie durch den Azure-Bereitstellungsprozess der Beispielchat-App.
Bereitstellen einer Chat-App in Azure
Wichtig
Azure-Ressourcen, die in diesem Abschnitt erstellt wurden, verursachen sofortige Kosten. Diese Ressourcen können Kosten verursachen, selbst wenn Sie den Befehl unterbrechen, bevor er vollständig ausgeführt wird.
Führen Sie den folgenden Azure Developer CLI-Befehl für die Bereitstellung von Azure-Ressourcen und die Quellcodebereitstellung aus:
azd up
Gehen Sie zum Beantworten der Eingabeaufforderungen gemäß der folgenden Tabelle vor:
Prompt Antwort Umgebungsname Halten Sie dies kurz, und verwenden Sie nur Kleinbuchstaben. Fügen Sie Ihren Namen oder Alias hinzu. Beispiel: secure-chat
. Er wird als Teil des Ressourcengruppennamens verwendet.Abonnement Wählen Sie das Abonnement aus, in dem Sie die Ressourcen erstellen möchten. Standort (für Hosting) Wählen Sie aus der Liste einen Standort in Ihrer Nähe aus. Standort für das OpenAI-Modell Wählen Sie aus der Liste einen Standort in Ihrer Nähe aus. Wenn derselbe Speicherort wie Ihr erster Speicherort verfügbar ist, wählen Sie diesen Speicherort aus. Warten Sie, bis die App bereitgestellt wird. Die Bereitstellung dauert in der Regel zwischen 5 und 10 Minuten, bis die Bereitstellung abgeschlossen ist.
Verwenden der Chat-App zum Stellen von Fragen zum Großen Sprachmodell
Das Terminal zeigt eine URL nach erfolgreicher Anwendungsbereitstellung an.
Wählen Sie diese URL aus, die als
Deploying service web
beschriftet ist, um die Chatanwendung in einem Browser zu öffnen.Geben Sie im Browser eine Frage wie "Warum ist verwaltete Identität besser als Schlüssel?" ein.
Die Antwort stammt aus Azure OpenAI und das Ergebnis wird angezeigt.
Erkunden des Beispielcodes
Während OpenAI und Azure OpenAI Service auf eine allgemeine Python-Clientbibliothek angewiesen sind, werden kleine Codeänderungen bei Verwendung von Azure OpenAI-Endpunkten benötigt. Sehen wir uns an, wie in diesem Beispiel die schlüssellose Authentifizierung mit Microsoft Entra ID konfiguriert und mit Azure OpenAI kommuniziert wird.
Konfigurieren der Authentifizierung mit verwalteter Identität
In diesem Beispiel beginnt die Datei mit der Konfiguration der src\quartapp\chat.py
schlüssellosen Authentifizierung.
Der folgende Codeausschnitt verwendet das Modul azure.identity.aio , um einen asynchronen Microsoft Entra-Authentifizierungsfluss zu erstellen.
Der folgende Codeausschnitt verwendet die AZURE_CLIENT_ID
azd
Umgebungsvariable, um eine ManagedIdentityCredential-Instanz zu erstellen, die über vom Benutzer zugewiesene verwaltete Identität authentifiziert werden kann.
user_assigned_managed_identity_credential = ManagedIdentityCredential(client_id=os.getenv("AZURE_CLIENT_ID"))
Hinweis
Die azd
Ressourcenumgebungsvariablen werden während der azd
App-Bereitstellung bereitgestellt.
Der folgende Codeausschnitt verwendet AZURE_TENANT_ID
azd
die Ressourcenumgebungsvariable, um eine AzureDeveloperCliCredential-Instanz zu erstellen, die mit dem aktuellen Microsoft Entra-Mandanten authentifiziert werden kann.
azure_dev_cli_credential = AzureDeveloperCliCredential(tenant_id=os.getenv("AZURE_TENANT_ID"), process_timeout=60)
Die Azure Identity-Clientbibliothek stellt Anmeldeinformationen bereit – öffentliche Klassen, die das TokenCredential-Protokoll der Azure Core-Bibliothek implementieren. Anmeldeinformationen stellen einen eindeutigen Authentifizierungsfluss zum Abrufen eines Zugriffstokens aus der Microsoft Entra-ID dar. Diese Anmeldedaten können miteinander verkettet werden, um eine geordnete Abfolge von Authentifizierungsmechanismen zu bilden, die versucht werden sollen.
Der folgende Codeausschnitt erstellt eine using a ChainedTokenCredential
ManagedIdentityCredential
und eine AzureDeveloperCliCredential
:
- Dies
ManagedIdentityCredential
wird für Azure-Funktionen und Azure-App-Dienst verwendet. Eine vom Benutzer zugewiesene verwaltete Identität wird durch übergeben anclient_id
ManagedIdentityCredential
. - Dies
AzureDeveloperCliCredential
wird für die lokale Entwicklung verwendet. Sie wurde zuvor basierend auf dem Microsoft Entra-Mandanten festgelegt, der verwendet werden soll.
azure_credential = ChainedTokenCredential(
user_assigned_managed_identity_credential,
azure_dev_cli_credential
)
Tipp
Die Reihenfolge der Anmeldeinformationen ist wichtig, da das erste gültige Microsoft Entra-Zugriffstoken verwendet wird. Weitere Informationen finden Sie im Artikel "ChainedTokenCredential Overview" .
Der folgende Codeausschnitt ruft den Azure OpenAI-Tokenanbieter basierend auf den ausgewählten Azure-Anmeldeinformationen ab. Dieser Wert wird durch Aufrufen der azure.identity.aio.get_bearer_token_provider mit zwei Argumenten abgerufen:
azure_credential
: DieChainedTokenCredential
zuvor erstellte Instanz, um die Anforderung zu authentifizieren.https://cognitiveservices.azure.com/.default
: Erforderlich für einen oder mehrere Bearertokenbereiche. In diesem Fall der Azure Cognitive Services-Endpunkt .
token_provider = get_bearer_token_provider(
azure_credential, "https://cognitiveservices.azure.com/.default"
)
In den folgenden Zeilen werden die erforderlichen AZURE_OPENAI_ENDPOINT
Und AZURE_OPENAI_CHATGPT_DEPLOYMENT
azd
Ressourcenumgebungsvariablen überprüft, die während der azd
App-Bereitstellung bereitgestellt werden. Wenn kein Wert vorhanden ist, wird ein Fehler ausgelöst.
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")
Dieser Codeausschnitt initialisiert den Azure OpenAI-Client, legt die api_version
Parameter und azure_endpoint
azure_ad_token_provider
(client_args
) fest:
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,
)
In der folgenden Zeile wird der Bereitstellungsname des Azure OpenAI-Modells für die Verwendung in API-Aufrufen festgelegt:
bp.openai_model = os.getenv("AZURE_OPENAI_CHATGPT_DEPLOYMENT")
Hinweis
OpenAI verwendet das Schlüsselwortargument model
für die Angabe, welches Modell verwendet werden soll. Azure OpenAI verfügt über das Konzept einzigartiger Modellimplementierungen. Wenn Sie Azure OpenAI verwenden, sollten Sie sich auf den zugrunde liegenden Bereitstellungsnamen beziehen, model
der während der Azure OpenAI-Modellbereitstellung ausgewählt wurde.
Sobald diese Funktion abgeschlossen ist, ist der Client ordnungsgemäß konfiguriert und bereit für die Interaktion mit Azure OpenAI-Diensten.
Antwortdatenstrom mit dem OpenAI-Client und -Modell
Der response_stream
Chatabschlussanruf wird in der Route behandelt. Der folgende Codeausschnitt zeigt, wie openai_client
und model
verwendet wird.
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,
)
Untersuchen des Beispielcodes
.NET-Anwendungen basieren auf der Azure.AI.OpenAI-Clientbibliothek für die Kommunikation mit Azure OpenAI-Diensten, die eine Abhängigkeit von der OpenAI-Bibliothek benötigen. Die Beispiel-App konfiguriert die schlüssellose Authentifizierung mithilfe der Microsoft Entra-ID für die Kommunikation mit Azure OpenAI.
Konfigurieren der Authentifizierung und Dienstregistrierung
In diesem Beispiel wird die schlüssellose Authentifizierung in der program.cs
Datei konfiguriert. Der folgende Codeausschnitt verwendet die Umgebungsvariable, die AZURE_CLIENT_ID
azd
festgelegt wurde, um eine ManagedIdentityCredential-Instanz zu erstellen, die über vom Benutzer zugewiesene verwaltete Identität authentifiziert werden kann.
var userAssignedIdentityCredential =
new ManagedIdentityCredential(builder.Configuration.GetValue<string>("AZURE_CLIENT_ID"));
Hinweis
Die azd
Ressourcenumgebungsvariablen werden während der azd
App-Bereitstellung bereitgestellt.
Der folgende Codeausschnitt verwendet die Umgebungsvariable, die AZURE_TENANT_ID
azd
festgelegt wurde, um eine AzureDeveloperCliCredential-Instanzazd
zu erstellen, die lokal mithilfe des angemeldeten Kontos authentifiziert werden kann.
var azureDevCliCredential = new AzureDeveloperCliCredential(
new AzureDeveloperCliCredentialOptions()
{
TenantId = builder.Configuration.GetValue<string>("AZURE_TENANT_ID")
});
Die Azure Identity-Clientbibliothek stellt Anmeldeinformationsklassen bereit, die das TokenCredential-Protokoll der Azure Core-Bibliothek implementieren. Anmeldeinformationen stellen einen eindeutigen Authentifizierungsfluss zum Abrufen eines Zugriffstokens aus der Microsoft Entra-ID dar. Diese Anmeldeinformationen können mithilfe ChainedTokenCredential
einer sortierten Abfolge von Authentifizierungsmechanismen verkettet werden, die versucht werden sollen.
Der folgende Codeausschnitt registriert die AzureOpenAIClient
Abhängigkeitsinjektion und erstellt eine ChainedTokenCredential
Verwendung und ManagedIdentityCredential
eine AzureDeveloperCliCredential
:
- Dies
ManagedIdentityCredential
wird für Azure-Funktionen und Azure-App-Dienst verwendet. Eine vom Benutzer zugewiesene verwaltete Identität wird mithilfe derAZURE_CLIENT_ID
vom Benutzer bereitgestellten IdentitätManagedIdentityCredential
unterstützt. - Dies
AzureDeveloperCliCredential
wird für die lokale Entwicklung verwendet. Sie wurde zuvor basierend auf dem Microsoft Entra-Mandanten festgelegt, der verwendet werden soll.
builder.Services.AddAzureClients(
clientBuilder => {
clientBuilder.AddClient<AzureOpenAIClient, AzureOpenAIClientOptions>((options, _, _)
=> new AzureOpenAIClient(
new Uri(endpoint),
new ChainedTokenCredential(
userAssignedIdentityCredential, azureDevCliCredential), options));
});
Tipp
Die Reihenfolge der Anmeldeinformationen ist wichtig, da das erste gültige Microsoft Entra-Zugriffstoken verwendet wird. Weitere Informationen finden Sie im Artikel "ChainedTokenCredential Overview" .
Abrufen von Chatabschlussen mithilfe des Azure OpenAI-Clients
Die Blazor-Web-App fügt die registrierten AzureOpenAIClient
am Anfang der Home.Razor
Komponente ein:
@inject AzureOpenAIClient azureOpenAIClient
Wenn der Benutzer das Formular übermittelt, sendet der Benutzer seine AzureOpenAIClient
Aufforderung an das OpenAI-Modell, um einen Abschluss zu generieren:
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));
Untersuchen des Beispielcodes
Während OpenAI und Azure OpenAI Service auf eine Openai (allgemeine JavaScript-Clientbibliothek) angewiesen sind, werden kleine Codeänderungen bei Verwendung von Azure OpenAI-Endpunkten benötigt. Sehen wir uns an, wie in diesem Beispiel die schlüssellose Authentifizierung mit Microsoft Entra ID konfiguriert und mit Azure OpenAI kommuniziert wird.
Schlüssellose Authentifizierung für jede Umgebung
Die Azure Identity-Clientbibliothek stellt Anmeldeinformationsklassen bereit, die das TokenCredential-Protokoll der Azure Core-Bibliothek implementieren. Anmeldeinformationen stellen einen eindeutigen Authentifizierungsfluss zum Abrufen eines Zugriffstokens aus der Microsoft Entra-ID dar. Diese Anmeldeinformationen können mithilfe ChainedTokenCredential
einer sortierten Abfolge von Authentifizierungsmechanismen verkettet werden, die versucht werden sollen. Auf diese Weise können Sie denselben Code sowohl in Produktions- als auch in lokalen Entwicklungsumgebungen bereitstellen.
Konfigurieren der Authentifizierung mit verwalteter Identität
In diesem Beispiel bietet die ./src/azure-authentication.ts
Funktion mehrere Funktionen, um eine schlüssellose Authentifizierung für Azure OpenAI bereitzustellen.
Die erste Funktion , getChainedCredential()
gibt die ersten gültigen Azure-Anmeldeinformationen in der Kette zurück.
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 wird zuerst versucht. Sie ist mit der AZURE_CLIENT_ID Umgebungsvariable in der Produktionslaufzeit eingerichtet und kann über vom Benutzer zugewiesene verwaltete Identität authentifiziert werden.
- AzureDeveloperCliCredential wird zweitens versucht. Sie wird eingerichtet, wenn sich eine Entwicklung mit Azure CLI
az login
anmeldet.
Tipp
Die Reihenfolge der Anmeldeinformationen ist wichtig, da das erste gültige Microsoft Entra-Zugriffstoken verwendet wird. Weitere Informationen finden Sie im Artikel "ChainedTokenCredential Overview" .
Bearertoken für OpenAI abrufen
Die zweite Funktion in ./src/azure-authentication.ts
ist getTokenProvider()
, die einen Rückruf zurückgibt, der ein Bearertoken für den Azure Cognitive Services-Endpunkt bereitstellt.
function getTokenProvider(): () => Promise<string> {
const credential = getChainedCredential();
const scope = "https://cognitiveservices.azure.com/.default";
return getBearerTokenProvider(credential, scope);
}
Der vorangehende Codeausschnitt verwendet getBearerTokenProvider
die Anmeldeinformationen und den Bereich, und gibt dann einen Rückruf zurück, der ein Bearertoken bereitstellt.
Erstellen eines authentifizierten Azure OpenAI-Clients
Die dritte Funktion in ./src/azure-authentication.ts
ist getOpenAiClient()
, die den Azure OpenAI-Client zurückgibt.
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);
}
}
Dieser Code verwendet die Optionen, einschließlich des ordnungsgemäß bereichsbezogenen Tokens und erstellt den AzureOpenAI
Client.
Chatantwort mit Azure OpenAI streamen
Verwenden Sie den folgenden Fastify-Routenhandler, ./src/openai-chat-api.ts
um eine Nachricht an Azure OpenAI zu senden und die Antwort zu streamen.
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()
}
Die Funktion ruft die Chatunterhaltung einschließlich früherer Nachrichten ab und sendet sie an Azure OpenAI. Wenn die Datenströme von Azure OpenAI zurückgegeben werden, werden die Daten an den Client gesendet.
Weitere Sicherheitsüberlegungen
In diesem Artikel wird veranschaulicht, wie das Beispiel für die Authentifizierung für den Azure OpenAI-Dienst verwendet ChainedTokenCredential
wird.
Das Beispiel verfügt auch über eine GitHub-Aktion , die die Infrastruktur-as-Code-Dateien durchsucht und einen Bericht generiert, der alle erkannten Probleme enthält. Um weiterhin bewährte Methoden in Ihrem eigenen Repository sicherzustellen, empfehlen wir, dass alle Benutzer, die Lösungen basierend auf unseren Vorlagen erstellen, sicherstellen, dass die Geheimüberprüfungseinstellung für GitHub aktiviert ist.
Berücksichtigen Sie andere Sicherheitsmaßnahmen, z. B.:
Beschränken Sie den Zugriff auf die entsprechenden App-Benutzer, die Microsoft Entra verwenden.
Schützen der Azure-Container-Apps-Instanz mit einer Firewall und/oder einem virtuellen Netzwerk.
Bereinigen von Ressourcen
Bereinigen von Azure-Ressourcen
Die in diesem Artikel erstellten Azure-Ressourcen werden Ihrem Azure-Abonnement in Rechnung gestellt. Wenn Sie nicht erwarten, dass diese Ressourcen in Zukunft benötigt werden, löschen Sie sie, um weitere Gebühren zu vermeiden.
Führen Sie den folgenden Azure Developer CLI-Befehl aus, um die Azure-Ressourcen zu löschen und den Quellcode zu entfernen:
azd down --purge
Bereinigen von GitHub-Codespaces
Durch das Löschen der GitHub Codespaces-Umgebung wird sichergestellt, dass Sie die Anzahl der kostenlosen Berechtigungsstunden pro Kern maximieren können, die Sie für Ihr Konto erhalten.
Wichtig
Weitere Informationen zu den Berechtigungen Ihres GitHub-Kontos finden Sie im Artikel zu monatlich enthaltener Speicherkapazität und Kernstunden in GitHub Codespaces.
Melden Sie sich beim GitHub Codespaces-Dashboard (https://github.com/codespaces) an.
Suchen Sie Ihre derzeit ausgeführten Codespaces, die aus dem GitHub-Repository
Azure-Samples/openai-chat-app-quickstart
stammen.Öffnen Sie das Kontextmenü für den Codespace, und wählen Sie dann Löschen aus.
Melden Sie sich beim GitHub Codespaces-Dashboard (https://github.com/codespaces) an.
Suchen Sie Ihre derzeit ausgeführten Codespaces, die aus dem GitHub-Repository
Azure-Samples/openai-chat-app-quickstart-dotnet
stammen.Öffnen Sie das Kontextmenü für den Codespace, und wählen Sie dann Löschen aus.
Melden Sie sich beim GitHub Codespaces-Dashboard (https://github.com/codespaces) an.
Suchen Sie Ihre derzeit ausgeführten Codespaces, die aus dem GitHub-Repository
Azure-Samples/openai-chat-app-quickstart-javascript
stammen.Öffnen Sie das Kontextmenü für den Codespace, und wählen Sie dann Löschen aus.
Hilfe erhalten
Wenn Ihr Problem nicht behoben ist, protokollieren Sie Ihr Problem bei den Problemen des Repositorys.
Nächste Schritte
Wenn Ihr Problem nicht behoben ist, protokollieren Sie Ihr Problem bei den Problemen des Repositorys.
Wenn Ihr Problem nicht behoben ist, protokollieren Sie Ihr Problem bei den Problemen des Repositorys.