Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk bemutatja, hogyan hozhatja létre és használhatja a Azure OpenAI biztonsági építőelem-mintát. Az a cél, hogy bemutassuk az Azure OpenAI-fiók kiépítését szerepköralapú hozzáférés-vezérléssel (RBAC) a kulcs nélküli (Microsoft Entra ID) hitelesítéshez az Azure OpenAI szolgáltatásban. Ez a csevegőalkalmazás-minta tartalmazza a Azure OpenAI-erőforrások kiépítéséhez és az alkalmazás Azure Container Apps való üzembe helyezéséhez szükséges összes infrastruktúrát és konfigurációt a Azure fejlesztői parancssori felület használatával.
A cikkben található utasításokat követve a következőket fogja követni:
- Biztonságos csevegőalkalmazás telepítése az Azure Container Applications szolgáltatásban.
- Felügyelt identitás használata Azure OpenAI-hozzáféréshez.
- Csevegjen egy Azure OpenAI nagy nyelvi 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.
Megjegyzé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ó:
A csevegőalkalmazás Azure tárolóalkalmazásként fut. Az alkalmazás Microsoft Entra ID keresztül felügyelt identitást használ a Azure OpenAI-val való hitelesítéshez API-kulcs helyett. A csevegőalkalmazás 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:
- Azure OpenAI azt az AI-szolgáltatót jelöli, amelybe a felhasználó lekérdezéseit küldjük.
- Azure Container Apps az alkalmazás tárolókörnyezete.
- 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 Azure OpenAI-, Azure Container Apps-, Azure Container Registry-, Azure Log Analytics- és RBAC-szerepköröket.
- Egy Python Quart alkalmazás, amely a
openaicsomagot és a Responses API-t használja a 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 való válaszok generálá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. A költségek elkerülése érdekében törölje az erőforrásokat, miután befejezte a cikket.
További információ a costról a mintaadattárban.
További információ a costról a mintaadattárban.
További információ a costró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ési tárolót GitHub Kódterekben (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:
Egy Azure-előfizetés – A előfizetés létrehozása ingyenesen
Azure fiókengedélyek – A Azure-fióknak
Microsoft.Authorization/roleAssignments/writeengedélyekkel kell rendelkeznie, például Felhasználó hozzáférési rendszergazdájának vagy Tulajdonos.GitHub fiók
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.
GitHub Codespaces felhasználói felületként egy GitHub által felügyelt fejlesztési tárolót futtat Visual Studio Code web. A legegyszerűbb fejlesztési környezethez használja a GitHub Codespace-eket, hogy a megfelelő fejlesztői eszközök és függőségek legyenek előre telepítve 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óért lásd: A GitHub Codespaces havonta tartalmazott tárterületet és alapórákat.
Az alábbi lépésekkel hozzon létre egy új GitHub codespace-t a main GitHub adattár Azure-Samples/openai-chat-app-quickstart ágán.
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.
A Kódtér létrehozása lapon tekintse át, majd válassza az Új kódtér létrehozása lehetőséget
Várja meg, amíg a kódkörnyezet elindul. Ez az indítási folyamat eltarthat néhány percig.
Jelentkezzen be az Azure Developer CLI-vel a képernyő alján található terminálban.
azd auth loginMásolja ki a kódot a terminálból, majd illessze be egy böngészőbe. Kövesse az utasításokat a Azure-fiókjával 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 codespace-t a main GitHub adattár Azure-Samples/openai-chat-app-quickstart-dotnet ágán.
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.
A Kódtér létrehozása lapon tekintse át, majd válassza a Kódtér létrehozása lehetőséget
Várja meg, amíg a kódkörnyezet elindul. Ez az indítási folyamat eltarthat néhány percig.
Jelentkezzen be az Azure-ba az Azure fejlesztői parancssori eszközzel a képernyő alján lévő terminálban.
azd auth loginMásolja ki a kódot a terminálból, majd illessze be egy böngészőbe. Kövesse az utasításokat a Azure-fiókjával 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 codespace-t a main GitHub adattár Azure-Samples/openai-chat-app-quickstart-javascript ágán.
- 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.
A Kódtér létrehozása lapon tekintse át, majd válassza az Új kódtér létrehozása lehetőséget
Várja meg, amíg a kódkörnyezet elindul. Ez az indítási folyamat eltarthat néhány percig.
Jelentkezzen be az Azure-ba az Azure fejlesztői CLI-vel a képernyő alján lévő terminálban.
azd auth loginMásolja ki a kódot a terminálból, majd illessze be egy böngészőbe. Kövesse az utasításokat a Azure-fiókjával 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 ü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 csevegőalkalmazás-mintaalkalmazás Azure üzembe helyezési folyamatán.
Csevegőalkalmazás üzembe helyezése az Azure platformon
Fontos
Azure szakaszban létrehozott 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.
Futtassa a következő Azure Fejlesztői parancssori felület parancsot Azure erőforrás-kiépítéshez és a forráskód üzembe helyezéséhez:
azd upAz alábbi táblázat segítségével válaszolhat a kérdésekre:
Felszólítás Válasz Környezet neve Legyen 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. 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
A terminál egy URL-címet jelenít meg az alkalmazás sikeres üzembe helyezése után.
Válassza ki a címkével ellátott URL-címet
Deploying service weba csevegőalkalmazás böngészőben való megnyitásához.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?".
A válasz Azure OpenAI-ból származik, és az eredmény megjelenik.
A mintakód felfedezése
Bár az OpenAI és a Azure OpenAI Service egy common Python ügyfélkódtárra támaszkodnak, 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 Microsoft Entra ID, és hogyan kommunikál 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 a azure.identity.aio modult használja egy aszinkron Microsoft Entra hitelesítési folyamat létrehozásához.
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"))
Megjegyzé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 AZURE_TENANT_IDazd erőforrás-környezeti változót használ 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önyvtár hitelesítő adatokat biztosít, amelyek az Azure Core könyvtár TokenCredential protokolljának implementációit valósítják meg. Egy hitelesítő adat egy különálló hitelesítési folyamatot jelöl a Microsoft Entra ID-től történő hozzáférési jogkivonat megszerzé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 létrehoz egy ChainedTokenCredential egy ManagedIdentityCredential és egy AzureDeveloperCliCredential használatával:
- A
ManagedIdentityCredentialAzure Functions, Azure App Service és Azure Container Apps használható. A felhasználó által hozzárendelt felügyelt identitásokat aclient_idátadásaManagedIdentityCredentialtámogatja. - A
AzureDeveloperCliCredentialhelyi fejlesztéshez használatos. Korábban a használni kívánt 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ókért olvassa el a ChainedTokenCredential Overview című cikket.
Az alábbi kódrészlet az Azure OpenAI token szolgáltatót lekéri az 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 kérés hitelesítéséhez korábban létrehozottChainedTokenCredentialpéldány.https://cognitiveservices.azure.com/.default: Kötelező egy vagy több tulajdonosi jogkivonat-hatókör. Ebben az esetben a Azure Cognitive Services végpont.
token_provider = get_bearer_token_provider(
azure_credential, "https://cognitiveservices.azure.com/.default"
)
Az alábbi sorok ellenőrzik a szükséges AZURE_OPENAI_ENDPOINT és AZURE_OPENAI_CHAT_DEPLOYMENT-t, valamint a azd kiépítése során beállított két azd környezeti változót. Ha egy érték nem jelenik meg, hibaüzenet jelenik meg.
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")
Ez a kódrészlet inicializálja az OpenAI-ügyfelet Azure /openai/v1/ végpontján, és a jogkivonat-szolgáltatót api_keyként adja át. A v1-végponthoz nincs api_version szükség:
bp.openai_client = AsyncOpenAI(
base_url=f"{openai_endpoint.rstrip('/')}/openai/v1/",
api_key=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_CHAT_DEPLOYMENT")
Megjegyzés
Az OpenAI a kulcsszóargumentumot használja a model használni kívánt modell megadásához. Azure OpenAI az egyedi modell telepítések fogalmával rendelkezik. Az Azure OpenAI használatakor a model az Azure OpenAI modell üzembe helyezése során kiválasztott alapul szolgáló üzembehelyezési névre kell hivatkoznia.
A függvény befejeződése után az ügyfél megfelelően konfigurálva van, és készen áll az Azure OpenAI-szolgáltatások kezelésére.
Válaszok streamelése az OpenAI Responses API használatával
Az response_stream kezeli az API válaszának streamelési hívását az útvonalon. Az előtér közvetlenül a Válaszok alakú input elemeket küldi el, a háttérrendszer pedig a következőre responses.stream()továbbítja őket:
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"
A mintakód megismerése
.NET alkalmazások a Azure.AI.OpenAI ügyfélkönyvtárra támaszkodnak az Azure OpenAI szolgáltatásokkal való kommunikációhoz, amely függősége van a OpenAI könyvtártól. A mintaalkalmazás kulcs nélküli hitelesítést konfigurál a Microsoft Entra ID használatával, hogy kommunikáljon Azure OpenAI-val.
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"));
Megjegyzé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 hitelesítő osztályokat biztosít, amelyek implementálják a Azure Core-kódtár TokenCredential protokollját. A hitelesítő egy különálló hitelesítési folyamatot jelöl a Microsoft Entra ID-től származó hozzáférési jogkivonat megszerzé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áshoz, és létrehoz egy ChainedTokenCredential egy ManagedIdentityCredential és egy AzureDeveloperCliCredential használatával.
- A
ManagedIdentityCredentialAzure Functions, Azure App Service és Azure Container Apps használható. A felhasználó által hozzárendelt felügyelt identitásokat a megadottAZURE_CLIENT_IDsegítségévelManagedIdentityCredentialtámogatja. - A
AzureDeveloperCliCredentialhelyi fejlesztéshez használatos. Korábban a használni kívánt 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ókért olvassa el a ChainedTokenCredential Overview című cikket.
Csevegés befejezésének lekérése az Azure OpenAI-ügyféllel
A Blazor webalkalmazás a regisztrált AzureOpenAIClient-t a Home.Razor összetevő tetején befecskendezi.
@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
Míg az OpenAI és a Azure OpenAI Service egy openai (gyakori JavaScript-ügyfélkódtár) használatára támaszkodnak, 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 Microsoft Entra ID, és hogyan kommunikál Azure OpenAI-val.
Kulcs nélküli hitelesítés minden környezethez
A Azure Identity-ügyfélkódtár hitelesítő osztályokat biztosít, amelyek implementálják a Azure Core-kódtár TokenCredential protokollját. A kredenciál önálló hitelesítési folyamatot jelöl a Microsoft Entra ID-ből történő hozzáférési jogkivonat 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 számos függvényt biztosít az OpenAI Azure kulcs nélküli hitelesítéséhez.
Az első getChainedCredential() függvény a láncban talált 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
})
);
}
- ManagedIdentityCredential az elsőként kerül kipróbálásra. 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ő bejelentkezik a Azure Fejlesztői parancssori felületre a
azd auth loginhasználatával.
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ókért olvassa el a ChainedTokenCredential Overview című cikket.
Bearer token lekérése az OpenAI számára
A ./src/azure-authentication.ts második függvénye a getTokenProvider(), amely egy olyan visszahívási függvényt ad vissza, ami a Azure Cognitive Services végpontra vonatkozó jogosultsági tokent biztosít.
function getTokenProvider(): () => Promise<string> {
const credential = getChainedCredential();
const scope = "https://cognitiveservices.azure.com/.default";
return getBearerTokenProvider(credential, scope);
}
A kódrészlet getBearerTokenProvider-t használ a hitelesítő adatok és a hatókör kezeléséhez, majd visszaad egy visszahívást, amely egy bearer token-t biztosít.
Hitelesített Azure OpenAI-ügyfél létrehozása
A ./src/azure-authentication.ts harmadik függvénye a getOpenAiClient(), amely a 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ó tokent, és létrehozza az AzureOpenAI ügyfél példányát.
Csevegési válasz streamelése Azure OpenAI-val
A ./src/openai-chat-api.ts következő Fastify útvonalkezelőjével üzenetet küldhet Azure OpenAI-nak, és streamelheti 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 Azure OpenAI-nak. Mivel a stream adattömbök Azure OpenAI-ból származnak, a rendszer elküldi azokat az ügyfélnek.
Egyéb biztonsági szempontok
Ez a cikk bemutatja, hogyan használja a minta a ChainedTokenCredential a Azure OpenAI szolgáltatáshoz való hitelesítéshez.
A mintában egy GitHub Művelet is található, amely megvizsgálja az infrastruktúra kódkénti fájljait, és létrehoz egy jelentést, amely tartalmazza az észlelt problémákat. Annak érdekében, hogy a saját adattárában továbbra is ajánlott eljárásokat biztosíthasson, javasoljuk, hogy mindenki, aki sablonjaink alapján hoz létre megoldásokat, győződjön meg arról, hogy a GitHub titkos kulcsok vizsgálata beállítás engedélyezve van.
Fontolja meg az egyéb biztonsági intézkedéseket, például:
Korlátozza az alkalmazásfelhasználókhoz való hozzáférést a Microsoft Entra segítségével.
Az Azure Container Apps példány védelme tűzfal és/vagy Virtuális Hálózat alkalmazásával.
Erőforrások megtisztítása
Azure erőforrások törlése
A cikkben létrehozott Azure erőforrások számlázása az Azure-előfizetésére történik. 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.
A Azure erőforrások törléséhez és a forráskód eltávolításához futtassa a következő Azure fejlesztői parancssori felület parancsot:
azd down --purge
GitHub kódterek takarítása
A GitHub Codespaces-környezet törlése biztosítja, hogy maximálisan kihasználható legyen a fiókhoz tartozó ingyenes óraszámra vonatkozó jogosultság.
Fontos
A GitHub-fiók jogosultságairól további információt a GitHub Codespaces havi rendelkezésre álló tárhely és magóra című témakörben talál.
Jelentkezzen be a GitHub Codespaces vezérlőpultra.
Keresse meg a jelenleg futó, a
Azure-Samples/openai-chat-app-quickstartGitHub adattárból származó kódtereket.Nyissa meg a kódtér helyi menüjét, majd válassza a Törlés lehetőséget.
Lépjen be a GitHub Codespaces felületére.
Keresse meg a jelenleg futó, a
Azure-Samples/openai-chat-app-quickstart-dotnetGitHub adattárból származó kódtereket.Nyissa meg a kódtér helyi menüjét, majd válassza a Törlés lehetőséget.
Jelentkezz be a GitHub Codespaces műszerfal-ra.
Keresse meg a jelenleg futó, a
Azure-Samples/openai-chat-app-quickstart-javascriptGitHub adattárból származó kódtereket.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émát nem oldják meg, jelentse be az adattár Issues részébe.
Következő lépések
Ha a problémát nem oldják meg, jelentse be az adattár Issues részébe.
Ha a problémát nem oldják meg, jelentse be az adattár Issues részébe.