Megosztás a következőn keresztül:


Ismerkedés az Azure OpenAI biztonsági építőelemével

Ez a cikk bemutatja, hogyan hozhatja létre és használhatja az Azure OpenAI biztonsági építőelem-mintáját. A cél az Azure OpenAI-fiók szerepköralapú hozzáférés-vezérléssel (RBAC) történő kiépítésének bemutatása az Azure OpenAI-ba történő kulcs nélküli (Microsoft Entra ID) hitelesítéshez. Ez a csevegőalkalmazás-minta tartalmazza az Azure OpenAI-erőforrások kiépítéséhez és az Azure Container Appsben az Azure Developer CLI használatával történő üzembe helyezéséhez szükséges összes infrastruktúrát és konfigurációt.

A cikkben található utasításokat követve a következőket fogja követni:

  • Biztonságos Azure Container-csevegőalkalmazás üzembe helyezése.
  • Felügyelt identitás használata az Azure OpenAI-hozzáféréshez.
  • Csevegjen egy Nagy Méretű Azure OpenAI-modellel (LLM) az OpenAI-kódtár használatával.

A cikk befejezése után megkezdheti az új projekt módosítását az egyéni kóddal és adatokkal.

Feljegyzés

Ez a cikk egy vagy több AI-alkalmazássablont használ a cikkben szereplő példák és útmutatók alapjául. Az AI-alkalmazássablonok jól karbantartott, könnyen üzembe helyezhető referencia-implementációkat biztosítanak, amelyek segítenek magas színvonalú kiindulópontot biztosítani az AI-alkalmazások számára.

Architekturális áttekintés

A csevegőalkalmazás egyszerű architektúrája az alábbi ábrán látható: Az architektúrát ábrázoló ábra az ügyféltől a háttéralkalmazásig.

A csevegőalkalmazás Azure Container-alkalmazásként fut. Az alkalmazás a Microsoft Entra ID-val felügyelt identitást használ az Azure OpenAI-val való hitelesítéshez API-kulcs helyett. A csevegőalkalmazás az Azure OpenAI használatával hoz létre válaszokat a felhasználói üzenetekre.

Az alkalmazásarchitektúra a következő szolgáltatásokra és összetevőkre támaszkodik:

  • Az Azure OpenAI azt az AI-szolgáltatót jelöli, amelybe a felhasználó lekérdezéseit küldjük.
  • Az Azure Container Apps az a tárolókörnyezet, ahol az alkalmazás üzemel.
  • A felügyelt identitás segít a legjobb szintű biztonság biztosításában, és kiküszöböli azt a követelményt, hogy Ön fejlesztőként biztonságosan kezelje a titkos kulcsokat.
  • Bicep-fájlok Azure-erőforrások kiépítéséhez, beleértve az Azure OpenAI, az Azure Container Apps, az Azure Container Registry, az Azure Log Analytics és az RBAC-szerepköröket.
  • A Microsoft AI Chat Protocol szabványos API-szerződéseket biztosít AI-megoldások és nyelvek között. A csevegőalkalmazás megfelel a Microsoft AI csevegési protokolljának, amely lehetővé teszi, hogy a kiértékelési alkalmazás a protokollnak megfelelő csevegőalkalmazásokkal fusson.
  • Egy Python Quart , amely a csomagot használja a openai felhasználói üzenetekre adott válaszok létrehozásához.
  • Egy egyszerű HTML/JavaScript-előtér, amely JSON-vonalak használatával streameli a válaszokat a háttérrendszerből egy olvasható adatfolyamon keresztül.
  • Egy Blazor-webalkalmazás, amely az Azure.AI.OpenAI NuGet-csomagot használja a felhasználói üzenetekre adott válaszok létrehozásához.
  • Egy TypeScript-webalkalmazás, amely az OpenAI npm-csomagot használja a felhasználói üzenetekre adott válaszok létrehozásához.

Költség

Annak érdekében, hogy a díjszabás a lehető legalacsonyabb legyen ebben a mintában, a legtöbb erőforrás alapszintű vagy fogyasztási tarifacsomagot használ. Szükség szerint módosítsa a rétegszintet a kívánt használat alapján. Ha le szeretné állítani a díjakat, törölje az erőforrásokat, amikor végzett a cikkel.

További információ a költségekről a mintaadattárban.

További információ a költségekről a mintaadattárban.

További információ a költségekről a mintaadattárban.

Előfeltételek

A cikk elvégzéséhez szükséges összes függőséget tartalmazó fejlesztői tárolókörnyezet érhető el. A fejlesztői tárolót a GitHub Codespacesben (böngészőben) vagy helyileg is futtathatja a Visual Studio Code használatával.

A cikk használatához teljesítenie kell a következő előfeltételeket:

Nyílt fejlesztési környezet

A cikk elvégzéséhez használja az alábbi utasításokat egy előre konfigurált fejlesztési környezet üzembe helyezéséhez, amely tartalmazza az összes szükséges függőséget.

A GitHub Codespaces egy, a GitHub által felügyelt fejlesztői tárolót futtat a Webes Visual Studio Code-tal felhasználói felületként. A legegyszerűbb fejlesztési környezethez használja a GitHub Codespacest, hogy a megfelelő fejlesztői eszközökkel és függőségekkel rendelkezzen a cikk elvégzéséhez.

Fontos

Minden GitHub-fiók legfeljebb 60 órán át használhatja a Codespace-eket havonta 2 magpéldánysal. További információ: GitHub Codespaces havonta tartalmazza a tárterületet és az alapórákat.

Az alábbi lépésekkel hozzon létre egy új GitHub-kódteret a mainAzure-Samples/openai-chat-app-quickstart GitHub-adattár ágán.

  1. Kattintson a jobb gombbal a következő gombra, és válassza a Hivatkozás megnyitása lehetőséget az új ablakban. Ez a művelet lehetővé teszi a fejlesztési környezet és a dokumentáció áttekintését.

  2. A Kódtér létrehozása lapon tekintse át, majd válassza az Új kódtér létrehozása lehetőséget

    Képernyőkép a megerősítést kérő képernyőről egy új kódtér létrehozása előtt.

  3. Várja meg, amíg a kódtér elindul. Ez az indítási folyamat eltarthat néhány percig.

  4. Jelentkezzen be az Azure-ba az Azure Developer CLI-vel a képernyő alján található terminálon.

    azd auth login
    
  5. Másolja ki a kódot a terminálból, majd illessze be egy böngészőbe. Kövesse az utasításokat az Azure-fiókkal való hitelesítéshez.

A cikkben szereplő fennmaradó feladatok ennek a fejlesztési tárolónak a kontextusában történnek.

Az alábbi lépésekkel hozzon létre egy új GitHub-kódteret a mainAzure-Samples/openai-chat-app-quickstart-dotnet GitHub-adattár ágán.

  1. Kattintson a jobb gombbal a következő gombra, és válassza a Hivatkozás megnyitása lehetőséget az új ablakban. Ez a művelet lehetővé teszi a fejlesztési környezet és a dokumentáció áttekintését.

  2. A Kódtér létrehozása lapon tekintse át, majd válassza a Kódtér létrehozása lehetőséget

    Képernyőkép a megerősítést kérő képernyőről egy új kódtér létrehozása előtt.

  3. Várja meg, amíg a kódtér elindul. Ez az indítási folyamat eltarthat néhány percig.

  4. Jelentkezzen be az Azure-ba az Azure Developer CLI-vel a képernyő alján található terminálon.

    azd auth login
    
  5. Másolja ki a kódot a terminálból, majd illessze be egy böngészőbe. Kövesse az utasításokat az Azure-fiókkal való hitelesítéshez.

A cikkben szereplő fennmaradó feladatok ennek a fejlesztési tárolónak a kontextusában történnek.

Az alábbi lépésekkel hozzon létre egy új GitHub-kódteret a mainAzure-Samples/openai-chat-app-quickstart-javascript GitHub-adattár ágán.

  1. Kattintson a jobb gombbal a következő gombra, és válassza a Hivatkozás megnyitása lehetőséget az új ablakban. Ez a művelet lehetővé teszi a fejlesztési környezet és a dokumentáció áttekintését.

Megnyitás a GitHub Codespacesben

  1. A Kódtér létrehozása lapon tekintse át, majd válassza az Új kódtér létrehozása lehetőséget

    Képernyőkép a megerősítést kérő képernyőről egy új kódtér létrehozása előtt.

  2. Várja meg, amíg a kódtér elindul. Ez az indítási folyamat eltarthat néhány percig.

  3. Jelentkezzen be az Azure-ba az Azure Developer CLI-vel a képernyő alján található terminálon.

    azd auth login
    
  4. Másolja ki a kódot a terminálból, majd illessze be egy böngészőbe. Kövesse az utasításokat az Azure-fiókkal való hitelesítéshez.

A cikkben szereplő fennmaradó feladatok ennek a fejlesztési tárolónak a kontextusában történnek.

Üzembe helyezés és futtatás

A mintaadattár tartalmazza a csevegőalkalmazás Azure-beli üzembe helyezéséhez szükséges összes kódot és konfigurációs fájlt. Az alábbi lépések végigvezetik a minta csevegőalkalmazás Azure üzembe helyezési folyamatán.

Csevegőalkalmazás üzembe helyezése az Azure-ban

Fontos

Az ebben a szakaszban létrehozott Azure-erőforrások azonnali költségekkel járnak. Ezek az erőforrások akkor is költségekkel járhatnak, ha a parancsot a teljes végrehajtás előtt megszakítja.

  1. Futtassa a következő Azure Developer CLI-parancsot az Azure-erőforrások kiépítéséhez és a forráskód üzembe helyezéséhez:

    azd up
    
  2. Az alábbi táblázat segítségével válaszolhat a kérdésekre:

    Felszólítás Válasz
    Környezet neve Tartsa rövid és kisbetűs. Adja hozzá a nevét vagy aliasát. Például: secure-chat. Az erőforráscsoport nevének részeként használják.
    Előfizetés Válassza ki az előfizetést az erőforrások létrehozásához.
    Hely (üzemeltetéshez) Válasszon ki egy Önhöz közeli helyet a listából.
    Az OpenAI-modell helye Válasszon ki egy Önhöz közeli helyet a listából. Ha ugyanaz a hely érhető el, mint az első hely, válassza ezt.
  3. Várja meg az alkalmazás üzembe helyezését. Az üzembe helyezés általában 5–10 percet vesz igénybe.

A csevegőalkalmazással kérdéseket tehet fel a nagy nyelvi modellel kapcsolatban

  1. A terminál egy URL-címet jelenít meg az alkalmazás sikeres üzembe helyezése után.

  2. Válassza ki a címkével ellátott URL-címet Deploying service web a csevegőalkalmazás böngészőben való megnyitásához.

    Képernyőkép a csevegőalkalmazásról a böngészőben, amelyen számos javaslat látható a csevegés bemenetére, valamint a kérdés megadására szolgáló csevegő szövegmező.

  3. A böngészőben írjon be egy kérdést, például: "Miért jobb a felügyelt identitás, mint a kulcsok?".

  4. A válasz az Azure OpenAI-tól származik, és megjelenik az eredmény.

A mintakód felfedezése

Bár az OpenAI és az Azure OpenAI szolgáltatás egy gyakori Python-ügyfélkódtárra támaszkodik, az Azure OpenAI-végpontok használatakor kis kódmódosításokra van szükség. Lássuk, hogyan konfigurálja ez a minta a kulcs nélküli hitelesítést a Microsoft Entra-azonosítóval, és hogyan kommunikál az Azure OpenAI-val.

Hitelesítés konfigurálása felügyelt identitással

Ebben a mintában a fájl a src\quartapp\chat.py kulcs nélküli hitelesítés konfigurálásával kezdődik.

Az alábbi kódrészlet az azure.identity.aio modullal hoz létre egy aszinkron Microsoft Entra hitelesítési folyamatot.

A következő kódrészlet a AZURE_CLIENT_IDazd környezeti változó használatával hoz létre egy ManagedIdentityCredential-példányt , amely a felhasználó által hozzárendelt felügyelt identitáson keresztül hitelesíthető.

user_assigned_managed_identity_credential = ManagedIdentityCredential(client_id=os.getenv("AZURE_CLIENT_ID")) 

Feljegyzés

Az azd erőforrás-környezeti változók ki vannak építve az alkalmazás üzembe helyezése során azd .

Az alábbi kódrészlet erőforrás-környezeti változót használ AZURE_TENANT_IDazd egy AzureDeveloperCliCredential-példány létrehozásához, amely képes hitelesíteni az aktuális Microsoft Entra-bérlővel.

azure_dev_cli_credential = AzureDeveloperCliCredential(tenant_id=os.getenv("AZURE_TENANT_ID"), process_timeout=60)  

Az Azure Identity-ügyfélkódtár hitelesítő adatokat biztosít – az Azure Core-kódtár TokenCredential protokollját implementáló nyilvános osztályok. A hitelesítő adatok egy különálló hitelesítési folyamatot jelentenek a hozzáférési jogkivonat Microsoft Entra-azonosítóból való beszerzéséhez. Ezek a hitelesítő adatok összefűzhetők, hogy a megkísérlendő hitelesítési mechanizmusok rendezett sorozatát alakíthassák ki.

Az alábbi kódrészlet egy és egy ChainedTokenCredentialManagedIdentityCredentialAzureDeveloperCliCredential:

  • Ez ManagedIdentityCredential az Azure Functions és Azure-alkalmazás szolgáltatáshoz használatos. A felhasználó által hozzárendelt felügyelt identitások a címzettnek való átadással client_id támogatottak ManagedIdentityCredential.
  • A AzureDeveloperCliCredential helyi fejlesztéshez használatos. Korábban a Microsoft Entra-bérlő alapján lett beállítva.
azure_credential = ChainedTokenCredential(
    user_assigned_managed_identity_credential,
    azure_dev_cli_credential
)

Tipp.

A hitelesítő adatok sorrendje fontos, mivel a rendszer az első érvényes Microsoft Entra hozzáférési jogkivonatot használja. További információ: ChainedTokenCredential Overview (LáncoltTokenCredential Overview ) című cikk.

Az alábbi kódrészlet lekéri az Azure OpenAI-jogkivonat-szolgáltatót a kiválasztott Azure-hitelesítő adatok alapján. Ez az érték a azure.identity.aio.get_bearer_token_provider két argumentummal való meghívásával érhető el:

  • azure_credential: A ChainedTokenCredential kérelem hitelesítéséhez korábban létrehozott példány.

  • https://cognitiveservices.azure.com/.default: Kötelező egy vagy több tulajdonosi jogkivonat-hatókör. Ebben az esetben az Azure Cognitive Services végpontja.

token_provider = get_bearer_token_provider(
    azure_credential, "https://cognitiveservices.azure.com/.default"
)

Az alábbi sorok ellenőrzik az alkalmazás üzembe helyezése során AZURE_OPENAI_ENDPOINT kiépített kötelező AZURE_OPENAI_CHATGPT_DEPLOYMENT és azdazd erőforrás-környezeti változókat. Ha egy érték nem jelenik meg, hibaüzenet jelenik meg.

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")

Ez a kódrészlet inicializálja az Azure OpenAI-ügyfelet, és beállítja a api_version, azure_endpointés azure_ad_token_provider (client_args) paramétereket:

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,
)  

Az alábbi sor az Azure OpenAI-modell üzembehelyezési nevét állítja be az API-hívásokban való használatra:

bp.openai_model = os.getenv("AZURE_OPENAI_CHATGPT_DEPLOYMENT")

Feljegyzés

Az OpenAI a kulcsszóargumentumot használja a model használni kívánt modell megadásához. Az Azure OpenAI az egyedi modellek üzembe helyezésének fogalmával rendelkezik. Az Azure OpenAI model használatakor az Azure OpenAI-modell üzembe helyezése során választott mögöttes üzembe helyezési névre kell hivatkoznia.

A függvény befejeződése után az ügyfél megfelelően van konfigurálva, és készen áll az Azure OpenAI-szolgáltatások kezelésére.

Válaszfolyam az OpenAI-ügyfél és -modell használatával

Az response_stream útvonalon a csevegés befejező hívását kezeli. Az alábbi kódrészlet bemutatja a használat módját openai_client és model használatát.

async def response_stream():
    # This sends all messages, so API request may exceed token limits
    all_messages = [
        {"role": "system", "content": "You are a helpful assistant."},
    ] + request_messages

    chat_coroutine = bp.openai_client.chat.completions.create(
        # Azure OpenAI takes the deployment name as the model name
        model=bp.openai_model,
        messages=all_messages,
        stream=True,
    )

A mintakód megismerése

A .NET-alkalmazások az Azure.AI.OpenAI ügyfélkódtárra támaszkodnak az Azure OpenAI-szolgáltatásokkal való kommunikációhoz, amely függőséget vesz igénybe az OpenAI-kódtártól . A mintaalkalmazás a Microsoft Entra ID használatával konfigurálja a kulcs nélküli hitelesítést az Azure OpenAI-val való kommunikációhoz.

Hitelesítés és szolgáltatásregisztráció konfigurálása

Ebben a mintában a kulcs nélküli hitelesítés konfigurálva van a program.cs fájlban. Az alábbi kódrészlet a AZURE_CLIENT_ID beállított környezeti változót azd használja egy managedIdentityCredential-példány létrehozásához, amely képes hitelesítésre a felhasználó által hozzárendelt felügyelt identitáson keresztül.

var userAssignedIdentityCredential = 
    new ManagedIdentityCredential(builder.Configuration.GetValue<string>("AZURE_CLIENT_ID"));

Feljegyzés

Az azd erőforrás-környezeti változók ki vannak építve az alkalmazás üzembe helyezése során azd .

Az alábbi kódrészlet a AZURE_TENANT_ID beállított környezeti változóval azd hoz létre egy AzureDeveloperCliCredential-példányt , amely képes helyileg hitelesíteni a bejelentkezett azdfiók használatával.

var azureDevCliCredential = new AzureDeveloperCliCredential(
    new AzureDeveloperCliCredentialOptions()
    { 
        TenantId = builder.Configuration.GetValue<string>("AZURE_TENANT_ID") 
    });

Az Azure Identity ügyfélkódtár olyan hitelesítő osztályokat biztosít, amelyek implementálják az Azure Core-kódtár TokenCredential protokollját. A hitelesítő adatok egy különálló hitelesítési folyamatot jelentenek a hozzáférési jogkivonat Microsoft Entra-azonosítóból való beszerzéséhez. Ezek a hitelesítő adatok összekapcsolhatók ChainedTokenCredential a megkísérlendő hitelesítési mechanizmusok rendezett sorozatának létrehozásához.

Az alábbi kódrészlet regisztrálja a AzureOpenAIClient függőséginjektálást, és létrehoz egy ChainedTokenCredential és egy ManagedIdentityCredentialAzureDeveloperCliCredential:

  • Ez ManagedIdentityCredential az Azure Functions és Azure-alkalmazás szolgáltatáshoz használatos. A felhasználó által hozzárendelt felügyelt identitások a megadottak AZURE_CLIENT_IDhasználatával ManagedIdentityCredential támogatottak.
  • A AzureDeveloperCliCredential helyi fejlesztéshez használatos. Korábban a Microsoft Entra-bérlő alapján lett beállítva.
builder.Services.AddAzureClients(
    clientBuilder => {
        clientBuilder.AddClient<AzureOpenAIClient, AzureOpenAIClientOptions>((options, _, _)
            => new AzureOpenAIClient(
                new Uri(endpoint),
                new ChainedTokenCredential(
                    userAssignedIdentityCredential, azureDevCliCredential), options));
    });

Tipp.

A hitelesítő adatok sorrendje fontos, mivel a rendszer az első érvényes Microsoft Entra hozzáférési jogkivonatot használja. További információ: ChainedTokenCredential Overview (LáncoltTokenCredential Overview ) című cikk.

Csevegés befejezésének lekérése az Azure OpenAI-ügyféllel

A Blazor webalkalmazás az összetevő tetején lévő regisztráltakat AzureOpenAIClient injektálja Home.Razor :

@inject AzureOpenAIClient azureOpenAIClient

Amikor a felhasználó elküldi az űrlapot, a rendszer elküldi a AzureOpenAIClient kérést az OpenAI-modellnek a befejezés létrehozásához:

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));

A mintakód megismerése

Bár az OpenAI és az Azure OpenAI szolgáltatás openai (gyakori JavaScript-ügyfélkódtár) szolgáltatásra támaszkodik, az Azure OpenAI-végpontok használatakor kis kódmódosításokra van szükség. Lássuk, hogyan konfigurálja ez a minta a kulcs nélküli hitelesítést a Microsoft Entra-azonosítóval, és hogyan kommunikál az Azure OpenAI-val.

Kulcs nélküli hitelesítés minden környezethez

Az Azure Identity ügyfélkódtár olyan hitelesítő osztályokat biztosít, amelyek implementálják az Azure Core-kódtár protokollját TokenCredential . A hitelesítő adatok egy különálló hitelesítési folyamatot jelentenek a hozzáférési jogkivonat Microsoft Entra-azonosítóból való beszerzéséhez. Ezek a hitelesítő adatok egy LáncoltTokenCredential használatával összefűzhetők, hogy a megkísérelni kívánt hitelesítési mechanizmusok rendezett sorozatát alakíthassák ki. Ez lehetővé teszi, hogy ugyanazt a kódot éles és helyi fejlesztési környezetekben is üzembe helyezze.

Hitelesítés konfigurálása felügyelt identitással

Ebben a mintában a ./src/azure-authentication.ts rendszer számos függvényt biztosít az Azure OpenAI kulcs nélküli hitelesítéséhez.

Az első függvény a getChainedCredential()láncban található első érvényes Azure-hitelesítő adatot adja vissza.

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
          })
    );
}
  • A ManagedIdentityCredential először megkísérlésére kerül sor. Az éles futtatókörnyezetben a AZURE_CLIENT_ID környezeti változóval van beállítva, és képes a felhasználó által hozzárendelt felügyelt identitáson keresztüli hitelesítésre.
  • Az AzureDeveloperCliCredential a második kísérlet. Ez akkor van beállítva, amikor egy fejlesztés bejelentkezik az Azure CLI-vel az login.

Tipp.

A hitelesítő adatok sorrendje fontos, mivel a rendszer az első érvényes Microsoft Entra hozzáférési jogkivonatot használja. További információ: ChainedTokenCredential Overview (LáncoltTokenCredential Overview ) című cikk.

Tulajdonosi jogkivonat lekérése az OpenAI-hoz

A második függvény az ./src/azure-authentication.tsgetTokenProvider(), amely egy visszahívást ad vissza, amely egy tulajdonosi jogkivonatot biztosít, amely az Azure Cognitive Services-végpontra terjed ki.

function getTokenProvider(): () => Promise<string> {
    const credential  = getChainedCredential();
    const scope = "https://cognitiveservices.azure.com/.default";
    return getBearerTokenProvider(credential, scope);
}

Az előző kódrészlet a hitelesítő adatok és a hatókör figyelembevételére szolgál getBearerTokenProvider , majd visszaad egy visszahívást, amely egy tulajdonosi jogkivonatot biztosít.

Hitelesített Azure OpenAI-ügyfél létrehozása

A harmadik függvény az ./src/azure-authentication.tsgetOpenAiClient(), amely az Azure OpenAI-ügyfelet adja vissza.

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);
    }
}

Ez a kód felveszi a beállításokat, beleértve a megfelelően hatókörbe tartozó jogkivonatot is, és létrehozza az ügyfelet AzureOpenAI

Csevegési válasz streamelése az Azure OpenAI-val

A következő Fastify útvonalkezelő ./src/openai-chat-api.ts használatával küldjön üzenetet az Azure OpenAI-nak, és streamelje a választ.

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()

}

A függvény lekéri a csevegést, beleértve a korábbi üzeneteket is, és elküldi őket az Azure OpenAI-nak. Mivel a stream adattömbök az Azure OpenAI-ból érkeznek vissza, a rendszer elküldi azokat az ügyfélnek.

Egyéb biztonsági szempontok

Ez a cikk bemutatja, hogyan használja ChainedTokenCredential a minta az Azure OpenAI szolgáltatáshoz való hitelesítést.

A mintában található egy GitHub-művelet is, amely ellenőrzi az infrastruktúra kódkénti fájljait, és létrehoz egy jelentést, amely tartalmazza az észlelt problémákat. A folyamatos ajánlott eljárások biztosítása érdekében javasoljuk, hogy mindenki, aki sablonjaink alapján hoz létre megoldásokat, győződjön meg arról, hogy a GitHub titkos kulcskeresési beállítása engedélyezve van.

Fontolja meg az egyéb biztonsági intézkedéseket, például:

Az erőforrások eltávolítása

Azure-erőforrások tisztítása

A cikkben létrehozott Azure-erőforrások számlázása az Azure-előfizetésbe kerül. Ha a jövőben nem lesz szüksége ezekre az erőforrásokra, törölje őket, hogy elkerülje a további költségek felmerülését.

Az Azure-erőforrások törléséhez és a forráskód eltávolításához futtassa a következő Azure Developer CLI-parancsot:

azd down --purge

GitHub-kódterek eltávolítása

A GitHub Codespaces-környezet törlése biztosítja, hogy maximálisan kihasználható legyen a fiókhoz tartozó ingyenes óránkénti jogosultság.

Fontos

A GitHub-fiók jogosultságairól további információt a GitHub Codespaces havi tartalmazza a tárterületet és az alapórákat.

  1. Jelentkezzen be a GitHub Codespaces vezérlőpultjára.

  2. Keresse meg a Jelenleg futó, a Azure-Samples/openai-chat-app-quickstart GitHub-adattárból származó kódtereket.

  3. Nyissa meg a kódtér helyi menüjét, majd válassza a Törlés lehetőséget.

  1. Jelentkezzen be a GitHub Codespaces vezérlőpultjára.

  2. Keresse meg a Jelenleg futó, a Azure-Samples/openai-chat-app-quickstart-dotnet GitHub-adattárból származó kódtereket.

  3. Nyissa meg a kódtér helyi menüjét, majd válassza a Törlés lehetőséget.

  1. Jelentkezzen be a GitHub Codespaces vezérlőpultjára.

  2. Keresse meg a Jelenleg futó, a Azure-Samples/openai-chat-app-quickstart-javascript GitHub-adattárból származó kódtereket.

  3. Nyissa meg a kódtér helyi menüjét, majd válassza a Törlés lehetőséget.

Segítség kérése

Ha a probléma nem oldja meg a problémát, jelentkezzen be az adattár problémáiba.

Következő lépések

Ha a probléma nem oldja meg a problémát, jelentkezzen be az adattár problémáiba.

Ha a probléma nem oldja meg a problémát, jelentkezzen be az adattár problémáiba.