이 빠른 시작에서는 Microsoft Foundry에서 CQA(사용자 지정 질문 답변) 프로젝트를 만들고 테스트하고 배포하는 데 필요한 필수 단계를 안내합니다. Language Studio에서 전환하든 처음부터 시작하든 상관없이 이 빠른 시작이 적합합니다. 빠르고 성공적인 CQA 프로젝트 배포를 달성하기 위한 명확하고 실행 가능한 지침을 제공합니다.
참고
- 자체적으로 사용하든 Language Studio를 통해 사용하든 간에 Foundry 도구 또는 다중 서비스 리소스에 Azure Language가 이미 있는 경우 Foundry 포털 내에서 이러한 기존 언어 리소스를 계속 사용할 수 있습니다. 자세한 내용은 Foundry 포털에서 Foundry 도구를 사용하는 방법을 참조하세요.
- Foundry에서 Foundry 리소스를 사용하는 것이 좋습니다. 그러나 언어 리소스를 사용하여 이러한 지침을 따를 수도 있습니다.
필수 조건
시작하기 전에 다음 리소스 및 권한이 필요합니다.
- 활성 Azure 구독입니다. 계정이 없는 경우 체험 계정을 만듭니다.
- 필수 권한입니다. 계정 및 프로젝트를 설정하는 사람이 구독 수준에서 Azure AI 계정 소유자 역할로 할당되었는지 확인합니다. 또는 구독 범위에서 기여자 또는 Cognitive Services 기여자 역할을 갖는 것도 이 요구 사항을 충족합니다. 자세한 내용은 RBAC(역할 기반 액세스 제어)를 참조하세요.
- Foundry 리소스 또는 언어 리소스입니다.
- Azure AI 검색 리소스(CQA에 액세스하는 데 필요). Azure AI Search 리소스를 연결하는 방법에 대한 자세한 내용은 Foundry에서 연결 구성을 참조하세요.
- Foundry에서 만든 Foundry 프로젝트입니다. 자세한 내용은 Foundry 프로젝트 만들기를참조하세요.
시작하기
Foundry로 이동합니다.
아직 로그인하지 않은 경우 포털에서 Azure 자격 증명으로 로그인하라는 메시지를 표시합니다.
로그인하면 Foundry 내에서 기존 프로젝트를 만들거나 액세스할 수 있습니다.
해당 작업에 대한 프로젝트가 아직 없다면 해당 프로젝트를 선택합니다.
CQA 미세 조정 작업 만들기
Foundry에서 미세 조정 작업은 CQA 솔루션의 작업 영역 역할을 합니다. 이전에는 미세 조정 작업을 CQA 프로젝트라고 했습니다. 이전 CQA 설명서에서 두 용어를 서로 교환하여 사용할 수 있습니다.
이 빠른 시작에 사용할 Foundry 프로젝트를 선택한 후 왼쪽 탐색 메뉴에서 미세 조정을 선택합니다.
주 창에서 AI 서비스 미세 조정 탭을 선택한 다음 + 미세 조정 단추를 선택합니다.
서비스 만들기 미세 조정 창에서 사용자 지정 질문 답변 탭을 선택한 다음, 다음을 선택합니다.
CQA 만들기 미세 조정 작업 창에서 연결된 Azure AI 검색 리소스를 선택합니다. 자세한 내용은 Azure 리소스 연결 구성을 참조하세요.
다음으로 이름 및 언어 필드를 완료합니다. 이 프로젝트의 경우 답변이 반환되지 않을 때의 기본 답변 필드를 있는 그대로 두면 됩니다(답변을 찾을 수 없음).
만들기 단추를 선택합니다.
CQA 기술 자료 원본 추가
CQA 기술 자료는 대화형 AI에 최적화된 정형 질문 및 답변 쌍 집합입니다. 기술 자료는 자연어 처리를 사용하여 사용자 쿼리를 해석하고 특정 데이터 세트에서 컨텍스트를 인식하는 정확한 답변을 반환합니다.
시작 메뉴에서 원본 관리를 선택합니다.
주 창에서 + 원본 추가 드롭다운 메뉴를 선택합니다.
드롭다운 메뉴에서 잡담 추가, URL 추가 또는 파일 추가를 선택할 수 있습니다.
이 프로젝트의 경우 잡담 추가를 선택해 보겠습니다.
새 원본 추가 창에서 친숙한을 선택해 보겠습니다.
마지막으로 추가를 선택합니다. 원본을 만드는 데 몇 분 정도 걸릴 수 있습니다.
원본이 만들어지면 원본 관리 창에 나열됩니다.
기술 자료 테스트
시작 메뉴에서 기술 자료 테스트를 선택합니다.
질문 입력 필드에 다음을 입력한 다음 실행을 선택합니다.
Hello! How are you doing today?검사 인터페이스에서 응답 신뢰도 수준을 검토하고 가장 적합한 답변을 선택할 수 있습니다.
기술 자료 배포
CQA 기술 자료를 배포한다는 것은 큐레이팅된 질문 및 답변 콘텐츠를 검색 가능한 라이브 엔드포인트로 게시하는 것을 의미합니다. 이 프로세스는 테스트 단계에서 프로덕션 환경으로 프로젝트를 이동하여 클라이언트 애플리케이션이 챗봇을 비롯한 다양한 프로젝트 및 솔루션에 사용할 수 있도록 합니다.
검사가 완료되면 시작 메뉴에서 기술 자료 배포 섹션을 선택합니다.
먼저 기술 자료 배포 주 창에서 배포 단추를 선택한 다음 이 프로젝트 배포 팝업 창에서 선택합니다. 배포하는 데 몇 분 정도 걸립니다.
배포가 완료되면 배포된 프로젝트가 기술 자료 배포 창에 나열됩니다.
그거에요! CQA(사용자 지정 질문 답변) 기술 자료는 데이터에 자연어 인터페이스를 제공하여 사용자가 대화형 방식으로 정보와 상호 작용할 수 있도록 합니다. 이 솔루션을 배포하면 사용자 질문을 이해하고, 정확한 답변을 제공하고, 변화하는 정보 요구 사항에 맞게 조정하는 고급 챗봇 및 대화형 에이전트를 만들 수 있습니다.
필수 조건
- 현재 버전의 cURL. 빠른 시작에는 몇 가지 명령줄 스위치가 사용되며, 이러한 스위치는 cURL 설명서에 나와 있습니다.
- Azure 구독 - 체험 구독 만들기
- 사용자 지정 질문 답변에는 API 키 및 엔드포인트를 생성하기 위해 사용 설정된 사용자 지정 질문 답변 기능이 있는 언어 리소스가 필요합니다.
- 언어 리소스가 배포된 후 리소스로 이동을 선택합니다. API에 연결하려면 생성한 리소스의 키와 엔드포인트가 필요합니다. 빠른 시작의 뒷부분에 나오는 코드에 키와 엔드포인트를 붙여넣습니다.
-
Azure CLI를 사용하여 언어 리소스를 만들고 다음 속성을 제공합니다.
--api-properties qnaAzureSearchEndpointId=/subscriptions/<azure-subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Search/searchServices/<azure-search-service-name> qnaAzureSearchEndpointKey=<azure-search-service-auth-key> - 쿼리할 기존 프로젝트입니다. 프로젝트가 설치되지 않은 경우 Language Studio 빠른 시작의 지침을 따를 수 있습니다. 또는 이 Surface 사용자 가이드 URL을 데이터 원본으로 사용하는 프로젝트를 추가합니다.
설치
환경 변수 만들기
API 요청을 보내려면 애플리케이션을 인증해야 합니다. 프로덕션의 경우 자격 증명을 안전하게 저장하고 액세스하는 방법을 사용합니다. 이 예제에서는 애플리케이션을 실행하는 로컬 컴퓨터의 환경 변수에 자격 증명을 작성합니다.
Language 리소스 키에 대한 환경 변수를 설정하려면 콘솔 창을 열고 운영 체제 및 개발 환경에 대한 지침을 따릅니다.
-
LANGUAGE_KEY환경 변수를 설정하려면your-key를 리소스에 대한 키 중 하나로 바꿉니다. -
LANGUAGE_ENDPOINT환경 변수를 설정하려면your-endpoint를 리소스에 대한 엔드포인트로 바꿉니다.
중요한
클라우드에서 실행되는 애플리케이션에 자격 증명을 저장하지 않으려면 Microsoft Entra ID 인증과 함께 Azure 리소스에 대한 관리 ID를 사용하는 것이 좋습니다.
주의해서 API 키를 사용합니다. API 키를 코드에 직접 포함하지 말고, 공개적으로 게시하지 마세요. API 키를 사용하는 경우 Azure Key Vault에 안전하게 저장하고, 정기적으로 키를 회전하고, 역할 기반 액세스 제어 및 네트워크 액세스 제한을 사용하여 Azure Key Vault에 대한 액세스를 제한합니다. 앱에서 API 키를 안전하게 사용하는 방법에 대한 자세한 내용은 Azure Key Vault를 사용하여 API 키를 참조하세요.
AI 서비스 보안에 대한 자세한 내용은 Azure AI 서비스에 대한 요청 인증을 참조하세요.
setx LANGUAGE_KEY your-key
setx LANGUAGE_ENDPOINT your-endpoint
참고
현재 실행 중인 콘솔에서만 환경 변수에 액세스해야 하는 경우 환경 변수를 set 대신 setx으로 설정할 수 있습니다.
환경 변수를 추가한 후에는 콘솔 창을 포함하여 환경 변수를 읽어야 하는 실행 중인 프로그램을 다시 시작해야 할 수 있습니다. 예를 들어 편집기로 Visual Studio를 사용하는 경우 Visual Studio를 다시 시작한 후 예제를 실행합니다.
프로젝트 쿼리
프로젝트에서 답변 생성
REST API 및 cURL을 사용하여 사용자 지정 질문 답변 프로젝트를 쿼리하려면 다음 정보가 필요합니다.
| 변수 이름 | 값 |
|---|---|
Endpoint |
이 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. 또는 Language Studio>질문 답변>프로젝트 배포>예측 URL 가져오기에서 값을 찾을 수 있습니다. 엔드포인트 예제는 https://southcentralus.cognitiveservices.azure.com/입니다. |
API-Key |
이 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. Key1 또는 Key2를 사용할 수 있습니다. 가동 중지 시간이 0인 안전한 키 회전을 위해 항상 두 개의 유효한 키가 있어야 합니다. 또는 Language Studio>질문 답변>프로젝트 배포>예측 URL 가져오기에서 값을 찾을 수 있습니다. 키 값은 샘플 요청의 일부입니다. |
Project |
사용자 지정 질문 답변 프로젝트의 이름. |
Deployment |
두 개의 가능한 값은 test 및 production입니다.
production은 Language Studio>질문 답변>프로젝트 배포에서 프로젝트를 배포했는지 여부에 따라 달라집니다. |
cURL 명령은 BASH 셸에서 실행됩니다. 사용자 고유의 리소스 이름, 리소스 키 및 JSON 값과 JSON 크기를 사용하여 이 명령을 편집합니다.
curl -X POST -H "Ocp-Apim-Subscription-Key: $LANGUAGE_KEY" -H "Content-Type: application/json" -d '{
"question": "How much battery life do I have left?"
}' '$LANGUAGE_ENDPOINT.cognitiveservices.azure.com/language/:query-knowledgebases?projectName={YOUR_PROJECT_NAME}&api-version=2021-10-01&deploymentName={DEPLOYMENT_NAME}'
코드를 실행할 때 필수 구성 요소의 데이터 원본을 사용하는 경우 다음과 같은 답변을 얻을 수 있습니다.
{
"answers": [
{
"questions": [
"Check battery level"
],
"answer": "If you want to see how much battery you have left, go to **Start **> **Settings **> **Devices **> **Bluetooth & other devices **, then find your pen. The current battery level will appear under the battery icon.",
"confidenceScore": 0.9185,
"id": 101,
"source": "https://support.microsoft.com/en-us/surface/how-to-use-your-surface-pen-8a403519-cd1f-15b2-c9df-faa5aa924e98",
"metadata": {},
"dialog": {
"isContextOnly": false,
"prompts": []
}
}
]
}
confidenceScore는 0과 1 사이의 값을 반환합니다. 신뢰도 점수에 100을 곱하여 백분율로 간주합니다. 예를 들어 신뢰도 점수 0.9185는 사용자 지정 질문 답변 시스템이 프로젝트 정보를 바탕으로 응답이 정확하다고 91.85% 확신함을 나타냅니다.
신뢰도 점수가 특정 임계값 미만인 답변을 제외하려면 confidenceScoreThreshold 매개 변수를 추가하면 됩니다.
curl -X POST -H "Ocp-Apim-Subscription-Key: $LANGUAGE_KEY" -H "Content-Type: application/json" -d '{
"question": "How much battery life do I have left?",
"confidenceScoreThreshold": "0.95",
}' '$LANGUAGE_ENDPOINT.cognitiveservices.azure.com//language/:query-knowledgebases?projectName=Sample-project&api-version=2021-10-01&deploymentName={DEPLOYMENT_NAME}'
이전 코드 실행을 통해 신뢰도 점수는 다음과 같습니다. .9185 임계값을 .95(으)로 설정하면 기본 답변이 반환됩니다.
{
"answers": [
{
"questions": [],
"answer": "No good match found in KB",
"confidenceScore": 0.0,
"id": -1,
"metadata": {}
}
]
}
프로젝트 없이 텍스트 쿼리
를 통해 호출되는 미리 빌드된 사용자 지정 질문 답변 REST API를 사용하여 query-text할 수도 있습니다. 이 경우, 요청이 전송될 때 질문과 답변을 찾고자 하는 관련 텍스트 레코드를 함께 제공하여 질문에 대한 답변을 구합니다.
다음 예제에서는 API KEY 및 ENDPOINT에 대한 변수만 수정하면 됩니다.
curl -X POST -H "Ocp-Apim-Subscription-Key: $LANGUAGE_KEY" -H "Content-Type: application/json" -d '{
"question":"How long does it takes to charge a surface?",
"records":[
{"id":"doc1","text":"Power and charging.It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. It can take longer if you\u0027re using your Surface for power-intensive activities like gaming or video streaming while you\u0027re charging it"},
{"id":"doc2","text":"You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface."}],
"language":"en",
"stringIndexType":"Utf16CodeUnit"
}' '$LANGUAGE_ENDPOINT.cognitiveservices.azure.com/language/:query-text?&api-version=2021-10-01'
이 예에서는 다음 결과를 반환합니다.
{
"answers": [
{
"answer": "Power and charging.It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it",
"confidenceScore": 0.9118788838386536,
"id": "doc1",
"answerSpan": {
"text": "two to four hours",
"confidenceScore": 0.9850527,
"offset": 27,
"length": 18
},
"offset": 0,
"length": 243
},
{
"answer": "It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it",
"confidenceScore": 0.052793052047491074,
"id": "doc1",
"answerSpan": {
"text": "longer",
"confidenceScore": 0.6694634,
"offset": 11,
"length": 7
},
"offset": 109,
"length": 134
},
{
"answer": "You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface.",
"confidenceScore": 0.017600709572434425,
"id": "doc2",
"answerSpan": {
"text": "USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. The USB port on the power supply is only for charging",
"confidenceScore": 0.1544854,
"offset": 15,
"length": 165
},
"offset": 0,
"length": 280
}
]
}
.NET용 사용자 지정 질문 답변 클라이언트 라이브러리에 대해 이 빠른 시작을 사용하여 다음을 수행합니다.
- 프로젝트에서 답변을 가져옵니다.
- 질문과 함께 보내는 텍스트 본문에서 답변을 얻습니다.
- 질문에 대한 답변의 신뢰도 점수를 얻습니다.
참조 설명서 | 패키지(NuGet) | 샘플 | 라이브러리 소스 코드
필수 조건
- Azure 구독 - 체험 구독 만들기
- Visual Studio IDE 또는 현재 버전의 .NET Core.
- 사용자 지정 질문 답변에는 API 키 및 엔드포인트를 생성하기 위해 사용 설정된 사용자 지정 질문 답변 기능이 있는 언어 리소스가 필요합니다.
- 언어 리소스가 배포된 후 리소스로 이동을 선택합니다. API에 연결하려면 생성한 리소스의 키와 엔드포인트가 필요합니다. 빠른 시작의 뒷부분에 나오는 코드에 키와 엔드포인트를 붙여넣습니다.
-
Azure CLI를 사용하여 언어 리소스를 만들고 다음 속성을 제공합니다.
--api-properties qnaAzureSearchEndpointId=/subscriptions/<azure-subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Search/searchServices/<azure-search-service-name> qnaAzureSearchEndpointKey=<azure-search-service-auth-key> - 쿼리할 기존 프로젝트입니다. 프로젝트가 없는 경우 Language Studio 빠른 시작의 지침을 따르면 됩니다. 또는 이 Surface 사용자 가이드 URL을 데이터 원본으로 사용하는 프로젝트를 추가합니다.
설치
환경 변수 만들기
API 요청을 보내려면 애플리케이션을 인증해야 합니다. 프로덕션의 경우 자격 증명을 안전하게 저장하고 액세스하는 방법을 사용합니다. 이 예제에서는 애플리케이션을 실행하는 로컬 컴퓨터의 환경 변수에 자격 증명을 작성합니다.
Language 리소스 키에 대한 환경 변수를 설정하려면 콘솔 창을 열고 운영 체제 및 개발 환경에 대한 지침을 따릅니다.
-
LANGUAGE_KEY환경 변수를 설정하려면your-key를 리소스에 대한 키 중 하나로 바꿉니다. -
LANGUAGE_ENDPOINT환경 변수를 설정하려면your-endpoint를 리소스에 대한 엔드포인트로 바꿉니다.
중요한
클라우드에서 실행되는 애플리케이션에 자격 증명을 저장하지 않으려면 Microsoft Entra ID 인증과 함께 Azure 리소스에 대한 관리 ID를 사용하는 것이 좋습니다.
주의해서 API 키를 사용합니다. API 키를 코드에 직접 포함하지 말고, 공개적으로 게시하지 마세요. API 키를 사용하는 경우 Azure Key Vault에 안전하게 저장하고, 정기적으로 키를 회전하고, 역할 기반 액세스 제어 및 네트워크 액세스 제한을 사용하여 Azure Key Vault에 대한 액세스를 제한합니다. 앱에서 API 키를 안전하게 사용하는 방법에 대한 자세한 내용은 Azure Key Vault를 사용하여 API 키를 참조하세요.
AI 서비스 보안에 대한 자세한 내용은 Azure AI 서비스에 대한 요청 인증을 참조하세요.
setx LANGUAGE_KEY your-key
setx LANGUAGE_ENDPOINT your-endpoint
참고
현재 실행 중인 콘솔에서만 환경 변수에 액세스해야 하는 경우 환경 변수를 set 대신 setx으로 설정할 수 있습니다.
환경 변수를 추가한 후에는 콘솔 창을 포함하여 환경 변수를 읽어야 하는 실행 중인 프로그램을 다시 시작해야 할 수 있습니다. 예를 들어 편집기로 Visual Studio를 사용하는 경우 Visual Studio를 다시 시작한 후 예제를 실행합니다.
CLI
콘솔 창(예: cmd, PowerShell 또는 Bash)에서 dotnet new 명령을 사용하여 question-answering-quickstart라는 새 콘솔 앱을 만듭니다. 이 명령은 program.cs라는 단일 소스 파일을 사용하여 간단한 "Hello World" C# 프로젝트를 만듭니다.
dotnet new console -n question-answering-quickstart
새로 만든 앱 폴더로 디렉터리를 변경합니다. 다음을 통해 애플리케이션을 빌드할 수 있습니다.
dotnet build
빌드 출력에 경고나 오류가 포함되지 않아야 합니다.
...
Build succeeded.
0 Warning(s)
0 Error(s)
...
애플리케이션 디렉터리 내에서 다음 명령을 사용하여 .NET용 사용자 지정 질문 답변 클라이언트 라이브러리를 설치합니다.
dotnet add package Azure.AI.Language.QuestionAnswering
프로젝트 쿼리
프로젝트에서 답변 생성
다음 예제에서는 질문에 대한 답변을 얻기 위해 사용하여 GetAnswers를 사용하여 프로젝트를 쿼리할 수 있습니다.
코드를 업데이트하고 다음 변수에 대한 고유한 값을 제공해야 합니다.
| 변수 이름 | 값 |
|---|---|
endpoint |
이 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. 또는 Language Studio>질문 답변>프로젝트 배포>예측 URL 가져오기에서 값을 찾을 수 있습니다. 엔드포인트 예제는 https://southcentralus.cognitiveservices.azure.com/입니다. |
credential |
이 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. Key1 또는 Key2를 사용할 수 있습니다. 가동 중지 시간이 0인 안전한 키 회전을 위해 항상 두 개의 유효한 키가 있어야 합니다. 또는 Language Studio>질문 답변>프로젝트 배포>예측 URL 가져오기에서 값을 찾을 수 있습니다. 키 값은 샘플 요청의 일부입니다. |
projectName |
사용자 지정 질문 답변 프로젝트의 이름. |
deploymentName |
두 개의 가능한 값은 test 및 production입니다.
production은 Language Studio>질문 답변>프로젝트 배포에서 프로젝트를 배포했는지 여부에 따라 달라집니다. |
중요한
완료되면 코드에서 키를 제거하고 공개적으로 게시하지 마세요. 프로덕션의 경우 Azure Key Vault와 같은 자격 증명을 안전하게 저장하고 액세스하는 방법을 사용합니다. 자세한 내용은 Foundry 도구 보안을 참조하세요.
프로젝트 디렉터리에서 program.cs 파일을 열고, 다음 코드로 바꿉니다.
using Azure;
using Azure.AI.Language.QuestionAnswering;
using System;
namespace question_answering
{
class Program
{
static void Main(string[] args)
{
// This example requires environment variables named "LANGUAGE_KEY" and "LANGUAGE_ENDPOINT"
Uri endpoint = new Uri("LANGUAGE_ENDPOINT");
AzureKeyCredential credential = new AzureKeyCredential("LANGUAGE_KEY");
string projectName = "{YOUR-PROJECT-NAME}";
string deploymentName = "production";
string question = "How long should my Surface battery last?";
QuestionAnsweringClient client = new QuestionAnsweringClient(endpoint, credential);
QuestionAnsweringProject project = new QuestionAnsweringProject(projectName, deploymentName);
Response<AnswersResult> response = client.GetAnswers(question, project);
foreach (KnowledgeBaseAnswer answer in response.Value.Answers)
{
Console.WriteLine($"Q:{question}");
Console.WriteLine($"A:{answer.Answer}");
}
}
}
}
이 예의 변수를 하드 코딩하는 동안. 프로덕션의 경우 자격 증명을 안전하게 저장하고 액세스하는 방법을 사용하는 것이 좋습니다. 예를 들어 Azure Key Vault는 보안 키 스토리지를 제공합니다.
먼저 Program.cs를 업데이트하고 올바른 변수 값으로 바꿉니다. 애플리케이션 디렉터리에서 dotnet run 명령을 사용하여 애플리케이션을 실행합니다.
dotnet run
응답은 다음과 같습니다.
Q: How much battery life do I have left?
A: If you want to see how much battery you have left, go to **Start **> **Settings **> **Devices **> **Bluetooth & other devices **, then find your pen. The current battery level will appear under the battery icon.
신뢰도 점수에 대한 자세한 내용을 확인하려면 기존 인쇄 문 아래에 다음 인쇄 문을 추가합니다.
Console.WriteLine($"Q:{question}");
Console.WriteLine($"A:{answer.Answer}");
Console.WriteLine($"({answer.Confidence})"); // add this line
dotnet run을 다시 실행하면 이제 신뢰도 점수가 있는 결과가 표시됩니다.
Q:How much battery life do I have left?
A:If you want to see how much battery you have left, go to **Start **> **Settings **> **Devices **> **Bluetooth & other devices **, then find your pen. The current battery level will appear under the battery icon.
(0.9185)
신뢰도 점수에 100을 곱하여 백분율로 간주합니다. 예를 들어 신뢰도 점수 0.9185는 사용자 지정 질문 답변 시스템이 프로젝트 정보를 바탕으로 응답이 정확하다고 91.85% 확신함을 나타냅니다.
신뢰도 점수가 특정 임계값 미만인 답변을 제외하려면 AnswerOptions를 사용하여 ConfidenceScoreThreshold 속성을 추가합니다.
QuestionAnsweringClient client = new QuestionAnsweringClient(endpoint, credential);
QuestionAnsweringProject project = new QuestionAnsweringProject(projectName, deploymentName);
AnswersOptions options = new AnswersOptions(); //Add this line
options.ConfidenceThreshold = 0.95; //Add this line
Response<AnswersResult> response = client.GetAnswers(question, project, options); //Add the additional options parameter
이전 코드 실행을 통해 신뢰도 점수는 다음과 같습니다. .9185 임계값을 .95(으)로 설정하면 기본 답변이 반환됩니다.
Q:How much battery life do I have left?
A:No good match found in KB
(0)
프로젝트 없이 텍스트 쿼리
GetAnswersFromText를 사용하면 프로젝트 없이 사용자 지정 질문 답변을 사용할 수도 있습니다. 요청이 보내질 때, 귀하는 질문과 이를 통해 답변을 검색하고자 하는 관련 텍스트 레코드를 모두 제공하여 사용자 맞춤형 질문 답변 서비스를 제공합니다.
다음 예제에서는 endpoint 및 credential에 대한 변수만 수정하면 됩니다.
using Azure;
using Azure.AI.Language.QuestionAnswering;
using System;
using System.Collections.Generic;
namespace questionansweringcsharp
{
class Program
{
static void Main(string[] args)
{
Uri endpoint = new Uri("https://{YOUR-ENDPOINT}.cognitiveservices.azure.com/");
AzureKeyCredential credential = new AzureKeyCredential("YOUR-LANGUAGE-RESOURCE-KEY");
QuestionAnsweringClient client = new QuestionAnsweringClient(endpoint, credential);
IEnumerable<TextDocument> records = new[]
{
new TextDocument("doc1", "Power and charging.It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. " +
"It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it"),
new TextDocument("doc2", "You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. " +
"The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface."),
};
AnswersFromTextOptions options = new AnswersFromTextOptions("How long does it takes to charge a surface?", records);
Response<AnswersFromTextResult> response = client.GetAnswersFromText(options);
foreach (TextAnswer answer in response.Value.Answers)
{
if (answer.Confidence > .9)
{
string BestAnswer = response.Value.Answers[0].Answer;
Console.WriteLine($"Q:{options.Question}");
Console.WriteLine($"A:{BestAnswer}");
Console.WriteLine($"Confidence Score: ({response.Value.Answers[0].Confidence:P2})"); //:P2 converts the result to a percentage with 2 decimals of accuracy.
break;
}
else
{
Console.WriteLine($"Q:{options.Question}");
Console.WriteLine("No answers met the requested confidence score.");
break;
}
}
}
}
}
코드를 실행하려면 Program.cs를 스크립트 블록의 내용으로 바꾸고 필수 구성 요소의 일부로 만든 언어 리소스에 해당하도록 endpoint 및 credential 변수를 수정합니다.
이 경우 모든 답변을 반복하고 0.9보다 큰 가장 높은 신뢰도 점수를 가진 답변만 반환합니다.
GetAnswersFromText에서 사용할 수 있는 옵션에 대해 자세히 알아보세요.
Python용 사용자 지정 질문 답변 클라이언트 라이브러리에 대해 이 빠른 시작을 사용하여 다음을 수행합니다.
- 프로젝트에서 답변을 가져옵니다.
- 질문과 함께 보내는 텍스트 본문에서 답변을 얻습니다.
- 질문에 대한 답변의 신뢰도 점수를 얻습니다.
패키지(PyPI) | 샘플 | 라이브러리 소스 코드
필수 조건
- Azure 구독 - 체험 구독 만들기
- Python 3.x
- 사용자 지정 질문 답변에는 API 키 및 엔드포인트를 생성하기 위해 사용 설정된 사용자 지정 질문 답변 기능이 있는 언어 리소스가 필요합니다.
- 언어 리소스가 배포된 후 리소스로 이동을 선택합니다. API에 연결하려면 생성한 리소스의 키와 엔드포인트가 필요합니다. 빠른 시작의 뒷부분에 나오는 코드에 키와 엔드포인트를 붙여넣습니다.
-
Azure CLI를 사용하여 언어 리소스를 만들고 다음 속성을 제공합니다.
--api-properties qnaAzureSearchEndpointId=/subscriptions/<azure-subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Search/searchServices/<azure-search-service-name> qnaAzureSearchEndpointKey=<azure-search-service-auth-key> - 쿼리할 기존 프로젝트입니다. 프로젝트가 없는 경우 Language Studio 빠른 시작의 지침을 따르면 됩니다. 또는 이 Surface 사용자 가이드 URL을 데이터 원본으로 사용하는 프로젝트를 추가합니다.
설치
클라이언트 라이브러리 설치
Python을 설치한 후, 다음을 사용하여 클라이언트 라이브러리를 설치할 수 있습니다.
pip install azure-ai-language-questionanswering
프로젝트 쿼리
프로젝트에서 답변 생성
이 예제에서는 get_answers를 사용해 프로젝트를 쿼리하여 질문에 대한 답변을 얻을 수 있습니다. 이 코드는 전용 .py 파일 또는 Jupyter Notebook/Lab의 셀에 복사할 수 있습니다.
코드를 업데이트하고 다음 변수에 대한 고유한 값을 제공해야 합니다.
| 변수 이름 | 값 |
|---|---|
endpoint |
이 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. 또는 Language Studio>질문 답변>프로젝트 배포>예측 URL 가져오기에서 값을 찾을 수 있습니다. 엔드포인트 예제는 https://southcentralus.cognitiveservices.azure.com/입니다. |
credential |
이 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. Key1 또는 Key2를 사용할 수 있습니다. 가동 중지 시간이 0인 안전한 키 회전을 위해 항상 두 개의 유효한 키가 있어야 합니다. 또는 Language Studio>질문 답변>프로젝트 배포>예측 URL 가져오기에서 값을 찾을 수 있습니다. 키 값은 샘플 요청의 일부입니다. |
knowledge_base_project |
질문 답변 프로젝트의 이름입니다. |
deployment |
두 개의 가능한 값은 test 및 production입니다.
production; |
중요한
완료되면 코드에서 키를 제거하고 공개적으로 게시하지 마세요. 프로덕션의 경우 Azure Key Vault와 같은 자격 증명을 안전하게 저장하고 액세스하는 방법을 사용합니다. 자세한 내용은 Foundry 도구 보안 문서를 참조하세요.
from azure.core.credentials import AzureKeyCredential
from azure.ai.language.questionanswering import QuestionAnsweringClient
endpoint = "https://{YOUR-ENDPOINT}.cognitiveservices.azure.com/"
credential = AzureKeyCredential("{YOUR-LANGUAGE-RESOURCE-KEY}")
knowledge_base_project = "{YOUR-PROJECT-NAME}"
deployment = "production"
def main():
client = QuestionAnsweringClient(endpoint, credential)
with client:
question="How much battery life do I have left?"
output = client.get_answers(
question = question,
project_name=knowledge_base_project,
deployment_name=deployment
)
print("Q: {}".format(question))
print("A: {}".format(output.answers[0].answer))
if __name__ == '__main__':
main()
이 예의 변수를 하드 코딩하는 동안. 프로덕션의 경우 자격 증명을 안전하게 저장하고 액세스하는 방법을 사용하는 것이 좋습니다. 예를 들어 Azure Key Vault는 보안 키 스토리지를 제공합니다.
코드를 실행할 때 필수 구성 요소의 데이터 원본을 사용하는 경우 다음과 같은 답변을 얻을 수 있습니다.
Q: How much battery life do I have left?
A: If you want to see how much battery you have left, go to **Start **> **Settings **> **Devices **> **Bluetooth & other devices **, then find your pen. The current battery level will appear under the battery icon.
신뢰도 점수에 대한 자세한 내용을 알아보려면 다음 인쇄 문을 추가합니다.
print("Q: {}".format(question))
print("A: {}".format(output.answers[0].answer))
print("Confidence Score: {}".format(output.answers[0].confidence)) # add this line
신뢰도 점수가 있는 결과가 표시됩니다.
Q: How much battery life do I have left?
A: If you want to see how much battery you have left, go to **Start **> **Settings **> **Devices **> **Bluetooth & other devices **, then find your pen. The current battery level will appear under the battery icon.
Confidence Score: 0.9185
신뢰도 점수에 100을 곱하여 백분율로 간주합니다. 예를 들어 신뢰도 점수 0.9185는 사용자 지정 질문 답변 시스템이 프로젝트 정보를 바탕으로 응답이 정확하다고 91.85% 확신함을 나타냅니다.
신뢰도 점수가 특정 임계값 아래로 떨어지는 답변을 제외하려면 AnswerOptions를 수정하여 매개 변수를 confidence_threshold 추가할 수 있습니다.
output = client.get_answers(
confidence_threshold = 0.95, #add this line
question = question,
project_name=knowledge_base_project,
deployment_name=deployment
)
이전 코드 실행을 통해 신뢰도 점수는 다음과 같습니다. .9185 임계값을 .95(으)로 설정하면 기본 답변이 반환됩니다.
Q: How much battery life do I have left?
A: No good match found in KB
Confidence Score: 0.0
프로젝트 없이 텍스트 쿼리
get_answers_from_text 프로젝트 없이 사용자 지정 질문 답변을 사용할 수도 있습니다. 요청이 보내질 때, 귀하는 질문과 이를 통해 답변을 검색하고자 하는 관련 텍스트 레코드를 모두 제공하여 사용자 맞춤형 질문 답변 서비스를 제공합니다.
다음 예제에서는 endpoint 및 credential에 대한 변수만 수정하면 됩니다.
import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.language.questionanswering import QuestionAnsweringClient
from azure.ai.language.questionanswering import models as qna
endpoint = "https://{YOUR-ENDPOINT}.cognitiveservices.azure.com/"
credential = AzureKeyCredential("YOUR-LANGUAGE-RESOURCE-KEY")
def main():
client = QuestionAnsweringClient(endpoint, credential)
with client:
question="How long does it takes to charge a surface?"
input = qna.AnswersFromTextOptions(
question=question,
text_documents=[
"Power and charging. It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. " +
"It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it.",
"You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. " +
"The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface.",
]
)
output = client.get_answers_from_text(input)
best_answer = [a for a in output.answers if a.confidence > 0.9][0]
print(u"Q: {}".format(input.question))
print(u"A: {}".format(best_answer.answer))
print("Confidence Score: {}".format(output.answers[0].confidence))
if __name__ == '__main__':
main()
이 코드는 전용 .py 파일 또는 Jupyter Notebook/Lab의 새 셀에 복사할 수 있습니다. 이 예에서는 다음 결과를 반환합니다.
Q: How long does it takes to charge surface?
A: Power and charging. It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it.
Confidence Score: 0.9254655838012695
이 경우 모든 답변을 반복하고 0.9보다 큰 가장 높은 신뢰도 점수를 가진 답변만 반환합니다. get_answers_from_text 사용할 수 있는 옵션에 대해 자세히 알아보려면 AnswersFromTextOptions 매개 변수를 검토하세요.
리소스 정리
Azure AI 리소스를 정리하고 제거하려면 개별 리소스 또는 전체 리소스 그룹을 삭제할 수 있습니다. 리소스 그룹을 삭제하면 포함된 모든 리소스도 삭제됩니다.