Azure OpenAI 보안 구성 요소 시작
이 문서에서는 Azure OpenAI 보안 구성 요소 샘플을 만들고 사용하는 방법을 보여줍니다. 목적은 Azure OpenAI에 대한 키 없는(Microsoft Entra ID) 인증을 위해 RBAC(역할 기반 액세스 제어)를 사용하여 Azure OpenAI 계정 프로비저닝을 시연하는 것입니다. 또한 이 채팅 앱 샘플에는 Azure OpenAI 리소스를 프로비전하고 Azure Developer CLI를 사용하여 Azure Container Apps에 앱을 배포하는 데 필요한 모든 인프라 및 구성이 포함되어 있습니다.
이 문서의 지침을 따르면 다음을 수행할 수 있습니다.
- 보안 Azure Container Chat 앱을 배포합니다.
- Azure OpenAI 액세스에 관리 ID를 사용합니다.
- OpenAI 라이브러리를 사용하여 Azure OpenAI LLM(대규모 언어 모델)과 채팅합니다.
이 문서를 완료하면 사용자 지정 코드 및 데이터로 새 프로젝트 수정을 시작할 수 있습니다.
참고 항목
이 문서에서는 문서의 예제 및 지침에 대한 기준으로 하나 이상의 AI 앱 템플릿을 사용합니다. AI 앱 템플릿은 AI 앱의 고품질 시작 지점을 보장하는 데 도움이 되는 잘 유지 관리되고 배포하기 쉬운 참조 구현을 제공합니다.
아키텍처 개요
채팅 앱의 간단한 아키텍처는 다음 다이어그램에 나와 있습니다.
채팅 앱은 Azure Container App으로 실행됩니다. 앱은 Microsoft Entra ID를 통해 관리 ID를 사용하여 API 키 대신 Azure OpenAI로 인증합니다. 채팅 앱은 Azure OpenAI를 사용하여 사용자 메시지에 대한 응답을 생성합니다.
애플리케이션 아키텍처는 다음 서비스 및 구성 요소를 사용합니다.
- Azure OpenAI 는 사용자의 쿼리를 보내는 AI 공급자를 나타냅니다.
- Azure Container Apps 는 애플리케이션이 호스트되는 컨테이너 환경입니다.
- 관리 ID는 동급 최고의 보안을 보장하고 개발자가 비밀을 안전하게 관리하기 위한 요구 사항을 제거하는 데 도움이 됩니다.
- Azure OpenAI, Azure Container Apps, Azure Container Registry, Azure Log Analytics 및 RBAC 역할을 포함하여 Azure 리소스를 프로비전하기 위한 Bicep 파일 입니다.
- Microsoft AI 채팅 프로토콜 은 AI 솔루션 및 언어에서 표준화된 API 계약을 제공합니다. 채팅 앱은 Microsoft AI 채팅 프로토콜을 준수하며, 이 프로토콜을 준수하는 모든 채팅 앱에 대해 평가 앱을 실행할 수 있습니다.
- 패키지를 사용하여 사용자 메시지에 대한 응답을 생성하는 Python
openai
입니다. - ReadableStream을 통해 JSON 선을 사용하여 백 엔드에서 응답을 스트리밍하는 기본 HTML/JavaScript 프런트 엔드입니다.
- Azure.AI.OpenAI NuGet 패키지를 사용하여 사용자 메시지에 대한 응답을 생성하는 Blazor 웹앱입니다.
- openai npm 패키지를 사용하여 사용자 메시지에 대한 응답을 생성하는 TypeScript 웹앱입니다.
비용
이 샘플에서 가격을 최대한 낮게 유지하기 위해 대부분의 리소스는 기본 또는 소비 가격 책정 계층을 사용합니다. 의도한 사용량에 따라 필요에 따라 계층 수준을 변경합니다. 요금 발생을 중지하려면 문서를 완료하면 리소스를 삭제합니다.
샘플 리포지토리의 비용에 대해 자세히 알아봅니다.
샘플 리포지토리의 비용에 대해 자세히 알아봅니다.
샘플 리포지토리의 비용에 대해 자세히 알아봅니다.
필수 조건
이 문서를 완료하는 데 필요한 모든 종속성을 갖춘 개발 컨테이너 환경을 사용할 수 있습니다. GitHub Codespaces(브라우저)에서 개발 컨테이너를 실행하거나 Visual Studio Code를 사용하여 로컬로 실행할 수 있습니다.
이 문서를 사용하려면 다음 필수 조건을 충족해야 합니다.
개방형 개발 환경
다음 지침을 사용하여 이 문서를 완료하는 데 필요한 모든 종속성을 포함하는 미리 구성된 개발 환경을 배포합니다.
GitHub Codespaces는 사용자 인터페이스로 웹용 Visual Studio Code를 사용하여 GitHub에서 관리하는 개발 컨테이너를 실행합니다. 가장 간단한 개발 환경을 위해서는 GitHub Codespaces를 사용하여 이 문서를 완료하는 데 필요한 올바른 개발자 도구와 종속성을 미리 설치합니다.
Important
모든 GitHub 계정은 2개의 코어 인스턴스를 사용하여 매월 최대 60시간 동안 Codespaces를 무료로 사용할 수 있습니다. 자세한 내용은 GitHub Codespaces 월별 포함 스토리지 및 코어 시간을 참조하세요.
다음 단계를 사용하여 GitHub 리포지토리의 분기에 새 GitHub Codespace main
를 Azure-Samples/openai-chat-app-quickstart
만듭니다.
다음 단추를 마우스 오른쪽 단추로 클릭하고 새 창에서 링크 열기를 선택합니다. 이 작업을 통해 개발 환경 및 설명서를 검토할 수 있습니다.
코드스페이 스 만들기 페이지에서 새 코드스페이 스 만들기를 검토하고 선택합니다 .
codespace가 생성될 때까지 기다립니다. 이 프로세스에는 몇 분 정도 걸릴 수 있습니다.
화면 맨 아래에 있는 터미널에서 Azure 개발자 CLI를 사용하여 Azure에 로그인합니다.
azd auth login
터미널에서 코드를 복사한 다음 브라우저에 붙여넣습니다. 지침에 따라 Azure 계정으로 인증합니다.
이 문서의 나머지 작업은 이 개발 컨테이너의 컨텍스트에서 수행됩니다.
다음 단계를 사용하여 GitHub 리포지토리의 분기에 새 GitHub Codespace main
를 Azure-Samples/openai-chat-app-quickstart-dotnet
만듭니다.
다음 단추를 마우스 오른쪽 단추로 클릭하고 새 창에서 링크 열기를 선택합니다. 이 작업을 통해 개발 환경 및 설명서를 검토할 수 있습니다.
코드스페이 스 만들기 페이지에서 코드스페이스 만들기를 검토하고 선택합니다 .
codespace가 생성될 때까지 기다립니다. 이 프로세스에는 몇 분 정도 걸릴 수 있습니다.
화면 맨 아래에 있는 터미널에서 Azure 개발자 CLI를 사용하여 Azure에 로그인합니다.
azd auth login
터미널에서 코드를 복사한 다음 브라우저에 붙여넣습니다. 지침에 따라 Azure 계정으로 인증합니다.
이 문서의 나머지 작업은 이 개발 컨테이너의 컨텍스트에서 수행됩니다.
다음 단계를 사용하여 GitHub 리포지토리의 분기에 새 GitHub Codespace main
를 Azure-Samples/openai-chat-app-quickstart-javascript
만듭니다.
- 다음 단추를 마우스 오른쪽 단추로 클릭하고 새 창에서 링크 열기를 선택합니다. 이 작업을 통해 개발 환경 및 설명서를 검토할 수 있습니다.
코드스페이 스 만들기 페이지에서 새 코드스페이 스 만들기를 검토하고 선택합니다 .
codespace가 생성될 때까지 기다립니다. 이 프로세스에는 몇 분 정도 걸릴 수 있습니다.
화면 맨 아래에 있는 터미널에서 Azure 개발자 CLI를 사용하여 Azure에 로그인합니다.
azd auth login
터미널에서 코드를 복사한 다음 브라우저에 붙여넣습니다. 지침에 따라 Azure 계정으로 인증합니다.
이 문서의 나머지 작업은 이 개발 컨테이너의 컨텍스트에서 수행됩니다.
배포 및 실행
샘플 리포지토리에는 채팅 앱 Azure 배포를 위한 모든 코드 및 구성 파일이 포함되어 있습니다. 다음 단계에서는 샘플 채팅 앱 Azure 배포 프로세스를 안내합니다.
Azure에 채팅 앱 배포
Important
이 섹션에서 만든 Azure 리소스는 즉시 비용이 발생합니다. 이러한 리소스는 명령이 완전히 실행되기 전에 중단하더라도 비용이 발생할 수 있습니다.
Azure 리소스 프로비저닝 및 소스 코드 배포에 대해 다음 Azure Developer CLI 명령을 실행합니다.
azd up
다음 표를 사용하여 프롬프트에 응답합니다.
prompt 답변 환경 이름 짧고 소문자를 유지합니다. 이름 또는 별칭을 추가합니다. 예들 들어 secure-chat
입니다. 리소스 그룹 이름의 일부로 사용됩니다.구독 리소스를 만들 구독을 선택합니다. 위치(호스팅용) 목록에서 가까운 위치를 선택합니다. OpenAI 모델의 위치 목록에서 가까운 위치를 선택합니다. 첫 번째 위치와 동일한 위치를 사용할 수 있는 경우 해당 위치를 선택합니다. 앱이 배포될 때까지 기다립니다. 배포를 완료하는 데 일반적으로 5~10분이 걸립니다.
채팅 앱을 사용하여 큰 언어 모델에 질문하기
터미널은 애플리케이션 배포에 성공한 후 URL을 표시합니다.
브라우저에서 채팅 애플리케이션을 열려면
Deploying service web
이라고 표시된 URL을 선택합니다.브라우저에서 "관리 ID가 키보다 더 나은 이유는 무엇인가요?"와 같은 질문을 입력합니다.
답변은 Azure OpenAI에서 제공되며 결과가 표시됩니다.
샘플 코드 탐색
OpenAI 및 Azure OpenAI 서비스는 일반적인 Python 클라이언트 라이브러리를 사용하지만 Azure OpenAI 엔드포인트를 사용할 때는 작은 코드 변경이 필요합니다. 이 샘플에서 Microsoft Entra ID를 사용하여 키 없는 인증을 구성하고 Azure OpenAI와 통신하는 방법을 살펴보겠습니다.
관리 ID를 사용하여 인증 구성
이 샘플에서 파일은 src\quartapp\chat.py
키 없는 인증 구성으로 시작합니다.
다음 코드 조각은 azure.identity.aio 모듈을 사용하여 비동기 Microsoft Entra 인증 흐름을 만듭니다.
다음 코드 조각은 환경 변수를 사용하여 AZURE_CLIENT_ID
azd
사용자 할당 관리 ID를 통해 인증할 수 있는 ManagedIdentityCredential 인스턴스를 만듭니다.
user_assigned_managed_identity_credential = ManagedIdentityCredential(client_id=os.getenv("AZURE_CLIENT_ID"))
참고 항목
리소스 환경 변수는 azd
앱 배포 중에 azd
프로비전됩니다.
다음 코드 조각은 리소스 환경 변수를 사용하여 AZURE_TENANT_ID
azd
현재 Microsoft Entra 테넌트로 인증할 수 있는 AzureDeveloperCliCredential 인스턴스를 만듭니다.
azure_dev_cli_credential = AzureDeveloperCliCredential(tenant_id=os.getenv("AZURE_TENANT_ID"), process_timeout=60)
Azure ID 클라이언트 라이브러리는 Azure Core 라이브러리의 TokenCredential 프로토콜을 구현하는 공용 클래스인 자격 증명을 제공합니다. 자격 증명은 Microsoft Entra ID에서 액세스 토큰을 획득하기 위한 고유한 인증 흐름을 나타냅니다. 이러한 자격 증명을 함께 연결하여 정렬된 일련의 인증 메커니즘을 구성할 수 있습니다.
다음 코드 조각은 using a 및 aChainedTokenCredential
를 ManagedIdentityCredential
AzureDeveloperCliCredential
만듭니다.
- Azure
ManagedIdentityCredential
Functions 및 Azure 앱 Service에 사용됩니다. 사용자 할당 관리 ID는 에client_id
전달ManagedIdentityCredential
하여 지원됩니다. - 로컬
AzureDeveloperCliCredential
개발에 사용됩니다. 이전에 사용할 Microsoft Entra 테넌트에 따라 설정되었습니다.
azure_credential = ChainedTokenCredential(
user_assigned_managed_identity_credential,
azure_dev_cli_credential
)
팁
첫 번째 유효한 Microsoft Entra 액세스 토큰이 사용되므로 자격 증명 순서가 중요합니다. 자세한 내용은 ChainedTokenCredential 개요 문서를 참조하세요.
다음 코드 조각은 선택한 Azure 자격 증명을 기반으로 Azure OpenAI 토큰 공급자를 가져옵니다. 이 값은 두 개의 인수를 사용하여 azure.identity.aio.get_bearer_token_provider 호출하여 가져옵니다.
azure_credential
ChainedTokenCredential
: 요청을 인증하기 위해 이전에 만든 인스턴스입니다.https://cognitiveservices.azure.com/.default
: 하나 이상의 전달자 토큰 범위가 필요합니다. 이 경우 Azure Cognitive Services 엔드포인트입니다 .
token_provider = get_bearer_token_provider(
azure_credential, "https://cognitiveservices.azure.com/.default"
)
다음 줄에서는 앱 배포 중에 AZURE_OPENAI_ENDPOINT
프로비전되는 필수 AZURE_OPENAI_CHATGPT_DEPLOYMENT
및 azd
azd
리소스 환경 변수를 확인합니다. 값이 없으면 오류가 발생합니다.
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")
이 코드 조각은 Azure OpenAI 클라이언트를 초기화하고 , api_version
및 azure_endpoint
(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,
)
다음 줄에서는 API 호출에 사용할 Azure OpenAI 모델 배포 이름을 설정합니다.
bp.openai_model = os.getenv("AZURE_OPENAI_CHATGPT_DEPLOYMENT")
참고 항목
OpenAI는 model
키워드 인수를 사용하여 사용할 모델을 지정합니다. Azure OpenAI에는 고유한 모델 배포 개념이 있습니다. Azure OpenAI를 사용하는 경우 Azure OpenAI model
모델 배포 중에 선택한 기본 배포 이름을 참조해야 합니다.
이 함수가 완료되면 클라이언트가 올바르게 구성되고 Azure OpenAI 서비스와 상호 작용할 준비가 됩니다.
OpenAI 클라이언트 및 모델을 사용하는 응답 스트림
경로 response_stream
에서 채팅 완료 호출을 처리합니다. 다음 코드 조각은 사용 방법 및 openai_client
사용 방법을 model
보여 있습니다.
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,
)
샘플 코드 탐색
.NET 애플리케이션은 Azure.AI.OpenAI 클라이언트 라이브러리를 사용하여 OpenAI 라이브러리에 종속되는 Azure OpenAI 서비스와 통신합니다. 샘플 앱은 Microsoft Entra ID를 사용하여 Azure OpenAI와 통신하도록 키 없는 인증을 구성합니다.
인증 및 서비스 등록 구성
이 샘플에서는 파일에 키 없는 인증이 program.cs
구성됩니다. 다음 코드 조각은 사용자가 할당한 AZURE_CLIENT_ID
관리 ID를 통해 인증할 수 있는 ManagedIdentityCredentialazd
위해 설정된 환경 변수를 사용합니다.
var userAssignedIdentityCredential =
new ManagedIdentityCredential(builder.Configuration.GetValue<string>("AZURE_CLIENT_ID"));
참고 항목
리소스 환경 변수는 azd
앱 배포 중에 azd
프로비전됩니다.
다음 코드 조각에서는 설정된 환경 변수를 사용하여 AZURE_TENANT_ID
로그인한 azd
계정을 사용하여 로컬로 인증할 수 있는 AzureDeveloperCliCredentialazd
다.
var azureDevCliCredential = new AzureDeveloperCliCredential(
new AzureDeveloperCliCredentialOptions()
{
TenantId = builder.Configuration.GetValue<string>("AZURE_TENANT_ID")
});
Azure ID 클라이언트 라이브러리는 Azure Core 라이브러리의 TokenCredential 프로토콜을 구현하는 자격 증명 클래스를 제공합니다. 자격 증명은 Microsoft Entra ID에서 액세스 토큰을 획득하기 위한 고유한 인증 흐름을 나타냅니다. 이러한 자격 증명은 정렬된 일련의 인증 메커니즘을 구성하여 ChainedTokenCredential
시도할 수 있습니다.
다음 코드 조각은 종속성 주입을 AzureOpenAIClient
등록하고 using a 및 a ChainedTokenCredential
를 ManagedIdentityCredential
AzureDeveloperCliCredential
만듭니다.
- Azure
ManagedIdentityCredential
Functions 및 Azure 앱 Service에 사용됩니다. 사용자 할당 관리 ID는 에 제공된 ID를AZURE_CLIENT_ID
사용하여 지원됩니다ManagedIdentityCredential
. - 로컬
AzureDeveloperCliCredential
개발에 사용됩니다. 이전에 사용할 Microsoft Entra 테넌트에 따라 설정되었습니다.
builder.Services.AddAzureClients(
clientBuilder => {
clientBuilder.AddClient<AzureOpenAIClient, AzureOpenAIClientOptions>((options, _, _)
=> new AzureOpenAIClient(
new Uri(endpoint),
new ChainedTokenCredential(
userAssignedIdentityCredential, azureDevCliCredential), options));
});
팁
첫 번째 유효한 Microsoft Entra 액세스 토큰이 사용되므로 자격 증명 순서가 중요합니다. 자세한 내용은 ChainedTokenCredential 개요 문서를 참조하세요.
Azure OpenAI 클라이언트를 사용하여 채팅 완료 가져오기
Blazor 웹앱은 등록된 AzureOpenAIClient
구성 요소를 구성 요소 맨 위에 삽입합니다 Home.Razor
.
@inject AzureOpenAIClient azureOpenAIClient
사용자가 양식을 AzureOpenAIClient
제출하면 OpenAI 모델에 프롬프트를 보내 완성을 생성합니다.
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));
샘플 코드 탐색
OpenAI 및 Azure OpenAI 서비스는 openai(일반 JavaScript 클라이언트 라이브러리)를 사용하지만 Azure OpenAI 엔드포인트를 사용할 때는 작은 코드 변경이 필요합니다. 이 샘플에서 Microsoft Entra ID를 사용하여 키 없는 인증을 구성하고 Azure OpenAI와 통신하는 방법을 살펴보겠습니다.
각 환경에 대한 키 없는 인증
Azure ID 클라이언트 라이브러리는 Azure Core 라이브러리의 TokenCredential 프로토콜을 구현하는 자격 증명 클래스를 제공합니다. 자격 증명은 Microsoft Entra ID에서 액세스 토큰을 획득하기 위한 고유한 인증 흐름을 나타냅니다. 이러한 자격 증명은 정렬된 일련의 인증 메커니즘을 구성하여 ChainedTokenCredential
시도할 수 있습니다. 이렇게 하면 프로덕션 및 로컬 개발 환경 모두에서 동일한 코드를 배포할 수 있습니다.
관리 ID를 사용하여 인증 구성
이 샘플 ./src/azure-authentication.ts
에서는 Azure OpenAI에 키 없는 인증을 제공하는 몇 가지 함수를 제공합니다.
첫 번째 함수는 getChainedCredential()
체인에 있는 유효한 첫 번째 Azure 자격 증명을 반환합니다.
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 이 먼저 시도됩니다. 프로덕션 런타임에서 AZURE_CLIENT_ID 환경 변수로 설정되며 사용자 할당 관리 ID를 통해 인증할 수 있습니다.
-
AzureDeveloperCliCredential 은 두 번째로 시도됩니다. 개발에서 Azure CLI
az login
를 사용하여 로그인할 때 설정됩니다.
팁
첫 번째 유효한 Microsoft Entra 액세스 토큰이 사용되므로 자격 증명 순서가 중요합니다. 자세한 내용은 ChainedTokenCredential 개요 문서를 참조하세요.
OpenAI에 대한 전달자 토큰 가져오기
두 번째 함수 ./src/azure-authentication.ts
는 Azure Cognitive Services 엔드포인트로 범위가 지정된 전달자 토큰을 제공하는 콜백을 getTokenProvider()
.
function getTokenProvider(): () => Promise<string> {
const credential = getChainedCredential();
const scope = "https://cognitiveservices.azure.com/.default";
return getBearerTokenProvider(credential, scope);
}
위의 코드 조각은 자격 증명 및 범위를 가져오는 데 사용한 getBearerTokenProvider
다음 전달자 토큰을 제공하는 콜백을 반환합니다.
인증된 Azure OpenAI 클라이언트 만들기
세 번째 함수 ./src/azure-authentication.ts
는 Azure OpenAI 클라이언트를 반환하는 함수입니다 getOpenAiClient()
.
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);
}
}
이 코드는 올바르게 범위가 지정된 토큰을 포함하여 옵션을 사용하고 클라이언트를 AzureOpenAI
만듭니다.
Azure OpenAI를 사용하여 채팅 답변 스트리밍
다음 Fastify 경로 처리기를 ./src/openai-chat-api.ts
사용하여 Azure OpenAI에 메시지를 보내고 응답을 스트리밍합니다.
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()
}
이 함수는 이전 메시지를 포함하여 채팅 대화를 가져오고 Azure OpenAI로 보냅니다. 스트림 청크가 Azure OpenAI에서 반환되면 클라이언트로 전송됩니다.
기타 보안 고려 사항
이 문서에서는 샘플이 Azure OpenAI 서비스에 인증하는 데 사용하는 ChainedTokenCredential
방법을 보여 줍니다.
또한 샘플에는 코드로서의 인프라 파일을 검색하고 검색된 문제가 포함된 보고서를 생성하는 GitHub Action 이 있습니다. 사용자 고유의 리포지토리에서 지속적인 모범 사례를 보장하려면 템플릿 을 기반으로 솔루션을 만드는 모든 사용자가 GitHub 비밀 검사 설정을 사용하도록 설정하는 것이 좋습니다.
다음과 같은 다른 보안 조치를 고려합니다.
방화벽 및/또는 Virtual Network를 사용하여 Azure Container Apps 인스턴스 보호
리소스 정리
Azure 리소스 정리
이 문서에서 만들어진 Azure 리소스는 Azure 구독에 요금이 청구됩니다. 앞으로 이러한 리소스가 필요하지 않을 것으로 예상되는 경우 추가 요금이 발생하지 않도록 삭제합니다.
Azure 리소스를 삭제하고 소스 코드를 제거하려면 다음 Azure Developer CLI 명령을 실행합니다.
azd down --purge
GitHub Codespaces 정리
GitHub Codespaces 환경을 삭제하면 계정에 대해 얻을 수 있는 코어당 무료 사용 권한을 최대화할 수 있습니다.
Important
GitHub 계정의 자격에 대한 자세한 내용은 GitHub Codespaces 월별 포함된 스토리지 및 코어 시간을 참조하세요.
GitHub Codespaces 대시보드(https://github.com/codespaces)에 로그인합니다.
Azure-Samples/openai-chat-app-quickstart
GitHub 리포지토리에서 제공된 현재 실행 중인 Codespaces를 찾습니다.codespace에 대한 상황에 맞는 메뉴를 열고 삭제를 선택합니다.
GitHub Codespaces 대시보드(https://github.com/codespaces)에 로그인합니다.
Azure-Samples/openai-chat-app-quickstart-dotnet
GitHub 리포지토리에서 제공된 현재 실행 중인 Codespaces를 찾습니다.codespace에 대한 상황에 맞는 메뉴를 열고 삭제를 선택합니다.
GitHub Codespaces 대시보드(https://github.com/codespaces)에 로그인합니다.
Azure-Samples/openai-chat-app-quickstart-javascript
GitHub 리포지토리에서 제공된 현재 실행 중인 Codespaces를 찾습니다.codespace에 대한 상황에 맞는 메뉴를 열고 삭제를 선택합니다.
도움말 보기
문제가 해결되지 않으면 리포지토리의 문제에 문제를 기록합니다.
문제가 해결되지 않으면 리포지토리의 문제에 문제를 기록합니다.