Orchestrator에서 여러 LUIS 및 QnA 모델 사용

적용 대상: SDK v4

참고

Azure AI QnA Maker는 2025년 3월 31일에 사용 중지됩니다. 2022년 10월 1일부터 새 QnA Maker 리소스 또는 기술 자료를 만들 수 없습니다. 이제 최신 버전의 질문 및 답변 기능을 Azure AI 언어의 일부로 사용할 수 있습니다.

Azure AI Language의 기능인 사용자 지정 질문 답변은 QnA Maker 서비스의 업데이트된 버전입니다. Bot Framework SDK의 질문 및 답변 지원에 대한 자세한 내용은 자연어 이해를 참조하세요.

참고

LUIS(Language Understanding)는 2025년 10월 1일에 사용 중지됩니다. 2023년 4월 1일부터 새 LUIS 리소스를 만들 수 없습니다. 이제 최신 버전의 언어 이해가 Azure AI 언어의 일부로 제공됩니다.

Azure AI Language의 기능인 CLU(대화형 언어 이해)는 업데이트된 LUIS 버전입니다. Bot Framework SDK의 언어 이해 지원에 대한 자세한 내용은 자연어 이해를 참조하세요.

봇이 여러 LUIS(Language Understanding) 모델 및 QnA Maker 기술 자료를 사용하는 경우 Bot Framework Orchestrator를 사용하여 사용자 입력과 가장 일치하는 LUIS 모델 또는 QnA Maker 기술 자료 확인할 수 있습니다. CLI 명령을 사용하여 bf orchestrator Orchestrator 스냅샷 파일을 만든 다음, 스냅샷 파일을 사용하여 런타임에 사용자 입력을 올바른 모델로 라우팅할 수 있습니다.

이 문서에서는 Orchestrator에서 기존 QnA Maker 기술 자료 사용하는 방법을 설명합니다.

사전 요구 사항

이 샘플 정보

이 샘플은 미리 정의된 LUIS 및 QnA Maker 프로젝트 집합을 기반으로 합니다. 그러나 봇에서 QnA Maker를 사용하려면 QnA Maker 포털에 기존 기술 자료 필요합니다. 그러면 봇에서 기술 자료를 사용하여 사용자의 질문에 대답할 수 있습니다.

새 봇 개발의 경우 Power Virtual Agents를 사용하는 것이 좋습니다. Bot Framework SDK 봇에 대한 새 기술 자료 만들어야 하는 경우 다음 Azure AI 서비스 문서를 참조하세요.

C# 클래스 다이어그램.

OnMessageActivityAsync는 수신된 각 사용자 입력에 대해 호출됩니다. 이 모듈은 가장 점수가 높은 사용자 의도를 찾고 해당 결과를 DispatchToTopIntentAsync에 전달합니다. DispatchToTopIntentAsync는 적절한 앱 처리기를 호출합니다.

  • ProcessSampleQnAAsync - 봇 FAQ 질문
  • ProcessWeatherAsync - 날씨 쿼리용
  • ProcessHomeAutomationAsync - 주택 조명 명령용

처리기가 LUIS 또는 QnA Maker 서비스를 호출하고, 생성된 결과를 사용자에게 다시 반환합니다.

LUIS 앱 만들기

Orchestrator 스냅샷 파일을 만들려면 LUIS 앱과 QnA 기술 자료를 만들고 게시해야 합니다. 이 문서에서 참조하는 샘플 봇은 폴더의 NLP With Orchestrator 샘플에 \CognitiveModels 포함된 다음 모델을 사용합니다.

Name Description
HomeAutomation 연결된 엔터티 데이터를 사용하여 홈 자동화 의도를 인식하는 LUIS 앱입니다.
Weather 위치 데이터를 사용하여 날씨 관련 의도를 인식하는 LUIS 앱입니다.
QnAMaker 봇과 관련된 간단한 질문에 대한 답변을 제공하는 QnA Maker 기술 자료입니다.

LUIS 앱 만들기

샘플의 Cognitive Models 디렉터리에 있는 HomeAutomationWeather .lu 파일에서 LUIS 앱을 만듭니다.

  1. 다음 명령을 실행하여 앱을 프로덕션 환경에 가져오고, 학습시키고, 게시합니다.

    bf luis:build --in CognitiveModels --authoringKey <YOUR-KEY> --botName <YOUR-BOT-NAME>
    
  2. 애플리케이션 ID, 표시 이름, 작성 키 및 위치를 기록합니다.

자세한 내용은 LUIS 포털에서 LUIS 앱을 만들고봇에 자연어 이해 추가에서 LUIS 앱에 연결할 값 가져오기 및 프로덕션 환경에 앱을 학습하고 게시하는 방법에 대한 LUIS 설명서를 참조하세요.

봇을 기술 자료에 연결하는 데 필요한 값 가져오기

참고

Azure AI QnA Maker는 2025년 3월 31일에 사용 중지됩니다. 2022년 10월 1일부터 새 QnA Maker 리소스 또는 기술 자료를 만들 수 없습니다. 이제 최신 버전의 질문 및 답변 기능을 Azure AI 언어의 일부로 사용할 수 있습니다.

Azure AI Language의 기능인 사용자 지정 질문 답변은 QnA Maker 서비스의 업데이트된 버전입니다. Bot Framework SDK의 질문 및 답변 지원에 대한 자세한 내용은 자연어 이해를 참조하세요.

기존 기술 자료 QnA Maker 호스트 이름 및 엔드포인트 키가 필요합니다.

QnA Maker 설명서에는 기술 자료 만들고 학습하고 게시하는 방법에 대한 지침이 있습니다.

Orchestrator 스냅샷 파일 만들기

Orchestrator 도구의 CLI 인터페이스는 런타임에 올바른 LUIS 또는 QnA Maker 앱으로 라우팅하기 위한 Orchestrator 스냅샷 파일을 만듭니다.

  1. 지원되는 최신 버전의 Visual C++ 재배포 가능 패키지 패키지 설치

  2. 명령 프롬프트 또는 터미널 창을 열고 디렉터리를 샘플 디렉터리로 변경합니다.

  3. 현재 버전의 npm 및 Bot Framework CLI가 있는지 확인합니다.

    npm i -g npm
    npm i -g @microsoft/botframework-cli
    
  4. Orchestrator 기본 모델 파일 다운로드

    mkdir model
    bf orchestrator:basemodel:get --out ./model
    
  5. Orchestrator 스냅샷 파일 만들기

    mkdir generated
    bf orchestrator:create --hierarchical --in ./CognitiveModels --out ./generated --model ./model
    

패키지 설치

이 앱을 처음으로 실행하기 전에 몇 가지 NuGet 패키지가 설치되어 있는지 확인하세요.

  • Microsoft.Bot.Builder
  • Microsoft.Bot.Builder.AI.Luis
  • Microsoft.Bot.Builder.AI.QnA
  • Microsoft.Bot.Builder.AI.Orchestrator

appsettings.json 파일을 수동으로 업데이트

모든 서비스 앱이 생성되면 각 앱에 대한 정보를 'appsettings.json' 파일에 추가해야 합니다. C# (보관됨) 코드의 초기 샘플에는 빈 appsettings.json 파일이 포함되어 있습니다.

appsettings.json

C# (보관됨)

다음 지침에 따라 아래에 표시된 각 엔터티에 앞서 기록한 값을 추가합니다.

"QnAKnowledgebaseId": "<knowledge-base-id>",
"QnAEndpointKey": "<qna-maker-resource-key>",
"QnAEndpointHostName": "<your-hostname>",

"LuisHomeAutomationAppId": "<app-id-for-home-automation-app>",
"LuisWeatherAppId": "<app-id-for-weather-app>",
"LuisAPIKey": "<your-luis-endpoint-key>",
"LuisAPIHostName": "<your-dispatch-app-region>",

모든 변경을 완료했으면 이 파일을 저장합니다.

봇에서 서비스에 연결

LUIS 및 QnA Maker 서비스에 연결하기 위해 봇은 설정 파일에서 정보를 가져옵니다.

BotServices.cs에서 구성 파일 appsettings.json에 포함된 정보는 Orchestrator 봇HomeAutomation을 , WeatherSampleQnA 서비스에 연결하는 데 사용됩니다. 생성자는 개발자가 지정한 값을 사용하여 이러한 서비스에 연결합니다.

BotServices.cs

C# (보관됨)

봇에서 서비스 호출

사용자의 각 입력에 대해 봇 논리는 사용자 입력을 Orchestrator Recognizer에 전달하고, 반환된 상위 의도를 찾고, 해당 정보를 사용하여 입력에 적합한 서비스를 호출합니다.

메서드가 호출 될 때마다 OnMessageActivityAsyncDispatchBot.cs 파일에서 들어오는 사용자 메시지를 검사 Orchestrator Recognizer에서 최상위 의도를 가져옵니다. 그런 다음, 및 recognizerResult 를 올바른 메서드에 전달 topIntent 하여 서비스를 호출하고 결과를 반환합니다.

bots\DispatchBot.cs

C# (보관됨)

인식 결과 작업

Orchestrator 인식기가 결과를 생성할 때 발화를 가장 적절하게 처리할 수 있는 서비스를 나타냅니다. 이 봇의 코드는 해당 서비스에 요청을 라우팅한 후 호출된 서비스에의 응답을 요약합니다. Orchestrator에서 반환된 의도 에 따라 이 코드는 반환된 의도를 사용하여 올바른 LUIS 모델 또는 QnA 서비스로 라우팅합니다.

bots\DispatchBot.cs

C# (보관됨)

ProcessWeatherAsync 메서드는 ProcessHomeAutomationAsync 턴 컨텍스트 내에 포함된 사용자 입력을 사용하여 올바른 LUIS 모델에서 상위 의도 및 엔터티를 가져옵니다.

메서드는 ProcessSampleQnAAsync 턴 컨텍스트 내에 포함된 사용자 입력을 사용하여 기술 자료 답변을 생성하고 해당 결과를 사용자에게 표시합니다.

참고

프로덕션 애플리케이션일 경우 선택된 LUIS 메서드가 지정된 서비스에 연결하고, 사용자 입력을 전달하고, 반환된 LUIS 의도 및 엔터티 데이터를 처리합니다.

봇 테스트

  1. 개발 환경을 사용하여 샘플 코드를 시작합니다. 앱https://localhost:<Port_Number>에서 연 브라우저 창의 주소 표시줄에 표시된 localhost 주소를 확인합니다.

  2. Bot Framework Emulator 열고 봇 열기 단추를 클릭합니다.

  3. 봇 열기 대화 상자에서 봇 엔드포인트 URL(예: )을 http://localhost:3978/api/messages입력합니다. 연결을 클릭합니다.

  4. 참고로, 봇용 서비스에서 다루는 몇 가지 질문과 명령은 다음과 같습니다.

    • QnA Maker
      • hi, good morning
      • what are you, what do you do
    • LUIS(가정 자동화)
      • turn on bedroom light
      • turn off bedroom light
      • make some coffee
    • LUIS(날씨)
      • whats the weather in redmond washington
      • what's the forecast for london
      • show me the forecast for nebraska

사용자 발언을 QnA Maker로 라우팅

  1. 에뮬레이터에서 텍스트를 hi 입력하고 발화를 제출합니다. 봇은 이 쿼리를 Orchestrator에 제출하고 추가 처리를 위해 이 발화를 가져와야 하는 자식 앱을 나타내는 응답을 다시 가져옵니다.

  2. 로그에서 Orchestrator Recognition Trace 줄을 선택하면 에뮬레이터에서 JSON 응답을 볼 수 있습니다. 오케스트레이터 결과가 검사기에서 표시됩니다.

    {
    "type": "trace",
    "timestamp": "2021-05-01T06:26:04.067Z",
    "serviceUrl": "http://localhost:58895",
    "channelId": "emulator",
    "from": {
      "id": "36b2a460-aa43-11eb-920f-7da472b36492",
      "name": "Bot",
      "role": "bot"
    },
    "conversation": {
      "id": "17ef3f40-aa46-11eb-920f-7da472b36492|livechat"
    },
    "recipient": {
      "id": "5f8c6123-2596-45df-928c-566d44426556",
      "role": "user"
    },
    "locale": "en-US",
    "replyToId": "1a3f70d0-aa46-11eb-8b97-2b2a779de581",
    "label": "Orchestrator Recognition",
    "valueType": "OrchestratorRecognizer",
    "value": {
      "text": "hi",
      "alteredText": null,
      "intents": {
        "QnAMaker": {
          "score": 0.9987310956576168
        },
        "HomeAutomation": {
          "score": 0.3402091165577196
        },
        "Weather": {
          "score": 0.24092200496795158
        }
      },
      "entities": {},
      "result": [
        {
          "Label": {
            "Type": 1,
            "Name": "QnAMaker",
            "Span": {
              "Offset": 0,
              "Length": 2
            }
          },
          "Score": 0.9987310956576168,
          "ClosestText": "hi"
        },
        {
          "Label": {
            "Type": 1,
            "Name": "HomeAutomation",
            "Span": {
              "Offset": 0,
              "Length": 2
            }
          },
          "Score": 0.3402091165577196,
          "ClosestText": "make some coffee"
        },
        {
          "Label": {
            "Type": 1,
            "Name": "Weather",
            "Span": {
              "Offset": 0,
              "Length": 2
            }
          },
          "Score": 0.24092200496795158,
          "ClosestText": "soliciting today's weather"
        }
      ]
    },
    "name": "OrchestratorRecognizerResult",
    "id": "1ae65f30-aa46-11eb-8b97-2b2a779de581",
    "localTimestamp": "2021-04-30T23:26:04-07:00"
    }
    

    발화인 hi는 Orchestrator의 QnAMaker 의도의 일부이며 로 topScoringIntent선택되기 때문에 봇은 이번에는 동일한 발화를 사용하여 QnA Maker 앱에 두 번째 요청을 수행합니다.

  3. QnAMaker Trace 에뮬레이터 로그에서 줄을 선택합니다. QnA Maker 결과가 검사기에 표시됩니다.

    {
        "questions": [
            "hi",
            "greetings",
            "good morning",
            "good evening"
        ],
        "answer": "Hello!",
        "score": 1,
        "id": 96,
        "source": "QnAMaker.tsv",
        "metadata": [],
        "context": {
            "isContextOnly": false,
            "prompts": []
        }
    }
    

[Python (보관됨)]: (https://github.com/microsoft/BotBuilder-Samples/tree/main/archive/samples/python/14.nlp-with-orchestrator