JavaScript의 채팅 앱에서 답변 평가 시작

이 문서에서는 올바른 답변 또는 이상적인 답변 집합(지상 진리라고 함)에 대해 채팅 앱의 답변을 평가하는 방법을 보여 줍니다. 답변에 영향을 주는 방식으로 채팅 애플리케이션을 변경할 때마다 평가를 실행하여 변경 내용을 비교합니다. 이 데모 애플리케이션은 평가를 더 쉽게 실행할 수 있도록 오늘 사용할 수 있는 도구를 제공합니다.

이 문서의 지침을 따르면 다음을 수행할 수 있습니다.

  • 제목에 맞게 조정된 제공된 샘플 프롬프트를 사용합니다기본. 이러한 항목은 이미 리포지토리에 있습니다.
  • 사용자 고유의 문서에서 샘플 사용자 질문 및 근거 정답을 생성합니다.
  • 생성된 사용자 질문과 함께 샘플 프롬프트를 사용하여 평가를 실행합니다.
  • 답변 분석을 검토합니다.

아키텍처 개요

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

  • Azure 호스팅 채팅 앱: 채팅 앱은 Azure 앱 Service에서 실행됩니다. 채팅 앱은 프로토콜을 준수하는 모든 채팅 앱에 대해 평가 앱을 실행할 수 있도록 하는 채팅 프로토콜을 준수합니다.
  • Azure AI Search: 채팅 앱은 Azure AI Search를 사용하여 사용자 고유의 문서에서 데이터를 저장합니다.
  • 샘플 질문 생성기: 기본 진리 답변과 함께 각 문서에 대한 다양한 질문을 생성할 수 있습니다. 질문이 많을수록 평가가 길어질 수 있습니다.
  • 평가자는 채팅 앱에 대해 샘플 질문 및 프롬프트를 실행하고 결과를 반환합니다.
  • 검토 도구를 사용하면 평가 결과를 검토할 수 있습니다.
  • Diff 도구를 사용하면 평가 간의 답변을 비교할 수 있습니다.

필수 조건

  • Azure 구독. 무료로 만들기

  • 원하는 Azure 구독의 Azure OpenAI에 대한 액세스 권한.

    현재 이 서비스에 대한 액세스 권한은 애플리케이션에서만 부여됩니다. https://aka.ms/oai/access에서 양식을 작성하여 Azure OpenAI에 대한 액세스를 신청할 수 있습니다.

  • 이전 채팅 앱 절차를 완료하여 Azure에 채팅 앱을 배포합니다. 이 절차는 Azure AI Search 리소스에 데이터를 로드합니다. 평가 앱이 작동하려면 이 리소스가 필요합니다. 이전 절차의 리소스 정리 섹션을 완료하지 마세요.

    이 문서의 채팅 앱이라고 하는 해당 배포의 다음 Azure 리소스 정보가 필요합니다.

    • Web API URI: 배포된 채팅 앱 API의 URI입니다.
    • Azure AI 검색. 다음 값이 필요합니다.
      • 리소스 이름: Azure AI Search 리소스 이름의 이름입니다.
      • 인덱스 이름: 문서가 저장되는 Azure AI Search 인덱스의 이름입니다.
      • 쿼리 키: 검색 인덱스 쿼리 키입니다.
    • 채팅 앱 인증을 실험한 경우 평가 앱이 채팅 앱에 액세스할 수 있도록 사용자 인증을 사용하지 않도록 설정해야 합니다.

    이 정보를 수집한 후에는 채팅 앱 개발 환경을 다시 사용할 필요가 없습니다. 이 문서의 뒷부분에서 여러 번 참조되어 평가 앱에서 채팅 앱을 사용하는 방법을 나타냅니다. 이 문서의 전체 절차를 완료할 때까지 채팅 앱 리소스를 삭제하지 마세요.

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

    • GitHub 계정

개방형 개발 환경

이 문서를 완료하려면 모든 종속성이 설치된 개발 환경으로 지금 시작합니다. 이 설명서와 개발 환경을 동시에 볼 수 있도록 모니터 작업 영역을 정렬해야 합니다.

GitHub Codespaces는 사용자 인터페이스로 웹용 Visual Studio Code를 사용하여 GitHub에서 관리하는 개발 컨테이너를 실행합니다. 가장 간단한 개발 환경을 위해서는 GitHub Codespaces를 사용하여 이 문서를 완료하는 데 필요한 올바른 개발자 도구와 종속성을 미리 설치합니다.

Important

모든 GitHub 계정은 2개의 코어 인스턴스를 사용하여 매월 최대 60시간 동안 Codespaces를 무료로 사용할 수 있습니다. 자세한 내용은 GitHub Codespaces 월별 포함 스토리지 및 코어 시간을 참조하세요.

  1. Azure-Samples/ai-rag-chat-evaluator GitHub 리포지토리의 main 분기에 새 GitHub Codespace를 만드는 프로세스를 시작합니다.

  2. 다음 단추를 마우스 오른쪽 단추로 클릭하고 개발 환경과 설명서를 동시에 사용할 수 있도록 새 창에서 링크 열기를 선택합니다.

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

    새 codespace를 만들기 전에 확인 화면의 스크린샷

  4. codespace가 생성될 때까지 기다립니다. 이 프로세스에는 몇 분 정도 걸릴 수 있습니다.

  5. 화면 하단의 터미널에서 Azure 개발자 CLI를 사용하여 Azure에 로그인합니다.

    azd auth login --use-device-code
    
  6. 터미널에서 코드를 복사한 다음 브라우저에 붙여넣습니다. 지침에 따라 Azure 계정으로 인증합니다.

  7. 평가 앱에 필요한 Azure 리소스인 Azure OpenAI를 프로비전합니다.

    azd up
    

    평가 앱을 배포하지는 않지만, 개발 환경에서 로컬로 평가를 실행하는 데 필요한 GPT-4 배포를 사용하여 Azure OpenAI 리소스를 만듭니다.

  8. 이 문서의 나머지 작업은 이 개발 컨테이너의 컨텍스트에서 수행됩니다.

  9. GitHub 리포지토리의 이름이 검색 창에 표시됩니다. 이렇게 하면 이 평가 앱과 채팅 앱을 구분할 수 있습니다. 이 리포지토리를 이 ai-rag-chat-evaluator 문서의 평가 앱이라고 합니다.

환경 값 및 구성 정보 준비

평가 앱에 대한 필수 구성 요소 중에 수집한 정보로 환경 값 및 구성 정보를 업데이트합니다.

  1. 다음 명령을 사용하여 Evaluations 앱 리소스 정보를 파일로 가져옵니다 .env .

    azd env get-values > .env
    
  2. Azure AI Search 인스턴스에 대한 채팅 앱의 다음 값을 필수 구성 요소 섹션에서 수집한 값에 추가합니다..env

    AZURE_SEARCH_SERVICE="<service-name>"
    AZURE_SEARCH_INDEX="<index-name>"
    AZURE_SEARCH_KEY="<query-key>"
    

    값은 AZURE_SEARCH_KEY Azure AI Search 인스턴스에 대한 쿼리 키입니다.

  3. example_config.json Evaluations 앱 폴더의 루트에 있는 파일을 새 파일에 my_config.json복사합니다.

  4. 기존 콘텐츠를 다음 콘텐츠 my_config.json 로 바꿉다.

    {
        "testdata_path": "my_input/qa.jsonl",
        "results_dir": "my_results/experiment<TIMESTAMP>",
        "target_url": "http://localhost:50505/chat",
        "target_parameters": {
            "overrides": {
                "semantic_ranker": false,
                "prompt_template": "<READFILE>my_input/prompt_refined.txt"
            }
        }
    }
    
  5. target_url 필수 구성 요소 섹션에서 수집한 채팅 앱URI 값으로 변경합니다. 채팅 앱은 채팅 프로토콜을 준수해야 합니다. URI 형식은 다음과 같습니다 https://CHAT-APP-URL/chat. 프로토콜과 경로가 chat URI의 일부인지 확인합니다.

샘플 데이터 생성

새로운 답변을 평가하려면 특정 질문에 대한 이상적인 대답인 "지상 진리" 답변과 비교해야 합니다. 채팅 앱에 대한 Azure AI Search에 저장된 문서에서 질문과 답변을 생성합니다.

  1. 폴더를 example_inputmy_input 폴더에 복사합니다.

  2. 터미널에서 다음 명령을 실행하여 샘플 데이터를 생성합니다.

    python3 -m scripts generate --output=my_input/qa.jsonl --numquestions=14 --persource=2
    

질문/답변 쌍은 다음 단계에서 사용되는 평가자에 대한 입력으로 생성되고 JSONL 형식으로 저장 my_input/qa.jsonl 됩니다. 프로덕션 평가의 경우 이 데이터 세트에 대해 200개 이상의 QA 쌍을 생성합니다.

참고 항목

원본당 몇 가지 질문과 답변은 이 절차를 신속하게 완료할 수 있도록 하기 위한 것입니다. 원본당 더 많은 질문과 답변이 있어야 하는 프로덕션 평가가 아닙니다.

구체화된 프롬프트를 사용하여 첫 번째 평가 실행

  1. my_config.json 구성 파일 속성을 편집합니다.

    • 프롬프트의 이름을 포함하도록 변경 results_dir 합니다 my_results/experiment_refined.
    • 평가에서 <READFILE>my_input/experiment_refined.txt 구체화된 프롬프트 템플릿을 사용하려면 다음으로 변경 prompt_template 합니다.

    구체화된 프롬프트는 제목에 대해 매우 구체적입니다기본.

    If there isn't enough information below, say you don't know. Do not generate answers that don't use the sources below. If asking a clarifying question to the user would help, ask the question.
    
    Use clear and concise language and write in a confident yet friendly tone. In your answers ensure the employee understands how your response connects to the information in the sources and include all citations necessary to help the employee validate the answer provided.
    
    For tabular information return it as an html table. Do not return markdown format. If the question is not in English, answer in the language used in the question.
    
    Each source has a name followed by colon and the actual information, always include the source name for each fact you use in the response. Use square brackets to reference the source, e.g. [info1.txt]. Don't combine sources, list each source separately, e.g. [info1.txt][info2.pdf].
    
  2. 터미널에서 다음 명령을 실행하여 평가를 실행합니다.

    python3 -m scripts evaluate --config=my_config.json --numquestions=14
    

    이렇게 하면 평가와 함께 새 실험 폴더가 생성되었습니다 my_results . 폴더에는 다음을 포함한 평가 결과가 포함됩니다.

    • eval_results.jsonl: 각 QA 쌍에 대한 GPT 메트릭과 함께 각 질문과 대답입니다.
    • summary.json: 평균 GPT 메트릭과 같은 전체 결과입니다.

약한 프롬프트를 사용하여 두 번째 평가 실행

  1. my_config.json 구성 파일 속성을 편집합니다.

    • 다음으로 변경 results_dir 합니다. my_results/experiment_weak
    • 다음 평가에서 <READFILE>my_input/prompt_weak.txt 약한 프롬프트 템플릿을 사용하려면 다음으로 변경 prompt_template 합니다.

    그 약한 프롬프트는 주제에 대한 컨텍스트가 없습니다기본:

    You are a helpful assistant.
    
  2. 터미널에서 다음 명령을 실행하여 평가를 실행합니다.

    python3 -m scripts evaluate --config=my_config.json --numquestions=14
    

특정 온도로 세 번째 평가 실행

더 많은 창의력을 발휘할 수 있는 프롬프트를 사용합니다.

  1. my_config.json 구성 파일 속성을 편집합니다.

    • 다음으로 변경 results_dir 합니다. my_results/experiment_ignoresources_temp09
    • 다음으로 변경 prompt_template 합니다. <READFILE>my_input/prompt_ignoresources.txt
    • 새 재정 "temperature": 0.9 의를 추가합니다. 기본 온도는 0.7입니다. 온도가 높을수록 답변이 창의적입니다.

    무시 프롬프트는 짧습니다.

    Your job is to answer questions to the best of your ability. You will be given sources but you should IGNORE them. Be creative!
    
  2. 구성 개체는 사용자 고유 results_dir의 구성 개체를 제외하고 다음과 같아야 합니다.

    {
        "testdata_path": "my_input/qa.jsonl",
        "results_dir": "my_results/experiment_ignoresources_temp09",
        "target_url": "https://YOUR-CHAT-APP/chat",
        "target_parameters": {
            "overrides": {
                "temperature": 0.9,
                "semantic_ranker": false,
                "prompt_template": "<READFILE>my_input/prompt_ignoresources.txt"
            }
        }
    }
    
  3. 터미널에서 다음 명령을 실행하여 평가를 실행합니다.

    python3 -m scripts evaluate --config=my_config.json --numquestions=14
    

평가 결과 검토

다양한 프롬프트 및 앱 설정에 따라 세 가지 평가를 수행했습니다. 결과는 폴더에 my_results 저장됩니다. 설정에 따라 결과가 어떻게 다른지 검토합니다.

  1. 검토 도구를 사용하여 평가 결과를 확인합니다.

    python3 -m review_tools summary my_results
    
  2. 결과는 다음과 같습니다.

    세 가지 평가를 보여 주는 평가 검토 도구의 스크린샷

    각 값은 숫자와 백분율로 반환됩니다.

  3. 다음 표를 사용하여 값의 의미를 이해합니다.

    설명
    접지 이는 모델의 응답이 사실적이고 검증 가능한 정보를 기반으로 얼마나 잘 수행되는지를 나타냅니다. 응답은 실제로 정확하고 현실을 반영하는 경우 접지된 것으로 간주됩니다.
    정확도 이렇게 하면 모델의 응답이 컨텍스트 또는 프롬프트와 얼마나 밀접하게 일치하는지 측정합니다. 관련 응답은 사용자의 쿼리 또는 문을 직접 다룹니다.
    일관성 이는 모델의 응답이 논리적으로 얼마나 일치하는지를 나타냅니다. 일관된 응답은 논리적 흐름을 기본 자체와 모순되지 않습니다.
    인용 이는 프롬프트에서 요청된 형식으로 응답이 반환되었는지를 나타냅니다.
    Length 응답의 길이를 측정합니다.
  4. 결과는 모든 3개의 평가가 관련성이 높고 관련성이 experiment_ignoresources_temp09 가장 낮음을 나타내야 합니다.

  5. 평가에 대한 구성을 보려면 폴더를 선택합니다.

  6. Ctrl + C를 입력하여 앱을 종료하고 터미널로 돌아갑니다.

답변 비교

평가에서 반환된 답변을 비교합니다.

  1. 비교할 평가 중 두 가지를 선택한 다음, 동일한 검토 도구를 사용하여 답변을 비교합니다.

    python3 -m review_tools diff my_results/experiment_refined my_results/experiment_ignoresources_temp09
    
  2. 결과를 검토합니다.

    평가 간의 평가 답변 비교 스크린샷

  3. Ctrl + C를 입력하여 앱을 종료하고 터미널로 돌아갑니다.

추가 평가를 위한 제안

  • 프롬프트를 my_input 편집하여 제목 작업기본, 길이 및 기타 요인과 같은 답변을 조정합니다.
  • my_config.json 파일을 편집하여 같은 temperature매개 변수를 변경하고 semantic_ranker 실험을 다시 실행합니다.
  • 다른 답변을 비교하여 프롬프트와 질문이 답변 품질에 미치는 영향을 이해합니다.
  • Azure AI Search 인덱스의 각 문서에 대한 별도의 질문 및 근거 정답 집합을 생성합니다. 그런 다음 평가를 다시 실행하여 답변이 어떻게 다른지 확인합니다.
  • 프롬프트 끝에 요구 사항을 추가하여 더 짧거나 긴 답변을 나타내도록 프롬프트를 변경합니다. 예를 들어 Please answer in about 3 sentences.

리소스 정리

Azure 리소스 정리

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

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

azd down --purge

GitHub Codespaces 정리

GitHub Codespaces 환경을 삭제하면 계정에 대해 얻을 수 있는 코어당 무료 사용 권한을 최대화할 수 있습니다.

중요

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

  1. GitHub Codespaces 대시보드(https://github.com/codespaces)에 로그인합니다.

  2. Azure-Samples/ai-rag-chat-evaluator GitHub 리포지토리에서 제공된 현재 실행 중인 Codespaces를 찾습니다.

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

  3. codespace에 대한 상황에 맞는 메뉴를 열고 삭제를 선택합니다.

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

채팅 앱 문서로 돌아가서 해당 리소스를 클린.

다음 단계