QnA Maker를 사용하여 질문에 답변Use QnA Maker to answer questions

적용 대상: SDK v4APPLIES TO: SDK v4

QnA Maker는 사용자의 데이터에 대한 대화형 질문 및 답변 레이어를 제공합니다.QnA Maker provides a conversational question and answer layer over your data. 이 서비스를 사용하면 질문을 구문 분석하고 해당 질문의 의도를 해석할 필요 없이 봇에서 QnA Maker에 질문을 보내고 답변을 받을 수 있습니다.This allows your bot to send a question to the QnA Maker and receive an answer without needing to parse and interpret the question intent.

사용자 고유의 QnA Maker 서비스를 만들 때 기본적인 요구 사항 중 하나는 질문 및 답변을 통해 채우는 것입니다.One of the basic requirements in creating your own QnA Maker service is to populate it with questions and answers. 대부분의 경우 질문과 답변은 FAQ 또는 기타 설명서와 같은 컨텍스트에 이미 존재하지만, 질문에 대한 답변을 더 자연스러운 대화형 방법으로 사용자 지정하려는 경우도 있습니다.In many cases, the questions and answers already exist in content like FAQs or other documentation; other times, you may want to customize your answers to questions in a more natural, conversational way.

필수 구성 요소Prerequisites

이 샘플 정보About this sample

봇에서 QnA Maker를 사용하려면 다음 섹션에 나와 있는 것처럼 QnA Maker 포털에서 기술 자료를 만들어야 합니다.To use QnA Maker in your bot, you need to create a knowledge base in the QnA Maker portal, as shown in the next section. 그러면 봇에서 기술 자료를 사용하여 사용자의 질문에 대답할 수 있습니다.Your bot then can use the knowledge base to answer the user's questions.

QnABot 논리 흐름

OnMessageActivityAsync는 수신된 각 사용자 입력에 대해 호출됩니다.OnMessageActivityAsync is called for each user input received. 호출되면 _configuration 파일의 샘플 코드 appsetting.js 내에 저장된 정보에 액세스하여 미리 구성된 QnA Maker 기술 자료로 연결할 값을 찾습니다.When called, it accesses _configuration information stored within the sample code's appsetting.json file to find the value to connect to your pre-configured QnA Maker knowledge base.

사용자의 입력은 기술 자료에 보내지며 반환된 최선의 답변이 사용자에게 다시 표시됩니다.The user's input is sent to your knowledge base and the best returned answer is displayed back to your user.

QnA Maker 서비스를 만들고 기술 자료 게시Create a QnA Maker service and publish a knowledge base

  1. QnA Maker 서비스를 만듭니다.Create a QnA Maker service.
  2. 샘플 프로젝트의 CognitiveModels 폴더에 있는 smartLightFAQ.tsv 파일을 사용하여 기술 자료를 만듭니다.Create a knowledge base using the smartLightFAQ.tsv file located in the CognitiveModels folder of the sample project. 기술 자료의 이름을 qna로 지정하고 smartLightFAQ.tsv 파일을 사용하여 채웁니다.Name your knowledge base qna, and use the smartLightFAQ.tsv file to populate it.

이러한 단계를 사용하여 자체 QnA Maker 기술 자료에 액세스할 수도 있습니다.You can also use these steps to access your own QnA Maker knowledge bases.

참고

QnA Maker 설명서에는 Azure에서 서비스 만들기기술 자료 만들기, 학습 및 게시 지침이 포함되어 있습니다.The QnA Maker documentation has instructions on how to create a service in Azure and to create, train, and publish your knowledge base.

봇을 기술 자료에 연결하는 데 필요한 값 가져오기Obtain values to connect your bot to the knowledge base

  1. QnA Maker 사이트에서 기술 자료를 선택합니다.In the QnA Maker site, select your knowledge base.
  2. 기술 자료가 열려 있는 경우 설정 탭을 선택합니다. 서비스 이름 에 대해 표시된 값을 기록합니다.With your knowledge base open, select the SETTINGS tab. Record the value shown for service name. 이 값은 QnA Maker 포털 인터페이스를 사용하는 경우 관심 있는 기술 자료를 찾는 데 유용합니다.This value is useful for finding your knowledge base of interest when using the QnA Maker portal interface. 이 기술 자료는 봇 앱을 연결하는 데 사용되지 않습니다.It's not used to connect your bot app to this knowledge base.
  3. Scroll down Postman 샘플 HTTP 요청에서 배포 세부 정보를 찾고 다음 값을 기록합니다.Scroll down to find Deployment details and record the following values from the Postman sample HTTP request:
    • POST /knowledgebases/<knowledge-base-id>/generateAnswerPOST /knowledgebases/<knowledge-base-id>/generateAnswer
    • 호스트: <your-host-url>Host: <your-host-url>
    • 권한 부여: EndpointKey <your-endpoint-key>Authorization: EndpointKey <your-endpoint-key>

호스트 URL은 https:// 시작하고 https:// .azure.net/qnamaker 와 같은 /qnamaker 로 끝납니다.Your host URL will start with https:// and end with /qnamaker, such as https://.azure.net/qnamaker. 봇이 QnA Maker 기술 자료에 연결하려면 기술 자료 ID, 호스트 URL 및 엔드포인트 키가 필요합니다.Your bot will need the knowledge base ID, host URL, and endpoint key to connect to your QnA Maker knowledge base.

설정 파일 업데이트Update the settings file

먼저, 호스트 이름, 엔드포인트 키 및 기술 자료 ID(kbId) 등 기술 자료에 액세스하는 데 필요한 정보를 설정 파일에 추가합니다.First, add the information required to access your knowledge base including hostname, endpoint key and knowledge base ID (kbId) into the settings file. QnA Maker 기술 자료의 설정 탭에서 저장한 값입니다.These are the values you saved from the SETTINGS tab of your knowledge base in QnA Maker.

이 정보를 프로덕션용으로 배포하지 않는 경우 봇의 앱 ID 및 암호 필드를 비워 놓아도 됩니다.If you aren't deploying this for production, your bot's app ID and password fields can be left blank.

참고

QnA Maker 기술 자료를 기존의 봇 애플리케이션에 추가하는 경우 QnA 항목에 대한 구체적인 제목을 추가해야 합니다.To add a QnA Maker knowledge base into an existing bot application, be sure to add informative titles for your QnA entries. 이 섹션의 "이름" 값은 해당 앱 내에서 이 정보에 액세스하는 데 필요한 키를 제공합니다.The "name" value within this section provides the key required to access this information from within your app.

appsettings.jsonappsettings.json

{
  "MicrosoftAppId": "",
  "MicrosoftAppPassword": "",
  "QnAKnowledgebaseId": "",
  "QnAEndpointKey": "",
  "QnAEndpointHostName": ""
}

QnA Maker 인스턴스 설정Set up the QnA Maker instance

먼저 QnA Maker 기술 자료에 액세스하기 위한 개체를 만듭니다.First, we create an object for accessing our QnA Maker knowledge base.

프로젝트에 Microsoft.Bot.Builder.AI.QnA NuGet 패키지가 설치되어 있는지 확인합니다.Be sure that the Microsoft.Bot.Builder.AI.QnA NuGet package is installed for your project.

QnABot.cs의 OnMessageActivityAsync 메서드에서 QnAMaker 인스턴스를 만듭니다.In QnABot.cs, in the OnMessageActivityAsync method, create a QnAMaker instance. QnABot클래스는 위에서 appsettings.js 저장된 연결 정보의 이름을 끌어올 수도 있습니다.The QnABot class is also where the names of the connection information, saved in appsettings.json above, are pulled in. 설정 파일의 기술 자료 연결 정보에 대해 다른 이름을 선택한 경우 여기서 선택한 이름을 반영하여 이름을 업데이트해야 합니다.If you have chosen different names for your knowledge base connection information in your settings file, be sure to update the names here to reflect your chosen name.

Bots/QnABot.csBots/QnABot.cs

var qnaMaker = new QnAMaker(new QnAMakerEndpoint
{
    KnowledgeBaseId = _configuration["QnAKnowledgebaseId"],
    EndpointKey = _configuration["QnAEndpointKey"],
    Host = _configuration["QnAEndpointHostName"]
},
null,
httpClient);

봇에서 QnA Maker 호출Calling QnA Maker from your bot

봇에 QnAMaker의 답변이 필요한 경우 GetAnswersAsync 봇 코드에서 메서드를 호출하여 현재 컨텍스트에 따라 적절한 답변을 얻습니다.When your bot needs an answer from QnAMaker, call the GetAnswersAsync method from your bot code to get the appropriate answer based on the current context. 사용자 고유의 기술 자료로 액세스하는 경우 아래의 답변을 찾을 수 없음 메시지를 변경하여 사용자에게 유용한 지침을 제공합니다.If you're accessing your own knowledge base, change the no answers found message below to provide useful instructions for your users.

Bots/QnABot.csBots/QnABot.cs

var options = new QnAMakerOptions { Top = 1 };

// The actual call to the QnA Maker service.
var response = await qnaMaker.GetAnswersAsync(turnContext, options);
if (response != null && response.Length > 0)
{
    await turnContext.SendActivityAsync(MessageFactory.Text(response[0].Answer), cancellationToken);
}
else
{
    await turnContext.SendActivityAsync(MessageFactory.Text("No QnA Maker answers were found."), cancellationToken);
}

봇 테스트Test the bot

샘플을 머신에서 로컬로 실행합니다.Run the sample locally on your machine. 아직 설치하지 않은 경우 Bot Framework Emulator설치합니다.If you haven't done so already, install the Bot Framework Emulator. 자세한 지침은 샘플의 추가설명(C#, JavaScript, Python)을참조하세요.For further instructions, refer to the sample's README (C#, JavaScript, Python).

에뮬레이터를 시작하고, 봇에 연결하고, 아래와 같이 메시지를 보냅니다.Start the Emulator, connect to your bot, and send a message as shown below.

qna 샘플 테스트

추가 정보Additional information

QnA Maker 다중 턴 샘플(C# , JavaScript, Java, Python)은QnA Maker 대화 상자를 사용하여 QnA Maker 후속 프롬프트 및 활성 학습 기능을 지원하는 방법을 보여 드립니다.The QnA Maker multi-turn sample (C#, JavaScript, Java, Python) shows how to use a QnA Maker dialog to support QnA Maker's follow-up prompt and active learning features.

  • QnA Maker는 다중 턴 프롬프트라고도 하는 후속 프롬프트를 지원합니다.QnA Maker supports follow-up prompts, also known as multi-turn prompts. QnA Maker 기술 자료에서 사용자의 추가 응답을 요구하는 경우 QnA Maker는 메시지를 표시하는 데 사용할 수 있는 컨텍스트 정보를 사용자에게 보냅니다.If the QnA Maker knowledge base requires an additional response from the user, QnA Maker sends context information that you can use to prompt the user. 이 정보는 QnA Maker 서비스에 대한 후속 호출을 수행하는 데도 사용됩니다.This information is also used to make any follow-up calls to the QnA Maker service. 4.6 버전에서 이 기능에 대한 지원이 Bot Framework SDK에 추가되었습니다.In version 4.6, the Bot Framework SDK added support for this feature.

    이러한 기술 자료를 구성하려면 후속 프롬프트를 사용하여 다중 턴 대화를 만드는 방법에 대한 QnA Maker 설명서를 참조하세요.To construct such a knowledge base, see the QnA Maker documentation on how to Use follow-up prompts to create multiple turns of a conversation.

  • 또한 QnA Maker는 활성 학습 제한을 지원하므로, 시간이 지날수록 기술 자료가 향상됩니다.QnA Maker also supports active learning suggestions, allowing the knowledge base to improve over time. QnA Maker 대화는 활성 학습 기능에 대한 명시적인 피드백을 지원합니다.The QnA Maker dialog supports explicit feedback for the active learning feature.

    기술 자료에서 이 기능을 사용하려면 활성 학습 제안에 대한 QnA Maker 설명서를 참조하세요.To enable this feature on a knowledge base, see the QnA Maker documentation on Active learning suggestions.

다음 단계Next steps

QnA Maker는 기타 Cognitive Services와 결합하여 봇을 훨씬 더 강력하게 만들 할 수 있습니다.QnA Maker can be combined with other Cognitive Services, to make your bot even more powerful. 디스패치 도구는 봇에서 LUIS(Language Understanding)와 QnA를 결합하는 방법을 제공합니다.The Dispatch tool provides a way to combine QnA with Language Understanding (LUIS) in your bot.