다음을 통해 공유


시작: 사용자 고유의 데이터를 사용하여 채팅(Python 샘플)

이 문서에서는 Python용 예제 코드를 사용하여사용자 고유의 데이터 샘플로 채팅을 배포하고 실행하는 방법을 보여 줍니다. 이 샘플 채팅 애플리케이션은 Azure AI Search를 통해 Python, Azure OpenAI Service 및 RAG(검색 보강 세대) 를 사용하여 빌드됩니다.

앱은 가상 회사의 직원 혜택에 대한 사용자 질문에 대한 답변을 제공합니다. RAG(Retrieval-Augmented Generation)을 사용하여 제공된 PDF 파일의 콘텐츠를 참조합니다. 여기에는 다음이 포함될 수 있습니다.

  • 직원 핸드북
  • 혜택 개요 문서
  • 회사 역할 및 기대 사항 목록

이러한 문서를 분석하면 앱은 정확하고 상황에 맞는 답변으로 자연어 쿼리에 응답할 수 있습니다. 이 방법은 사용자 고유의 데이터를 사용하여 Azure OpenAI 및 Azure AI Search를 사용하여 지능형 도메인별 채팅 환경을 구현하는 방법을 보여 줍니다.

또한 앱의 설정이 응답 동작을 수정하도록 구성하는 방법도 알아봅니다.

이 문서의 단계를 완료한 후에는 사용자 고유의 코드로 프로젝트 사용자 지정을 시작할 수 있습니다. 이 문서는 Azure OpenAI Service 및 Azure AI Search를 사용하여 채팅 앱을 빌드하는 방법에 대해 안내하는 시리즈의 일부입니다. 시리즈의 다른 문서는 다음과 같습니다.

메모

이 문서는 잘 유지 관리되는 참조 구현 역할을 하는 하나 이상의 AI 앱 템플릿을 기반으로 합니다. 이러한 템플릿은 자체 AI 애플리케이션을 빌드하기 위한 안정적이고 고품질의 시작점을 쉽게 배포하고 제공하도록 설계되었습니다.

샘플 앱 아키텍처

다음 다이어그램에서는 채팅 앱의 간단한 아키텍처를 보여 줍니다.

데이터 원본을 사용하여 클라이언트에서 백 엔드 채팅 앱으로 샘플의 아키텍처를 보여 주는 다이어그램.

아키텍처의 주요 구성 요소는 다음과 같습니다.

  • 대화형 채팅 인터페이스(일반적으로 Python Flask 또는 JavaScript/React를 사용하여 빌드됨)를 호스트하고 처리를 위해 백 엔드에 사용자 질문을 보내는 웹 애플리케이션입니다.
  • 인덱싱된 문서(PDF, Word 파일 등)에 대해 지능형 검색을 수행하고 응답에 사용할 관련 문서 발췌(청크)를 반환하는 Azure AI Search 리소스입니다.
  • 다음과 같은 Azure OpenAI 서비스 인스턴스:
    • 의미 체계 유사성 검색을 위해 문서 및 사용자 질문을 벡터 표현으로 변환합니다.
    • 중요한 키워드를 추출하여 Azure AI Search 쿼리를 구체화합니다.
    • 검색된 데이터 및 사용자 쿼리를 사용하여 최종 응답을 합성합니다.

채팅 앱의 일반적인 흐름은 다음과 같습니다.

  • 사용자가 질문을 제출합니다. 사용자가 웹앱 인터페이스를 통해 자연어 질문을 입력합니다.
  • Azure OpenAI는 질문을 처리합니다. 백 엔드는 Azure OpenAI를 사용하여 다음을 수행합니다.
    • text-embedding-ada-002 모델을 사용하여 질문의 포함을 생성합니다.
    • 필요에 따라 키워드를 추출하여 검색 관련성 구체화
  • Azure AI Search는 관련 데이터를 검색합니다. 포함 또는 키워드는 Azure AI Search에서 인덱싱된 콘텐츠(예: PDF)에 대한 의미 체계 검색을 수행하는 데 사용됩니다.
  • 결과와 질문 결합: 가장 관련성이 높은 문서 발췌(청크)는 사용자의 원래 질문과 결합됩니다.
  • Azure OpenAI는 응답을 생성합니다. 결합된 입력은 컨텍스트 인식 응답을 생성하는 GPT 모델(예: gpt-35-turbo 또는 gpt-4)에 전달됩니다.
  • 응답이 사용자에게 반환됩니다. 생성된 답변이 채팅 인터페이스에 표시됩니다.

필수 조건

이 기사를 완료하는 데 필요한 모든 종속성을 갖춘 개발 컨테이너 환경을 사용할 수 있습니다. GitHub Codespaces(브라우저)에서 또는 Visual Studio Code를 사용하여 로컬로 개발 컨테이너를 실행할 수 있습니다.

이 문서를 사용하려면 다음 필수 구성 요소가 필요합니다.

  • Azure 구독. 무료 계정을 만드세요 시작하기 전에.

  • Azure 계정 권한. Azure 계정에는 Microsoft.Authorization/roleAssignments/쓰기 권한이 있어야 합니다. 사용자 액세스 관리자 또는 소유자와 같은 역할은 이 요구 사항을 충족합니다.

  • Azure 구독에서 Azure OpenAI에 부여된 액세스 권한. 대부분의 경우 Azure OpenAI 모델에 대한 일반적인 액세스 권한으로 사용자 지정 콘텐츠 필터를 만들고 심각도 수준을 관리할 수 있습니다. 승인 기반 액세스에 대한 등록은 일반 액세스에 필요하지 않습니다. 자세한 내용은 Azure AI 서비스에 대한 제한된 액세스 기능을 참조하세요.

  • 콘텐츠 필터 또는 남용 수정(선택 사항). 사용자 지정 콘텐츠 필터를 만들거나 심각도 수준을 변경하거나 남용 모니터링을 지원하려면 공식적인 액세스 승인이 필요합니다. 필요한 등록 양식을 작성하여 액세스를 신청할 수 있습니다. 자세한 내용은 수정된 콘텐츠 필터 및/또는 남용 모니터링에 대한 등록을 참조하세요.

  • 액세스 지원 및 문제 해결 문제 해결에 액세스하려면 GitHub 리포지토리에서 지원 문제를 엽니다.

  • GitHub 계정. 리포지토리를 포크하고 GitHub Codespaces를 사용하거나 로컬로 복제해야 합니다.

샘플 리소스에 대한 사용 비용

이 아키텍처에 사용되는 대부분의 리소스는 기본 또는 소비 기반 가격 책정 계층에 속합니다. 즉, 사용하는 항목에 대해서만 요금을 지불하고, 일반적으로 개발 또는 테스트 중에는 요금이 최소화됩니다.

이 샘플을 완료하려면 Azure OpenAI, AI Search 및 스토리지와 같은 서비스를 사용하면 약간의 비용이 발생할 수 있습니다. 앱 평가 또는 배포가 완료되면 프로비전된 모든 리소스를 삭제하여 지속적인 요금을 방지할 수 있습니다.

예상 비용에 대한 자세한 내용은 샘플에 대한 GitHub 리포지토리의 비용 추정 을 참조하세요.

개방형 개발 환경

먼저 이 문서를 완료하기 위해 모든 종속성이 설치된 개발 환경을 설정합니다.

  • Azure 구독. 무료로 하나만드세요.
  • Azure 계정 권한. Azure 계정에는 Microsoft.Authorization/roleAssignments/쓰기 권한이 있어야 합니다. 사용자 액세스 관리자 또는 소유자와 같은 역할은 이 요구 사항을 충족합니다.
  • GitHub 계정. 리포지토리를 포크하고 GitHub Codespaces를 사용하거나 로컬로 복제해야 합니다.

개발 환경 열기

다음 지침을 사용하여 이 문서를 완료하는 데 필요한 모든 종속성을 포함하는 미리 구성된 개발 환경을 배포합니다.

가장 간단하고 간소화된 설정의 경우 GitHub Codespaces를 사용합니다. GitHub Codespaces는 GitHub에서 관리하는 개발 컨테이너를 실행하고 웹용 Visual Studio Code를 UI(사용자 인터페이스)로 제공합니다. 이 환경에는 모든 필수 도구, SDK, 확장 및 종속성이 미리 설치되어 있으므로 수동 구성 없이 즉시 개발을 시작할 수 있습니다.

Codespaces를 사용하면 다음이 보장됩니다.

  • 올바른 개발자 도구 및 버전이 이미 설치되어 있습니다.
  • Docker, VS Code 또는 확장을 로컬로 설치할 필요가 없습니다.
  • 빠른 온보딩 및 재현 가능한 환경 설정.

중요함

모든 GitHub 계정은 2개의 핵심 인스턴스를 사용하여 매월 최대 60시간 동안 GitHub Codespaces를 사용할 수 있습니다. 무료 할당량을 초과하거나 더 큰 컴퓨팅 옵션을 사용하는 경우 표준 GitHub Codespaces 청구 요금이 적용됩니다. 자세한 내용은 GitHub Codespaces - 월별 포함된 스토리지 및 코어 시간을 참조하세요.

  1. 샘플 프로젝트 작업을 시작하려면 main GitHub 리포지토리의 Azure-Samples/azure-search-openai-demo 분기에 새 GitHub 코드스페이스를 만드세요.

    리포지토리 페이지의 맨 위에 있는 GitHub Codespaces - 열기 옵션을 마우스 오른쪽 단추로 클릭하고 새 창에서 열기 링크를 선택합니다. 이렇게 하면 개발 컨테이너가 전체 화면 전용 브라우저 탭에서 시작되어 소스 코드와 기본 제공 설명서 모두에 액세스할 수 있습니다.

    'GitHub Codespaces에서 열기' 옵션의 이미지입니다.

  2. 새 코드스페이스 만들기 페이지에서 코드스페이스 구성 설정을 검토한 다음, 코드스페이스 만들기를 선택합니다.

    샘플에 대한 새 GitHub 코드스페이스를 만드는 확인 화면의 스크린샷

    GitHub 코드스페이스가 시작될 때까지 기다립니다. 시작 프로세스는 몇 분 정도 걸릴 수 있습니다.

  3. GitHub 코드스페이스가 열리면 코드스페이스의 터미널 창에 다음 명령을 입력하여 Azure 개발자 CLI를 사용하여 Azure에 로그인합니다.

    azd auth login
    

    GitHub는 터미널 창에 보안 코드를 표시합니다.

    1. 터미널 창에서 보안 코드를 복사하고 Enter 키를 선택합니다. 브라우저 창이 열립니다.

    2. 프롬프트에서 보안 코드를 브라우저 필드에 붙여넣습니다.

    3. 지침에 따라 Azure 계정으로 인증합니다.

이 개발 컨테이너의 컨텍스트에서 이 문서의 나머지 GitHub Codespaces 작업을 완료합니다.

Azure에 채팅 앱 배포

샘플 리포지토리에는 다음을 포함하여 사용자 고유의 데이터 애플리케이션을 사용하여 채팅을 Azure에 배포하는 데 필요한 모든 것이 포함되어 있습니다.

  • 애플리케이션 소스 코드(Python)
  • 코드로서의 인프라 파일(Bicep)
  • GitHub 통합 및 CI/CD 구성(선택 사항)

Azure 개발자 CLI(azd)를 사용하여 앱을 배포하려면 다음 단계를 따르세요.

중요함

이 섹션에서 만든 Azure 리소스( 특히 Azure AI Search)는 배포가 완료되기 전에 중단된 경우에도 프로비전 즉시 요금이 부과되기 시작할 수 있습니다. 예기치 않은 요금을 방지하려면 테스트 후 Azure 사용량을 모니터링하고 사용하지 않는 리소스를 즉시 삭제합니다.

  1. Visual Studio Code 터미널 창에서 다음 azd 명령을 실행하여 Azure 리소스를 만들고 소스 코드를 배포합니다.

    azd up
    
  2. 이 프로세스는 구성에 따라 다음 설정 중 하나 이상을 묻는 메시지를 표시합니다.

    • 환경 이름: 이 값은 리소스 그룹 이름의 일부로 사용됩니다. 소문자와 대시(-예: myenv)가 있는 짧은 이름을 입력합니다. 대문자, 숫자 및 특수 문자는 지원되지 않습니다.

    • 구독: 리소스를 만들 구독을 선택합니다. 원하는 구독이 표시되지 않으면 화살표 키를 사용하여 사용 가능한 구독의 전체 목록을 스크롤합니다.

    • 위치: 이 지역 위치는 호스팅을 비롯한 대부분의 리소스에 사용됩니다. 지리적으로 가까운 지역 위치를 선택합니다.

    • OpenAI 모델 또는 문서 인텔리전스 리소스의 위치: 지리적으로 가장 가까운 위치를 선택합니다. 위치에 대해 선택한 지역을 이 설정에 사용할 수 있는 경우 동일한 지역을 선택합니다.

    앱이 배포되려면 다소 시간이 걸릴 수 있습니다. 계속하기 전에 배포가 완료되기를 기다립니다.

  3. 앱이 성공적으로 배포되면 터미널 창에 엔드포인트 URL이 표시됩니다.

    'azd up' 프로세스가 완료된 후 보고된 배포된 앱의 엔드포인트 URL을 보여 주는 스크린샷.

  4. 엔드포인트 URL을 선택하여 브라우저에서 채팅 애플리케이션을 엽니다.

    채팅 입력에 대한 몇 가지 제안 사항과 질문을 입력하기 위한 채팅 텍스트 상자를 보여 주는 채팅 앱의 스크린샷

채팅 앱을 사용하여 PDF 파일에서 답변 가져오기

채팅 앱에는 PDF 파일의 직원 복리후생 정보가 미리 로드되어 있습니다. 채팅 앱을 이용하여 혜택에 대해 질문할 수 있습니다. 다음 단계에서는 채팅 앱을 사용하는 과정을 안내합니다. 기본 모델이 업데이트되면 답변이 달라질 수 있습니다.

  1. 채팅 앱에서 성능 검토에서 수행되는 작업을 선택하거나 채팅 텍스트 상자에 동일한 텍스트를 입력합니다. 앱은 초기 응답을 반환합니다.

    질문에 대한 채팅 앱의 초기 대답 스크린샷, 성능 검토에서 어떻게 되나요?

  2. 답변 상자에서 인용을 선택합니다.

    채팅 앱의 답변 상자에 강조 표시된 인용을 보여 주는 스크린샷

  3. GitHub Codespaces는 세 개의 탭 영역이 있는 오른쪽 인용 창을 열고 포커스는 인용 탭에 있습니다.

    인용 탭에 대한 정보가 표시된 GitHub Codespaces에서 열린 오른쪽 창의 스크린샷

    GitHub Codespaces는 채팅 앱이 답변을 생성하는 방법을 이해하는 데 도움이 되는 세 가지 정보 탭을 제공합니다.

    설명
    사고 과정 채팅에서 질문/답변 상호 작용의 스크립트를 표시합니다. 채팅 앱 system에서 제공하는 콘텐츠, 입력한 user질문 및 시스템에서 assistant만든 설명을 볼 수 있습니다.
    콘텐츠 지원 질문에 대답하는 데 사용되는 정보와 원본 자료를 나열합니다. 원본 자료 인용 수는 개발자 설정에 의해 지정됩니다. 인용의 기본 수는 3입니다.
    인용 선택한 인용에 대한 원본 소스 내용을 표시합니다.
  4. 완료되면 오른쪽 창에서 현재 선택한 탭을 선택합니다. 오른쪽 창이 닫힙니다.

설정을 사용하여 응답 동작 변경

특정 OpenAI 모델은 채팅의 인텔리전스 및 모델과 상호 작용하는 데 사용되는 설정을 결정합니다. 개발자 설정 옵션은 채팅 앱에 대한 설정을 변경할 수 있는 응답 생성 구성 창을 엽니다.

채팅 앱의 오른쪽 창에서 사용할 수 있는 개발자 설정의 스크린샷

설정 설명
프롬프트 템플릿 재정의 질문 및 검색 결과에 따라 답변을 생성하는 데 사용되는 프롬프트를 재정의합니다.
온도 요청의 온도를 답변을 생성하는 LLM(큰 언어 모델)으로 설정합니다. 온도가 높을수록 창의적인 응답이 늘어나지만, 현실성이 떨어질 수 있습니다.
시드 초기값을 설정하여 모델 응답의 재현성을 향상시킵니다. 시드는 모든 정수일 수 있습니다.
최소 검색 점수 Azure AI Search에서 반환된 검색 결과에 대한 최소 점수를 설정합니다. 점수 범위는 검색 모드 설정에만 하이브리드(기본값), 벡터만 사용하는지 또는 텍스트만 사용하는지에 따라 달라집니다.
최소 재정렬기 점수 의미 체계 재랜커에서 반환된 검색 결과의 최소 점수를 설정합니다. 점수는 항상 0-4 사이입니다. 점수가 높을수록 결과와 의미상 관련성이 높아집니다.
이만큼의 검색 결과 Azure AI Search에서 검색할 검색 결과 수를 설정합니다. 결과가 많을수록 정답을 찾을 가능성이 높아질 수 있지만 모델이 '중간에 손실'될 수 있습니다. 인용 창의 생각 프로세스지원 콘텐츠 탭에서 반환된 원본을 볼 수 있습니다.
범주 포함 검색 결과를 생성할 때 포함할 범주를 지정합니다. 드롭다운 목록을 사용하여 선택합니다. 기본 작업은 모든 범주를 포함하는 것입니다.
범주 제외 검색 결과에서 제외할 범주를 지정합니다. 기본 데이터 집합에는 범주가 사용되지 않습니다.
검색을 위해 의미 체계 랭커 사용 사용자의 쿼리와 의미 체계 유사성에 따라 검색 결과를 다시 설정하는 모델인 Azure AI Search 의미 체계 순위 매기기를 사용하도록 설정합니다.
의미 체계 캡션 사용 전체 검색 결과 대신 의미 체계 캡션을 LLM에 보냅니다. 의미 체계 순위 프로세스 중에 검색 결과에서 의미 체계 캡션이 추출됩니다.
후속 질문 제안 LLM에 사용자의 쿼리에 따라 후속 질문을 제안하도록 요청합니다.
검색 모드 Azure AI Search 쿼리에 대한 검색 모드를 설정합니다. 기본 동작은 벡터 검색과 전체 텍스트 검색의 조합을 사용하는 Vectors + Text(하이브리드)입니다. Vectors 옵션은 벡터 검색만 사용합니다. 텍스트 옵션은 전체 텍스트 검색만 사용합니다. 하이브리드 접근 방식이 최적입니다.
완료된 채팅 응답 스트림 콘텐츠가 생성될 때 채팅 UI에 대한 응답을 지속적으로 스트리밍합니다.

다음 단계에서는 설정을 변경하는 과정을 안내합니다.

  1. 브라우저에서 개발자 설정 옵션을 선택합니다.

  2. 후속 질문 제안 확인란을 선택하여 옵션을 사용하도록 설정하고 닫기를 선택하여 설정 변경을 적용합니다.

  3. 채팅 앱에서 이번에는 질문 상자에 텍스트를 입력하여 질문을 다시 지정합니다.

    What happens in a performance review?
    

    이제 채팅 앱 답변에 제안된 후속 질문이 포함됩니다.

    채팅 앱이 답변 후 제안된 후속 질문을 제공하는 방법을 보여 주는 스크린샷.

  4. 개발자 설정 옵션을 다시 선택하고 검색 옵션에 의미 체계 순위 지정 사용 옵션을 선택 취소합니다. 설정을 닫습니다.

  5. 동일한 질문을 다시 하고 채팅 앱의 답변 차이를 확인합니다.

    Semantic 랭커와 함께: "Contoso Electronics에서 업무 평가 중에 상사는 지난 1년 동안의 성과에 대해 논의하고 개선이 필요한 부분에 대한 피드백을 줍니다. 또한 향후 연도의 목표와 목표에 대해 논의할 수 있습니다. 검토는 관리자와 직원 간의 양방향 대화이며, 직원들이 프로세스 중에 정직하고 개방적인 것이 좋습니다 (1). 검토 중에 제공된 피드백은 직원들이 자신의 역할을 개발하고 성장하도록 돕기 위해 긍정적이고 건설적이어야 합니다. 직원들은 성과 검토에 대한 서면 요약을 받게 되며, 여기에는 향후 연도(1)에 대한 성과, 피드백, 목표 및 목표에 대한 평가가 포함됩니다."

    의미 체계 순위가 없는 경우: "Contoso Electronics의 성과 검토 중에 감독자가 지난 1년 동안의 성과에 대해 논의하고 개선 분야에 대한 피드백을 제공할 것입니다. 그것은 정직하고 솔직하게 대화하도록 권장되는 양방향 소통입니다 (1). 검토 중에 제공된 피드백은 역할에서 개발하고 성장하도록 돕기 위해 긍정적이고 건설적이어야 합니다. 향후 연도(1)에 대한 성과, 피드백 및 목표의 등급을 포함하여 검토에 대한 서면 요약을 받게 됩니다."

리소스 정리

연습을 완료한 후에는 더 이상 필요하지 않은 리소스를 제거하는 것이 가장 좋습니다.

Azure 리소스 정리

이 문서에서 만들어진 Azure 리소스는 Azure 구독에 요금이 청구됩니다. 앞으로 이러한 리소스가 필요하지 않을 것으로 예상되는 경우 추가 요금이 발생하지 않도록 삭제합니다.

다음 azd 명령을 실행하여 Azure 리소스를 삭제하고 소스 코드를 제거합니다.

azd down --purge --force

명령 스위치에는 다음이 포함됩니다.

  • purge: 삭제된 리소스는 즉시 영구 삭제됩니다. 이 옵션을 사용하면 TPM(분당 Azure OpenAI 토큰) 메트릭을 다시 사용할 수 있습니다.
  • force: 삭제는 사용자 동의 없이 조용히 수행됩니다.

GitHub Codespaces 정리

  • GitHub Codespaces
  • Visual Studio Code

GitHub Codespaces 환경을 삭제하면 계정에 제공되는 코어별 무료 시간 혜택을 최대화할 수 있습니다.

중요함

GitHub 계정의 자격에 대한 자세한 내용은 GitHub Codespaces - 월별 포함된 스토리지 및 코어 시간을 참조하세요.

  1. GitHub Codespaces 대시보드로그인합니다.

  2. 대시보드에서 GitHub 리포지토리에서 소스된 현재 실행 중인 Azure-Samples/azure-search-openai-demo코드스페이스를 찾습니다.

    상태 및 템플릿을 포함하여 실행 중인 모든 GitHub Codespaces의 스크린샷

  3. 코드스페이스에 대한 상황에 맞는 메뉴를 열고 삭제를 선택합니다.

    삭제 옵션이 강조 표시된 단일 코드 영역에 대한 상황에 맞는 메뉴의 스크린샷.

도움말 보기

이 샘플 저장소는 문제 해결 정보를 제공합니다.

문제가 해결되지 않으면 리포지토리의 이슈 웹 페이지에 문제를 추가하세요.

  • 이 문서에 사용된 샘플의 소스 코드 가져오기
  • Azure OpenAI를 사용하여 채팅 앱을 구축하기 위한 모범 사례 솔루션 아키텍처
  • Azure AI 검색을 활용한 생성 AI 애플리케이션의 접근 제어
  • Azure API Management를 통해 엔터프라이즈에 적합한 OpenAI 솔루션 빌드
  • 하이브리드 검색 및 순위 지정 기능을 통해 벡터 검색 성능을 능가하기