다음을 통해 공유


Azure OpenAI 웹앱 사용

Azure AI Studio, Azure OpenAI Studio, API 및 SDK와 함께 사용자 지정 가능한 독립 실행형 웹앱을 사용하면 그래픽 사용자 인터페이스를 사용하여 Azure OpenAI 모델과 상호 작용할 수 있습니다. 주요 기능은 다음과 같습니다.

  • 여러 데이터 원본과 연결하여 Azure AI Search, 프롬프트 흐름 등을 포함한 풍부한 쿼리 및 검색 증강 생성을 지원하세요.
  • Cosmos DB를 통한 대화 내역 및 사용자 피드백 수집.
  • Microsoft Entra ID를 통한 역할 기반 Access Control을 사용하여 인증합니다.
  • 환경 변수를 사용하여 사용자 인터페이스, 데이터 소스 및 기능을 사용자 지정하세요(Azure Portal을 통한 코드 없음).
  • 기본 웹 애플리케이션 소스 코드를 오픈 소스 리포지토리로 수정할 수 있습니다.

Azure AI Studio 또는 Azure OpenAI Studio를 사용하거나 로컬 머신(여기서 리포지토리에서 사용할 수 있는 지침)을 통해 Azure Portal 또는 Azure Developer CLI를 통해 수동 배포를 통해 앱을 배포할 수있습니다. 배포 채널에 따라 웹 애플리케이션을 통해 채팅할 데이터 소스를 미리 로드할 수 있지만, 배포 후에는 변경할 수 있습니다.

Azure AI Studio는 웹 애플리케이션을 통해 데이터와 채팅하려는 Azure OpenAI 초보자에게 초기 배포 및 데이터 원본 구성에 권장되는 매체입니다.

웹앱 인터페이스를 보여 주는 스크린샷.

중요 사항

  • 이 웹 애플리케이션과 많은 기능은 미리보기 버전이므로 버그가 발생할 수 있으며 모든 기능이 완성되지 않았을 수 있습니다. 버그를 발견하거나 도움이 필요한 경우 관련 GitHub 리포지토리에서 문제를 제기하세요.
  • 웹앱을 게시하면 구독에 Azure App Service 인스턴스가 만들어집니다. 선택한 가격 책정 플랜에 따라 비용이 발생할 수 있습니다. 앱 사용이 완료되면 Azure Portal에서 앱 및 관련 리소스를 삭제할 수 있습니다.
  • 비전 모델이 있는 GPT-4 Turbo는 현재 지원되지 않습니다.
  • 기본적으로 앱은 이미 구성된 Microsoft ID 공급자를 사용하여 배포됩니다. ID 공급자는 앱에 대한 액세스를 Azure 테넌트 멤버로 제한합니다. 인증을 추가하거나 수정하려면 다음을 수행합니다.
    1. Azure Portal로 이동하여 게시 중에 지정한 앱 이름을 검색합니다. 웹앱을 선택한 다음 왼쪽 메뉴에서 인증을 선택합니다. 그런 다음 ID 공급자 추가를 선택합니다.

      Azure Portal의 인증 창 스크린샷.

    2. Microsoft를 ID 공급자로 선택합니다. 이 페이지의 기본 설정은 앱을 테넌트로만 제한하므로 여기에서 다른 항목을 변경할 필요가 없습니다. 추가를 선택합니다.

이제 사용자가 앱에 액세스하려면 Microsoft Entra 계정으로 로그인하라는 메시지가 표시됩니다. 원하는 경우 유사한 프로세스에 따라 다른 ID 공급자를 추가할 수 있습니다. 앱은 사용자가 테넌트의 멤버인지 확인하는 것 이외의 어떤 방식으로도 사용자의 로그인 정보를 사용하지 않습니다. 인증 관리에 대한 자세한 내용은 Azure App Service에서 웹앱 인증에 대한 빠른 시작을 참조하세요.

환경 변수를 사용하여 애플리케이션 사용자 지정

앱의 프런트 엔드 및 백 엔드 논리를 사용자 지정할 수 있습니다. 앱은 앱의 아이콘 변경과 같은 일반적인 사용자 지정 시나리오에 몇 가지 환경 변수를 제공합니다.

이러한 환경 변수는 웹 애플리케이션을 배포한 후 Azure Portal을 통해 수정할 수 있습니다.

  1. Azure Portal에서 App Services 페이지를 검색하여 선택합니다.
  2. 방금 배포한 웹앱을 선택합니다.
  3. 앱의 왼쪽 메뉴에서 설정 > 환경 변수를 선택합니다.
  4. 기존 환경 변수를 수정하려면 해당 이름을 클릭합니다.
  5. 하나의 새 환경 변수를 추가하려면 패널의 위쪽 메뉴 모음에서 추가를 클릭합니다.
  6. JSON 기반 편집기를 사용하여 환경 변수를 관리하려면 고급 편집을 클릭합니다.

앱을 사용자 지정할 때 다음을 권장합니다.

  • 구현하는 각 설정이 사용자 환경에 미치는 영향을 명확하게 전달합니다.

  • Azure OpenAI 또는 Azure AI 검색 리소스에 대한 키를 회전한 후 새 API 키를 사용하도록 배포된 각 앱에 대한 앱 설정을 업데이트합니다.

웹앱에 대한 샘플 소스 코드는 GitHub에서 사용할 수 있습니다. 소스 코드는 "있는 그대로" 샘플로만 제공됩니다. 고객은 웹앱의 모든 사용자 지정 및 구현을 담당합니다.

애플리케이션 사용자 인터페이스 수정

사용자 인터페이스 사용자 지정과 관련된 환경 변수는 다음과 같습니다.

  • UI_CHAT_DESCRIPTION: 로드할 때 페이지 가운데에 있는 UI_CHAT_TITLE 아래에 표시되는 작은 단락 텍스트입니다.
    • 데이터 형식: 텍스트
  • UI_CHAT_LOGO: 로드 시 페이지 중앙에 표시되는 큰 이미지입니다.
    • 데이터 형식: 이미지에서 URL
  • UI_CHAT_TITLE: 로드할 때 페이지 가운데에 표시되는 큰 텍스트입니다.
    • 데이터 형식: 텍스트
  • UI_FAVICON: 브라우저 창/탭에 표시되는 favicon입니다.
    • 데이터 형식: 이미지에서 URL
  • UI_LOGO: 페이지 왼쪽 위와 제목 왼쪽에 로고가 나타납니다.
    • 데이터 형식: 이미지에서 URL
  • UI_TITLE: 브라우저 창/탭에 표시되는 제목입니다. 또한 로고가 페이지의 왼쪽 위에 표시됩니다.
    • 데이터 형식: 텍스트
  • UI_SHOW_SHARE_BUTTON: 이 단추는 페이지의 오른쪽 위에 표시되며 사용자가 웹앱에 연결하는 URL을 공유할 수 있습니다.
    • 데이터 형식: 부울, True 또는 False를 입력해야 하며, 비워두거나 지정하지 않으면 기본값은 True입니다.
  • UI_SHOW_CHAT_HISTORY_BUTTON: 페이지의 오른쪽 위와 UI_SHOW_SHARE_BUTTON 왼쪽에 표시됩니다.
    • 데이터 형식: 부울, True 또는 False를 입력해야 하며, 비워두거나 지정하지 않으면 기본값은 True입니다.

애플리케이션 사용자 인터페이스를 수정하려면 이전 단계의 지침에 따라 웹앱에 대한 환경 변수 페이지를 엽니다. 그런 다음 고급 편집을 사용하여 JSON 기반 편집기를 엽니다. JSON의 맨 위에([ 문자 뒤) 아래 코드 블록을 붙여넣고 그에 따라 값을 사용자 지정합니다.

  {
    "name": "UI_CHAT_DESCRIPTION",
    "value": "This is an example of a UI Chat Description. Chatbots can make mistakes. Check important info and sensitive info.",
    "slotSetting": false
  },
  {
    "name": "UI_CHAT_LOGO",
    "value": "https://learn-bot.azurewebsites.net/assets/Contoso-ff70ad88.svg",
    "slotSetting": false
  },
  {
    "name": "UI_CHAT_TITLE",
    "value": "This is an example of a UI Chat Title. Start chatting",
    "slotSetting": false
  },
  {
    "name": "UI_FAVICON",
    "value": "https://learn-bot.azurewebsites.net/assets/Contoso-ff70ad88.svg",
    "slotSetting": false
  },
  {
    "name": "UI_LOGO",
    "value": "https://learn-bot.azurewebsites.net/assets/Contoso-ff70ad88.svg",
    "slotSetting": false
  },
  {
    "name": "UI_TITLE",
    "value": "This is an example of a UI Title",
    "slotSetting": false
  },

Cosmos DB를 사용하여 채팅 기록 사용

웹앱 사용자의 채팅 기록을 설정할 수 있습니다. 이 기능을 켜면 사용자는 이전 개별 쿼리 및 응답에 액세스할 수 있습니다.

채팅 기록을 켜려면 Azure OpenAI Studio를 사용하거나 Azure AI Studio를 사용하여 모델을 웹앱으로 배포하거나 다시 배포하고 웹앱 채팅 기록 및 사용자 피드백 사용을 선택합니다.

Azure OpenAI 또는 Azure AI Studio에서 채팅 기록을 사용하도록 설정하기 위한 확인란의 스크린샷.

Important

채팅 기록을 켜면 리소스 그룹에 Azure Cosmos DB 인스턴스가 만들어지고, 무료 계층보다 더 사용하는 스토리지에 대해 추가 요금이 발생합니다.

채팅 기록을 켜면 사용자가 앱 오른쪽 상단에서 채팅 기록을 표시하거나 숨길 수 있습니다. 사용자는 채팅 기록을 표시할 때 대화 이름을 바꾸거나 대화를 삭제할 수 있습니다. 사용자가 이전 섹션에서 지정한 환경 변수 UI_SHOW_CHAT_HISTORY_BUTTON을(를) 사용하여 이 함수에 액세스할 수 있는지 여부를 수정할 수 있습니다. 사용자가 앱에 로그인되어 있기 때문에 대화는 자동으로 최신 항목부터 오래된 항목 순으로 정렬됩니다. 대화의 이름은 대화의 첫 번째 쿼리를 기준으로 지정됩니다.

참고 항목

미국 동부와 같은 인기 있는 Azure 지역에서는 수요가 많은 기간에 Cosmos DB의 새 인스턴스를 배포할 수 없는 경우가 발생할 수 있습니다. 이 경우 미국 동부 2와 같은 대체 지역으로 배포하거나 배포가 성공할 때까지 배포를 다시 시도하세요. Cosmos DB 배포가 실패하면 앱은 지정된 URL에서 사용할 수 있지만 채팅 기록은 사용할 수 없습니다. 대화 기록을 사용하도록 설정하면 오른쪽 위에 있는 대화 기록 보기 단추도 활성화됩니다.

채팅 기록 옵션을 선택한 상태로 배포하면 다음 환경 변수가 자동으로 채워지므로 Cosmos DB 인스턴스를 전환하려는 경우가 아니라면 수정할 필요가 없습니다. 화면은 다음과 같습니다.

  • AZURE_COSMOSDB_ACCOUNT: 웹앱과 함께 배포되는 Cosmos DB 계정의 이름입니다.
    • 데이터 형식: 텍스트
  • AZURE_COSMOSDB_ACCOUNT_KEY: Microsoft Entra ID를 통해 권한이 부여되지 않고 키 기반 인증이 대신 사용되는 경우에만 사용되는 대체 환경 변수입니다.
    • 데이터 형식: 텍스트. 일반적으로 존재하지 않거나 채워지지 않습니다.
  • AZURE_COSMOSDB_DATABASE: 웹앱과 함께 배포되는 Cosmos DB 내의 데이터베이스 개체 이름입니다.
    • 데이터 형식: 텍스트, db_conversation_history(이)어야 함
  • AZURE_COSMOSDB_CONTAINER: 웹앱과 함께 배포되는 Cosmos DB 내의 데이터베이스 컨테이너 개체의 이름입니다.
    • 데이터 형식: 텍스트, conversations(이)어야 함
  • AZURE_COSMOSDB_ACCOUNT: 웹앱과 함께 배포되는 Cosmos DB 계정의 이름입니다.
    • 데이터 형식: 텍스트

웹앱의 채팅 기록 스크린샷.

사용자 피드백 수집

사용자 피드백을 수집하기 위해 챗봇의 각 응답에 표시되는 '좋아요' 및 '싫어요' 아이콘 세트를 사용 설정할 수 있습니다. 이를 통해 사용자는 응답의 품질을 평가하고 '부정적 피드백 제공' 모달 창을 사용하여 오류가 발생한 부분을 표시할 수 있습니다.

이 기능을 사용하도록 설정하려면 다음 환경 변수를 True로 설정합니다.

  • AZURE_COSMOSDB_ENABLE_FEEDBACK: 웹앱과 함께 배포되는 Cosmos DB 계정의 이름입니다.
    • 데이터 형식: 데이터 형식: 부울, True 또는 False를 반드시 입력

이 작업은 앞에서 설명한 대로 고급 편집 또는 간단한 편집 옵션을 사용하여 수행할 수 있습니다. 고급 JSON 편집기에 붙여넣을 JSON은 다음과 같습니다.

  {
    "name": "AZURE_COSMOSDB_ENABLE_FEEDBACK",
    "value": "True",
    "slotSetting": false
  },

Azure AI Search에 연결하고 데이터 원본으로 파일 업로드하기

Azure AI 스튜디오 사용

이 자습서를 따라 Azure AI Search와 AI Studio를 통합하고 애플리케이션을 다시 배포하세요.

Azure OpenAI Studio 사용

이 자습서를 따라 Azure AI Search와 OpenAI Studio를 통합하고 애플리케이션을 다시 배포하세요.

환경 변수 사용

앱을 다시 배포하지 않고 Azure AI Search에 연결하려면 앞서 설명한 대로 편집 옵션 중 하나를 사용하여 다음 필수 환경 변수를 수정할 수 있습니다.

  • DATASOURCE_TYPE: 사용자의 쿼리에 응답할 때 사용할 데이터 원본을 결정합니다.
    • 데이터 형식: 텍스트. Azure AI Search의 이전 이름인 AzureCognitiveSearch(으)로 설정
  • AZURE_SEARCH_SERVICE: Azure AI Search 인스턴스의 이름입니다.
    • 데이터 형식: 텍스트
  • AZURE_SEARCH_INDEX: Azure AI Search 인스턴스의 인덱스 이름입니다.
    • 데이터 형식: 텍스트
  • AZURE_SEARCH_KEY: Azure AI Search 인스턴스의 인증 키입니다. 인증에 Microsoft Entra ID를 사용하는 경우 선택 사항입니다.
    • 데이터 형식: 텍스트

환경 변수를 사용하는 추가 사용자 지정 시나리오

  • AZURE_SEARCH_USE_SEMANTIC_SEARCH: Azure AI Search에서 의미 체계 검색을 사용할지 여부를 나타냅니다.
    • 데이터 형식: 부울, 의미 체계 검색을 사용하지 않는 경우 False(으)로 설정해야 합니다.
  • AZURE_SEARCH_SEMANTIC_SEARCH_CONFIG: 의미 체계 검색을 사용하는 경우 사용할 의미 체계 검색 구성의 이름을 지정합니다.
    • 데이터 형식: 텍스트, 기본값 azureml-default.
  • AZURE_SEARCH_INDEX_TOP_K: Azure AI Search에서 검색할 상위 문서 수를 정의합니다.
    • 데이터 형식: 정수, 5(으)로 설정해야 함.
  • AZURE_SEARCH_ENABLE_IN_DOMAIN: 데이터와 관련된 쿼리에 대한 응답을 제한합니다.
    • 데이터 형식: 부울, True(으)로 설정해야 함.
  • AZURE_SEARCH_CONTENT_COLUMNS: 봇 응답을 작성할 때 사용되는 문서의 텍스트 콘텐츠를 포함하는 Azure AI Search 인덱스의 필드 목록을 지정합니다.
    • 데이터 형식: 텍스트, Azure AI Studio 또는 Azure OpenAI Studio에서 배포된 경우 기본값 content,
  • AZURE_SEARCH_FILENAME_COLUMN: UI에 표시할 원본 데이터의 고유 식별자를 제공하는 Azure AI Search 인덱스의 필드를 지정합니다.
    • 데이터 형식: 텍스트, Azure AI Studio 또는 Azure OpenAI Studio에서 배포된 경우 기본값 filepath,
  • AZURE_SEARCH_TITLE_COLUMN: UI에 표시할 데이터 콘텐츠에 대한 관련 제목 또는 헤더를 제공하는 Azure AI Search 인덱스의 필드를 지정합니다.
    • 데이터 형식: 텍스트, Azure AI Studio 또는 Azure OpenAI Studio에서 배포된 경우 기본값 title,
  • AZURE_SEARCH_URL_COLUMN: 문서의 URL을 포함하는 Azure AI Search 인덱스의 필드를 지정합니다.
    • 데이터 형식: 텍스트, Azure AI Studio 또는 Azure OpenAI Studio에서 배포된 경우 기본값 url,
  • AZURE_SEARCH_VECTOR_COLUMNS: 봇 응답을 작성할 때 사용되는 문서의 벡터 임베딩이 포함된 Azure AI 검색 인덱스의 필드 목록을 지정합니다.
    • 데이터 형식: 텍스트, Azure AI Studio 또는 Azure OpenAI Studio에서 배포된 경우 기본값 contentVector,
  • AZURE_SEARCH_QUERY_TYPE: 사용할 쿼리 형식 지정: simple, semantic, vector, vectorSimpleHybrid, 또는 vectorSemanticHybrid. 이 설정은 AZURE_SEARCH_USE_SEMANTIC_SEARCH 보다 우선합니다.
    • 데이터 형식: 텍스트, vectorSemanticHybrid(을)를 사용하여 테스트하는 것이 좋습니다.
  • AZURE_SEARCH_PERMITTED_GROUPS_COLUMN: Microsoft Entra 그룹 ID가 포함된 Azure AI Search 인덱스의 필드를 지정하여 문서 수준 액세스 제어를 결정합니다.
    • 데이터 형식: 텍스트
  • AZURE_SEARCH_STRICTNESS: 데이터에 대한 응답을 제한하는 모델의 엄격성 수준을 지정합니다.
    • 데이터 형식: 정수, 1~5 사이에서 설정해야 하며 3 권장.
  • AZURE_OPENAI_EMBEDDING_NAME: 벡터 검색을 사용하는 경우 임베딩 모델 배포의 이름을 지정합니다.
    • 데이터 형식: 텍스트

고급 JSON 편집기에 붙여넣을 JSON은 다음과 같습니다.

{
    "name": "AZURE_SEARCH_CONTENT_COLUMNS",
    "value": "",
    "slotSetting": false
  },
  {
    "name": "AZURE_SEARCH_ENABLE_IN_DOMAIN",
    "value": "true",
    "slotSetting": false
  },
  {
    "name": "AZURE_SEARCH_FILENAME_COLUMN",
    "value": "",
    "slotSetting": false
  },
  {
    "name": "AZURE_SEARCH_INDEX",
    "value": "",
    "slotSetting": false
  },
  {
    "name": "AZURE_SEARCH_KEY",
    "value": "",
    "slotSetting": false
  },
  {
    "name": "AZURE_SEARCH_PERMITTED_GROUPS_COLUMN",
    "value": "",
    "slotSetting": false
  },
  {
    "name": "AZURE_SEARCH_QUERY_TYPE",
    "value": "vectorSemanticHybrid",
    "slotSetting": false
  },
  {
    "name": "AZURE_SEARCH_SEMANTIC_SEARCH_CONFIG",
    "value": "azureml-default",
    "slotSetting": false
  },
  {
    "name": "AZURE_SEARCH_SERVICE",
    "value": "",
    "slotSetting": false
  },
  {
    "name": "AZURE_SEARCH_STRICTNESS",
    "value": "3",
    "slotSetting": false
  },
  {
    "name": "AZURE_SEARCH_TITLE_COLUMN",
    "value": "",
    "slotSetting": false
  },
  {
    "name": "AZURE_SEARCH_TOP_K",
    "value": "5",
    "slotSetting": false
  },
  {
    "name": "AZURE_SEARCH_URL_COLUMN",
    "value": "",
    "slotSetting": false
  },
  {
    "name": "AZURE_SEARCH_USE_SEMANTIC_SEARCH",
    "value": "true",
    "slotSetting": false
  },
  {
    "name": "AZURE_SEARCH_VECTOR_COLUMNS",
    "value": "contentVector",
    "slotSetting": false
  },

프롬프트 흐름에 데이터 원본으로 연결

프롬프트 흐름은 사용자 쿼리에서 고도로 사용자 지정 가능한 RAG 및 처리 논리를 정의할 수 있습니다.

Azure AI Studio에서 프롬프트 흐름 만들기 및 배포

이 자습서를 따라 Azure AI Studio에서 프롬프트 흐름에 대한 추론 엔드포인트를 만들고 테스트하고 배포합니다.

프롬프트 흐름에서 기본 인용 사용

이 웹 애플리케이션을 통합할 때 인용을 표시하도록 프롬프트 흐름을 구성할 때는 반드시 두 가지 주요 출력인 documents(인용) 및 reply(자연어 답변)을(를) 반환해야 합니다.

  1. documents은(는) 다음 요소를 포함해야 하는 JSON 개체입니다. citations은(는) 동일한 스키마를 따르는 여러 항목을 포함할 수 있는 목록입니다. 선택한 RAG 패턴에 따라 documents 개체를 생성하고 채워야 합니다.
{
    "citations": [
        {
                "content": "string",
                "id": 12345,
                "title": "string",
                "filepath": "string",
                "url": "string",
                "metadata": "string",
                "chunk_id": None,
                "reindex_id": None,
                "part_index": None
        }
    ],
    "intent": "Your_string_here"
}
  1. reply은(는) 지정된 사용자 쿼리에 대한 최종 자연어를 나타내는 반환된 문자열로 구성됩니다. reply은(는) 각 문서(원본)에 대한 참조를 [doc1], [doc2] 등의 형식으로 포함해야 합니다. 웹 애플리케이션은 reply을(를) 구문 분석하고 참조를 처리하여 [doc1]의 모든 인스턴스를 반환되는 정렬된 documents에 직접 연결하는 작은 위 첨자 숫자 표시기로 바꿔줍니다. 따라서 최종 자연어를 생성하는 LLM에 이러한 참조를 포함하도록 요청해야 하며, 이러한 참조가 올바르게 정렬되도록 LLM 호출에도 전달해야 합니다. 예시:
system:
You are a helpful chat assistant that answers a user's question based on the information retrieved from a data source. 

YOU MUST ALWAYS USE CITATIONS FOR ALL FACTUAL RESPONSES. YOU MUST INCLUDE CITATIONS IN YOUR ANSWER IN THE FORMAT [doc1], [doc2], ... AND SO FORTH WHEN YOU ARE USING INFORMATION RELATING TO SAID SOURCE. THIS MUST BE RETURNED IN YOUR ANSWER.

Provide sort and concise answers with details directly related to the query. 

## Conversation history for context
{% for item in chat_history %}
user:
{{item.inputs.query}}

assistant:
{{item.outputs.reply}}
{% endfor %}

## Current question
user:
### HERE ARE SOME CITED SOURCE INFORMATION FROM A MOCKED API TO ASSIST WITH ANSWERING THE QUESTION BELOW. ANSWER ONLY BASED ON THE TRUTHS PRESENTED HERE.
{{your_input_name_for_documents}}
FOR EACH OF THE CITATIONS ABOVE, YOU MUST INCLUDE IN YOUR ANSWER [doc1], [doc2], ... AND SO FORTH WHEN YOU ARE USING INFORMATION RELATING TO SAID SOURCE. THIS MUST BE RETURNED IN YOUR ANSWER.
### HERE IS THE QUESTION TO ANSWER.
{{question}}
  

프롬프트 흐름을 통합하도록 환경 변수 구성

수정할 환경 변수는 다음과 같습니다.

  • AZURE_OPENAI_STREAM: 응답이 스트리밍(증분 로드) 형식으로 로드되는지 여부를 결정합니다. 프롬프트 흐름에는 지원되지 않으므로 이 기능을 사용하도록 False(으)로 설정해야 합니다.
    • 데이터 형식: 부울, 프롬프트 흐름을 사용하지 않는 경우 True, 프롬프트 흐름을 사용하는 경우 False(으)로 설정
  • USE_PROMPTFLOW: 기존 프롬프트 흐름 배포 엔드포인트를 사용할지 여부를 나타냅니다. True(으)로 설정하면 PROMPTFLOW_ENDPOINTPROMPTFLOW_API_KEY(을)를 모두 설정해야 합니다.
    • 데이터 형식: 부울, 프롬프트 흐름을 사용하지 않는 경우 False(으)로 설정해야 합니다.
  • PROMPTFLOW_ENDPOINT: 배포된 프롬프트 흐름 엔드포인트의 URL을 지정합니다.
    • 데이터 형식: 텍스트(예: https://pf-deployment-name.region.inference.ml.azure.com/score)
  • PROMPTFLOW_API_KEY: 배포된 프롬프트 흐름 엔드포인트에 대한 인증 키입니다. 참고: 키 기반 인증만 지원됩니다.
    • 데이터 형식: 텍스트
  • PROMPTFLOW_RESPONSE_TIMEOUT: 프롬프트 흐름 엔드포인트가 응답할 시간 제한 값을 초 단위로 정의합니다.
    • 데이터 형식: 정수, 120(으)로 설정해야 함.
  • PROMPTFLOW_REQUEST_FIELD_NAME: 프롬프트 흐름 요청을 생성할 기본 필드 이름입니다. 참고: chat_history은(는) 상호 작용에 따라 자동으로 생성됩니다. API에 다른 필수 필드가 필요한 경우 promptflow_request 함수에서 요청 매개 변수를 변경해야 합니다.
    • 데이터 형식: 텍스트, query(으)로 설정해야 함.
  • PROMPTFLOW_RESPONSE_FIELD_NAME: 프롬프트 흐름 요청에서 응답을 처리하는 기본 필드 이름입니다.
    • 데이터 형식: 텍스트, reply(으)로 설정해야 함.
  • PROMPTFLOW_CITATIONS_FIELD_NAME: 프롬프트 흐름 요청에서 인용 출력을 처리하는 기본 필드 이름입니다.
    • 데이터 형식: 텍스트, documents(으)로 설정해야 함.

다른 데이터 원본에 연결

다음을 비롯한 다른 데이터 원본이 지원됩니다.

  • Azure Cosmos DB
  • Elasticsearch
  • Azure SQL Server
  • Pinecone
  • Azure Machine Learning 인덱스

이러한 데이터 소스를 활성화하는 방법에 대한 자세한 지침은 GitHub 리포지토리를 참조하세요.

최신 변경 내용을 포함하도록 웹앱 업데이트

참고 항목

2024년 2월 1일부터 웹앱은 앱 시작 명령을 python3 -m gunicorn app:app으로 설정해야 합니다. 2024년 2월 1일 이전에 게시된 앱을 업데이트하는 경우 App Service 구성 페이지에서 시작 명령을 수동으로 추가해야 합니다.

웹앱의 소스 코드에 대한 main 분기에서 변경 내용을 자주 끌어와 최신 버그 수정, API 버전 및 개선 사항을 갖추는 것이 좋습니다. 또한 사용 중인 API 버전이 사용 중지될 때마다 웹앱을 동기화해야 합니다. 소스 코드에 대한 변경 내용 및 업데이트에 대한 알림을 받으려면 웹앱의 GitHub 리포지토리에서 보기 또는 별표 단추를 선택하는 것이 좋습니다.

웹앱을 사용자 지정하지 않은 경우 다음 단계에서 동기화할 수 있습니다.

  1. Azure Portal에서 웹앱으로 이동합니다.

  2. 왼쪽 메뉴의 배포에서 배포 센터를 선택합니다.

  3. 창 상단에서 동기화를 선택하고 앱이 다시 배포되는지 확인합니다.

    Azure Portal의 웹앱 동기화 단추 스크린샷.

앱의 소스 코드를 사용자 지정하거나 변경한 경우 앱의 소스 코드를 수동으로 업데이트하고 다시 배포해야 합니다.

  • 앱이 GitHub에서 호스트되는 경우 코드 변경 내용을 리포지토리에 푸시한 다음 이전 동기화 단계를 사용합니다.
  • 앱을 수동으로 다시 배포하는 경우(예: Azure CLI 사용) 배포 전략에 대한 단계를 따릅니다.

Cosmos DB 인스턴스 삭제

웹앱을 삭제해도 Cosmos DB 인스턴스는 자동으로 삭제되지 않습니다. 저장된 모든 채팅과 함께 Cosmos DB 인스턴스를 삭제하려면 Azure Portal의 관련 리소스로 이동하여 삭제해야 합니다. Cosmos DB 리소스를 삭제했지만 이후 업데이트에서 Azure OpenAI Studio에서 채팅 기록 옵션을 선택한 상태로 유지하면 애플리케이션에서 사용자에게 연결 오류를 알립니다. 그러나 사용자는 채팅 기록에 액세스하지 않고도 웹앱을 계속 사용할 수 있습니다.

서비스 간에 Microsoft Entra ID 인증 사용

웹앱에 대한 서비스 내 인증에 Microsoft Entra ID를 사용하도록 설정하려면 다음 단계를 수행하세요.

Azure OpenAI 리소스 및 Azure App Service에서 관리 ID 사용

각 리소스에 대한 Azure Portal에서 "ID"로 이동하여 시스템에 할당된 관리 ID를 켜면 Azure OpenAI 리소스 및 Azure App Service에 대해 관리 ID를 사용하도록 설정할 수 있습니다.

Azure Portal의 애플리케이션 ID 구성을 보여 주는 스크린샷.

참고 항목

유추에 사용되는 리소스와 동일한 리소스에 배포된 임베딩 모델을 사용하는 경우, 하나의 Azure OpenAI 리소스에서만 관리되는 ID를 사용하도록 설정하면 됩니다. 유추에 사용된 리소스와 다른 리소스에 배포된 임베딩 모델을 사용하는 경우, 임베딩 모델을 배포하는 데 사용된 Azure OpenAI 리소스에서 관리 ID도 사용하도록 설정해야 합니다.

Azure Search 리소스에서 RBAC(역할 기반 액세스 제어) 활성화(선택 사항)

Azure Search에서 On Your Data를 사용하는 경우 이 단계를 따라야 합니다.

Azure OpenAI 리소스가 Azure Search 리소스에 액세스할 수 있도록 하려면 Azure Search 리소스에서 역할 기반 액세스 제어를 활성화해야 합니다. 리소스에 RBAC 역할을 활성화하는 방법에 대해 자세히 알아보세요.

RBAC 역할을 할당하여 서비스 내 통신 활성화

다음 표에는 애플리케이션과 연결된 모든 Azure 리소스에 필요한 RBAC 역할 할당이 요약되어 있습니다.

역할 담당자 리소스
Search Index Data Reader Azure OpenAI(유추) Azure AI 검색
Search Service Contributor Azure OpenAI(유추) Azure AI 검색
Cognitive Services OpenAI User 웹 앱 Azure OpenAI(유추)
Cognitive Services OpenAI User Azure OpenAI(유추) Azure OpenAI(임베딩)

이러한 역할을 할당하려면 다음 지침에 따라 필요한 역할 할당을 만드세요.

앱 설정 변경 내용

웹앱 애플리케이션 설정에서 "환경 변수"로 이동하여 다음을 변경합니다.

  • 더 이상 필요하지 않으므로 환경 변수 AZURE_OPENAI_KEY을(를) 제거합니다.
  • On Your Data를 Azure Search와 함께 사용하며 Azure OpenAI와 Azure Search 간에 Microsoft Entra ID 인증을 사용하는 경우, 데이터 원본 액세스 키에 대한 AZURE_SEARCH_KEY 환경 변수도 삭제해야 합니다.

유추에 사용된 모델과 동일한 리소스에 배포된 임베딩 모델을 사용하는 경우 다른 설정 변경은 필요하지 않습니다.

그러나 다른 리소스에 배포된 임베딩 모델을 사용하는 경우 앱의 환경 변수를 다음과 같이 추가로 변경합니다,

  • AZURE_OPENAI_EMBEDDING_ENDPOINT 변수를 임베딩에 사용하는 리소스에 대한 임베딩 API의 전체 API 경로로 설정(예: https://<your embedding AOAI resource name>.openai.azure.com/openai/deployments/<your embedding deployment name>/embeddings)
  • Microsoft Entra ID 인증을 사용하도록 AZURE_OPENAI_EMBEDDING_KEY 변수를 삭제합니다.

모든 환경 변수 변경이 완료되면 웹앱을 다시 시작하여 웹앱의 서비스 간에 Microsoft Entra ID 인증을 사용하기 시작합니다. 다시 시작 후 설정 변경 사항이 적용되려면 몇 분 정도 걸립니다.