page_type | 언어 | 제품 | urlfragment | 이름 | 설명 | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
견본 |
|
| Azure-Search-Openai-Demo-Csharp | ChatGpt + Enterprise Data (CSHARP) | OpenAI 및 AI 검색을 사용하여 데이터와 채팅하는 CSHARP 샘플 앱. |
이 샘플은 검색 증강 생성 패턴을 사용하여 자신의 데이터를 통해 ChatGpt와 같은 경험을 만드는 몇 가지 접근법을 보여줍니다. Azure OpenAI 서비스를 사용하여 ChatGpt 모델 ( gpt-4o-mini
)에 액세스하고 AZURE AI 검색 데이터 인덱싱 및 검색을 검색합니다.
리포에는 샘플 데이터가 포함되어있어 엔드 투 엔드를 시도 할 준비가되었습니다. 이 샘플 응용 프로그램에서 우리는 Contoso Electronics라는 가상의 회사를 사용하며, 그 경험을 통해 직원들은 직무 설명 및 역할뿐만 아니라 혜택, 내부 정책에 대한 질문을 할 수 있습니다.
이 응용 프로그램이 구축 된 방법에 대한 자세한 내용은 다음을 확인하십시오.
우리는 당신의 의견을 듣고 싶습니다! 지능형 앱을 구축하거나 현재 구축하는 데 관심이 있습니까? 이 설문 조사를 완료하는 데 몇 분이 걸립니다.
설문 조사를하십시오
이 예제를 배포하고 실행하려면
Microsoft.Authorization/roleAssignments/write
권한 (예 : 사용자 액세스 관리자 또는 소유자가 있어야합니다. 경고
기본적 으로이 샘플은 Azure Container 앱과 월별 비용이있는 Azure AI 검색 자원과 문서 페이지 당 비용이있는 Azure AI 문서 인텔리전스 리소스를 만듭니다. Infra 폴더 아래에서 매개 변수 파일을 변경 하여이 비용을 피하려면 각각의 무료 버전으로 전환 할 수 있습니다 (예 : 구독 당 최대 1 개의 무료 AZURE AI 검색 자원을 가질 수 있으며 무료 AZURE AI Document Resource는 각 문서의 첫 2 페이지 만 분석 할 수 있습니다).
가격은 지역 및 사용당 다양하므로 사용에 대한 정확한 비용을 예측할 수 없습니다. 그러나 아래 리소스에 대한 Azure 가격 계산기를 사용해 볼 수 있습니다.
비용을 줄이려면 다양한 서비스를 위해 무료 SKU로 전환 할 수 있지만 SKU에는 한계가 있습니다. 자세한 내용은 최소한의 비용으로 배포에 대한이 안내서를 참조하십시오.
azd down
실행하여 더 이상 사용하지 않는 경우 앱을 중단해야합니다.
이 프로젝트를 설정할 수있는 몇 가지 옵션이 있습니다. 시작하는 가장 쉬운 방법은 GitHub Codespaces입니다. 모든 도구를 설정하므로 원하는 경우 로컬로 설정할 수도 있습니다.
GitHub Codespaces를 사용 하여이 리포트를 거의 실행할 수 있습니다. GitHub Codespaces는 브라우저에서 웹 기반 대 코드를 열게됩니다.
관련 옵션은 VS Code 원격 컨테이너이며 Dev Containers 확장을 사용하여 로컬 대 코드에서 프로젝트를 열 것입니다.
다음 전제 조건을 설치하십시오.
Azure 개발자 CLI
.NET 8
git
PowerShell 7+ (PWSH) - Windows 사용자 전용.
중요 : PowerShell 명령에서
pwsh.exe
실행할 수 있는지 확인하십시오. 이것이 실패하면 PowerShell을 업그레이드해야 할 것입니다.
도커
중요 :
azd
프로비저닝 / 배포 명령을 실행하기 전에 Docker가 실행 중입니다.
그런 다음 다음 명령을 실행하여 지역 환경에서 프로젝트를 받으십시오.
azd auth login
실행하십시오azd init -t azure-search-openai-demo-csharp
실행하십시오azd env new azure-search-openai-demo-csharp
실행하십시오라이브 스트림 : Codespaces 라이브 스트림에서 처음부터 배포 : Windows 11에서 처음부터 배포
중요 :
azd
프로비저닝 / 배포 명령을 실행하기 전에 Docker가 실행 중입니다.
기존 Azure 서비스가없고 새로운 배포에서 시작하려는 경우 다음 명령을 실행하십시오.
실행 azd up
이는 Azure Resources를 제공 하고이 샘플을 ./data
폴더에있는 파일을 기반으로 검색 지수를 구축하는 것을 포함하여 해당 리소스에 배포됩니다.
참고 :이 응용 프로그램은
gpt-4o-mini
모델을 사용합니다. 배치 할 영역을 선택할 때 해당 지역 (예 : Eastus)에서 사용할 수 있는지 확인하십시오. 자세한 내용은 Azure OpenAI 서비스 문서를 참조하십시오.
응용 프로그램이 성공적으로 배포되면 콘솔에 URL이 인쇄됩니다. 해당 URL을 클릭하여 브라우저의 응용 프로그램과 상호 작용하십시오.
다음과 같습니다.
[! 참고] : 응용 프로그램이 완전히 배포되는 데 몇 분이 걸릴 수 있습니다. 응용 프로그램이 배포 된 후에는 벡터 데이터베이스에 추가 할 문서를 처리하는 데 몇 분이 걸립니다.
사용하려는 Azure에 기존 리소스가있는 경우 다음 azd
환경 변수를 설정하여 azd
를 사용하도록 구성 할 수 있습니다.
azd env set AZURE_OPENAI_SERVICE {Name of existing OpenAI service}
azd env set AZURE_OPENAI_RESOURCE_GROUP {Name of existing resource group that OpenAI service is provisioned to}
azd env set AZURE_OPENAI_CHATGPT_DEPLOYMENT {Name of existing ChatGPT deployment}
. chatgpt 배포가 기본 '채팅'이 아닌 경우에만 필요합니다.azd env set AZURE_OPENAI_EMBEDDING_DEPLOYMENT {Name of existing embedding model deployment}
. 임베딩 모델 배포가 기본 embedding
아닌 경우에만 필요합니다.azd up
실행하십시오 메모
기존 검색 및 스토리지 계정을 사용할 수도 있습니다. 기존 리소스를 구성하기 위해 azd env set
에 전달할 환경 변수 목록은 ./infra/main.parameters.json
참조하십시오.
중요한
azd
프로비저닝 / 배포 명령을 실행하기 전에 Docker가 실행되고 있는지 확인하십시오.
azd up
실행하십시오 메모
리포지토리에 AZD가 지원 된 이두박이 파일이 있는지 확인하고 초기 GitHub 작업 워크 플로우 파일을 추가하여 수동으로 (초기 배포를 위해) 또는 코드 변경 (최신 변경으로 자동 재배치)을 앱 공간과 호환 할 수 있도록 코드 변경 (최신 변경 사항으로 자동 재배치)을 추가 할 수 있으므로 메인 BICEP를 변경하고 메인 파라미터 파일을 변경하여 AZD가 기존 태그에 배포 할 수 있도록해야합니다.
"resourceGroupName" : {
"value" : " ${AZURE_RESOURCE_GROUP} "
}
"tags" : {
"value" : " ${AZURE_TAGS} "
}
param resourceGroupName string = ''
param tags string = ''
var baseTags = { 'azd-env-name' : environmentName }
var updatedTags = union ( empty ( tags ) ? {} : base64ToJson ( tags ), baseTags )
Make sure to use " updatedTags " when assigning " tags " to resource group created in your bicep file and update the other resources to use " baseTags " instead of " tags ". For example -
``` json
resource rg 'Microsoft.Resources/resourceGroups@2021-04-01' = {
name : ! empty ( resourceGroupName ) ? resourceGroupName : '${ abbrs . resourcesResourceGroups }${ environmentName }'
location : location
tags : updatedTags
}
중요한
azd
프로비저닝 / 배포 명령을 실행하기 전에 Docker가 실행되고 있는지 확인하십시오.
azd auth login
실행하십시오
응용 프로그램이 배포 된 후 환경 변수 AZURE_KEY_VAULT_ENDPOINT
설정하십시오. .azure/your-environment-name/.env 파일 또는 Azure 포털에서 값을 찾을 수 있습니다.
다음 .NET CLI 명령을 실행하여 ASP.NET CORE MINEMAL API 서버 (클라이언트 호스트)를 시작하십시오.
dotnet run --project ./app/backend/MinimalApi.csproj --urls=http://localhost:7181/
http : // localhost : 7181로 이동하여 앱을 테스트하십시오.
이 샘플에는 .NET Maui 클라이언트가 포함되어 있으며 Windows/MacOS 데스크탑 또는 Android 및 iOS 장치에서 실행할 수있는 앱으로 경험을 포장합니다. 여기의 Maui 클라이언트는 Blazor Hybrid를 사용하여 구현되어 웹 사이트 프론트 엔드와 대부분의 코드를 공유 할 수 있습니다.
Maui 클라이언트가 포함 된 솔루션을 열려면 App/App-Maui.sln 오픈
앱/maui-blazor/mauiprogram.cs 편집, 백엔드의 URL로 client.BaseAddress
업데이트합니다.
Azure에서 실행중인 경우 위의 단계에서 서비스 백엔드의 URL을 사용하십시오. 로컬로 실행하는 경우 http : // localhost : 7181을 사용하십시오.
Mauiblazor를 시작 프로젝트로 설정하고 앱을 실행하십시오.
다른 사람에게 배포 된 환경 및 기존 환경에 대한 액세스 권한을 부여하려면 다음을 실행하십시오.
azd init -t azure-search-openai-demo-csharp
실행하십시오azd env refresh -e {environment name}
-이 명령을 실행하려면 AZD 환경 이름, 구독 ID 및 위치가 필요합니다. ./azure/{env name}/.env
파일에서 해당 값을 찾을 수 있습니다. 이렇게하면 앱을 로컬로 실행하는 데 필요한 모든 설정으로 AZD Environment의 .env 파일이 채워집니다.pwsh ./scripts/roles.ps1
실행 - 이렇게하면 필요한 모든 역할을 사용자에게 할당하여 앱을 로컬로 실행할 수 있습니다. 구독에서 역할을 수행하는 데 필요한 권한이없는 경우이 스크립트를 실행해야 할 수도 있습니다. AZD .ENV 파일 또는 ACZURE ID로 AZD. ENV 파일에서 AZURE_PRINCIPAL_ID
환경 변수를 설정하여 az account show
로 얻을 수 있습니다. azd down
실행하십시오
azd
가 배포 한 Azure 컨테이너 앱으로 이동하십시오. azd
완료되면 ( "엔드 포인트") URL이 인쇄되거나 Azure 포털에서 찾을 수 있습니다.웹 앱에서 일단 :
오류 로그와 함께 애플리케이션 통찰력 및 각 요청의 추적을 가능하게하려면 azd up
실행하기 전에 AZURE_USE_APPLICATION_INSIGHTS
변수를 true로 설정하십시오.
azd env set AZURE_USE_APPLICATION_INSIGHTS true
실행하십시오azd up
실행하십시오성능 데이터를 보려면 리소스 그룹의 Application Insights 리소스로 이동하려면 "Investigate-> Performance"블레이드를 클릭하고 HTTP 요청으로 이동하여 타이밍 데이터를 확인하십시오. 채팅 요청의 성능을 검사하려면 "샘플에 드릴"버튼을 사용하여 채팅 요청에 대해 작성된 모든 API 호출의 엔드 투 엔드 추적을 확인하십시오.
예외 및 서버 오류를 보려면 "Investigate-> FAILURES"블레이드로 이동하여 필터링 도구를 사용하여 특정 예외를 찾으십시오. 오른쪽에는 파이썬 스택 추적을 볼 수 있습니다.
기본적으로 배포 된 Azure Container 앱에는 인증 또는 액세스 제한이 활성화되지 않으므로 컨테이너 앱에 대한 라우팅 가능한 네트워크 액세스가있는 사람은 색인 데이터와 채팅 할 수 있습니다. 컨테이너 추가 앱 인증 자습서를 따르고 배포 된 컨테이너 앱에 대해 설정하여 Azure Active Directory에 대한 인증이 필요할 수 있습니다.
그런 다음 특정 사용자 또는 그룹 세트에 대한 액세스를 제한하려면 "할당 필요"를 변경하여 Azure AD 앱을 제한하는 단계를 따라야합니다. 엔터프라이즈 응용 프로그램에서 옵션을 한 다음 사용자/그룹 액세스 할당. 명시 적 액세스 권한이 부여되지 않은 사용자는 오류 메시지를 받게됩니다 -AADSTS50105 : 관리자는 응용 프로그램에 특별히 부여되지 않은 ( '할당 된') 액세스가없는 한 사용자를 차단하기 위해 응용 프로그램 <app_name>을 구성했습니다 .-
GPT-4o-mini
사용하면 텍스트와 이미지를 소스 내용으로 제공하여 강화 된 재고 증강 생성을 지원할 수 있습니다. 비전 지원을 활성화하려면 프로비저닝 할 때 USE_VISION
활성화하고 GPT-4o
또는 GPT-4o-mini
모델을 사용해야합니다.
메모
이전에 응용 프로그램을 이미 배포 한 경우 GPT-4O 지원을 활성화 한 후 지원 자료를 다시 표시하고 응용 프로그램을 다시 배포해야합니다. GPT-4O 지원을 활성화하려면 새로운 필드를 검색 인덱스에 추가해야하기 때문입니다.
Azure OpenAI Service를 사용하여 GPT-4V 지원을 활성화하려면 다음 명령을 실행하십시오.
azd env set USE_VISION true
azd env set USE_AOAI true
azd env set AZURE_OPENAI_CHATGPT_MODEL_NAME gpt-4o-mini
azd env set AZURE_OPENAI_RESOURCE_LOCATION eastus # Please check the gpt model availability for more details.
azd up
OpenAI로 비전 지원을 가능하게하려면 다음 명령을 실행하십시오.
azd env set USE_VISION true
azd env set USE_AOAI false
azd env set OPENAI_CHATGPT_DEPLOYMENT gpt-4o
azd up
이전에 배치 된 리소스를 정리하려면 다음 명령을 실행하십시오.
azd down --purge
azd env set AZD_PREPDOCS_RAN false # This is to ensure that the documents are re-indexed with the new fields.
아래 팁 외에도 Docs 폴더에서 광범위한 문서를 찾을 수 있습니다.
이 샘플은 자체 생산 응용 프로그램의 출발점으로 설계되었지만 생산에 배포하기 전에 보안 및 성능을 철저히 검토해야합니다. 고려해야 할 사항은 다음과 같습니다.
Openai 용량 : 기본 TPM (분당 토큰)은 30K로 설정됩니다. 이는 분당 약 30 개의 대화와 같습니다 (사용자 메시지/응답 당 1K를 가정). infra/main.bicep
의 chatGptDeploymentCapacity
및 embeddingDeploymentCapacity
매개 변수를 계정의 최대 용량으로 변경하여 용량을 늘릴 수 있습니다. Azure Openai Studio의 할당량 탭을보고 얼마나 많은 용량을 가지고 있는지 이해할 수 있습니다.
Azure Storage : 기본 스토리지 계정은 Standard_LRS
SKU를 사용합니다. 탄력성을 향상 시키려면 생산 배포에 Standard_ZRS
사용하는 것이 좋습니다. 이는 infra/main.bicep
의 storage
모듈 아래에서 sku
속성을 사용하는 것을 지정할 수 있습니다.
Azure AI 검색 : 검색 서비스 용량에 대한 오류가 초과되는 경우 infra/core/search/search-services.bicep
또는 Azure 포털에서 수동으로 확장하여 replicaCount
수를 늘리는 것이 도움이 될 수 있습니다.
Azure Container Apps : 기본적 으로이 응용 프로그램은 0.5 CPU 코어 및 1GB 메모리로 컨테이너를 배포합니다. 최소 복제본은 1 및 최대 10입니다 infra/core/host/container-app.bicep
이 앱의 경우 containerCpuCoreCount
, containerMaxReplicas
, containerMemory
, containerMinReplicas
와 같은 값을 설정할 수 있습니다. 자동 스케일 규칙 또는 예약 된 스케일링 규칙을 사용하고 부하에 따라 최대/최소값을 확장 할 수 있습니다.
인증 : 기본적으로 배포 된 앱에 공개적으로 액세스 할 수 있습니다. 인증 된 사용자에게 액세스를 제한하는 것이 좋습니다. 인증을 활성화하는 방법은 위의 인증 활성화를 참조하십시오.
네트워킹 : 가상 네트워크 내에서 배포하는 것이 좋습니다. 앱이 내부 엔터프라이즈 사용에만 해당되는 경우 개인 DNS 영역을 사용하십시오. 또한 방화벽 및 기타 형태의 보호에 APIM (Azure API Management)을 사용하는 것을 고려하십시오. 자세한 내용은 Azure Openai Landing Zone Reference Architecture를 읽으십시오.
로드 테스트 : 예상 사용자 수에 대한로드 테스트를 실행하는 것이 좋습니다.
Azure.AI.OpenAI
nuget 패키지메모
이 데모에 사용 된 PDF 문서에는 언어 모델 (Azure OpenAi Service)을 사용하여 생성 된 정보가 포함되어 있습니다. 이 문서에 포함 된 정보는 데모 목적으로 만 사용되며 Microsoft의 의견이나 신념을 반영하지 않습니다. Microsoft는이 문서에 포함 된 정보와 관련하여 완전성, 정확성, 신뢰성, 적합성 또는 가용성에 대해 어떤 종류의 표현 또는 묵시적 임의의 진술이나 보증도하지 않습니다. 모든 권리가 Microsoft에 보유됩니다.
질문 : Azure AI 검색이 큰 문서 검색을 지원할 때 왜 PDF를 청크로 분해해야합니까?
답변 : 청킹을 통해 토큰 제한으로 인해 OpenAI에 보내는 정보의 양을 제한 할 수 있습니다. 컨텐츠를 분해함으로써 OpenAI에 주입 할 수있는 잠재적 인 텍스트 덩어리를 쉽게 찾을 수 있습니다. 우리가 사용하는 청킹 방법은 하나의 청크를 끝내는 문장이 다음에 시작되도록 텍스트의 슬라이딩 창을 활용합니다. 이를 통해 텍스트의 맥락을 잃을 가능성을 줄일 수 있습니다.