콘텐츠와 Azure 기능을 갖춘 채팅 로봇을 구축하는 방법

2019년에 내가 런던행 비행기에 올랐을 때, 나는 면도 도구를 가져오는 것을 잊어버렸다는 것을 깨달았다.나는 곧 내가 묵을 호텔의 앱을 열었다.그것의 채팅 로봇 기능 덕분에 나는 그들에게 부탁을 하나 했다.그들은 즉시 나의 면도 문제를 해결할 수 있을 뿐만 아니라, 나를 위해 공항에서 택시 한 대를 예약했다.
채팅 로봇의 장점은 매우 뚜렷하다. 그들은 고객을 기쁘게 하고 판매 도구로 운영하며 당신이 대화 관계를 유지할 수 있도록 한다.나는 낙담하지 않았다. 나는 줄곧 호텔과 연락을 유지해 왔다. 현재 우리는 이미 대화의 역사를 세웠다.
대화 로봇은 고객에게 도달하기 위해 중요한 경로를 제공했기 때문에 대다수 브랜드는 전문가 로봇을 개발하고 구체적인 해결 방안을 제공하고 있다.일부 채팅 로봇은 흔히 볼 수 있는 문제 해결 방안을 제공하고 다른 채팅 로봇은 고객의 수요에 따라 특정 제품을 추천하며 일부 채팅 로봇은 계산서와 계좌 정보에 관한 문제를 신속하게 대답한다.Contentful은 채팅 로봇의 콘텐츠 층을 처리할 수 있으며 본고는 당신에게 구조, 실현과 결과를 이해하도록 안내할 것입니다.

채팅 로봇의 특정 상하문과 기술 창고


우리의 한 기업 고객은 콘텐츠 플랫폼을 사용하여 웹 제품에 대한 지원에 성공한 후에 콘텐츠를 가진 흔한 문제 해답 채팅 로봇을 구축하기를 희망한다.그들은 이미 Microsoft 클라우드 서비스를 사용하고 있기 때문에 우리는 Microsoft Azure 기능과 지식 라이브러리를 이용하여 개념을 신속하게 검증하기로 결정했다.Amazon Web Services, Google Cloud Platform 또는 IBM Watson과 같은 다른 클라우드 및 로봇 서비스와 함께 사용할 수도 있습니다. 이는 API 덕분입니다.몇 가지 초보적인 조사를 통해 우리는 여기에 소개된 구조를 개발했다. 이것은 내용이 있는 Webhook, Azure 클라우드 기능과 Microsoft의 지식 라이브러리 서비스를 사용했다.

건축학



게시 프로세스

  • 편집자는 내용
  • 에서 자주 발생하는 문제를 발표할 것이다
  • 흔한 문제의 발표는 내용
  • 에서 웹훅을 터치합니다
  • 웹hook은 우리의 발표 구름 함수
  • 을 호출합니다
  • 이 함수는 내용을 우리의 지식 라이브러리로 전송합니다
  • 게시 스트림 취소 중

  • 편집은 내용
  • 에서 자주 발생하는 문제를 취소합니다
  • FAQ를 취소하면 내용
  • 의 웹훅을 터치합니다
  • 네트워크 갈고리는 우리의 미발표 구름 함수
  • 을 호출할 것이다
  • 이 함수는 우리의 지식 라이브러리
  • 에서 흔히 볼 수 있는 문제 해답을 삭제할 것이다

    실시


    만족했어


    우리는 Contentful을 사용하여 채팅 로봇에 문제와 답을 저장합니다.내용이 풍부한 웹 응용 프로그램에서 편집자는 이 내용을 쉽게 작성하고 편집하며 발표할 수 있다. 

    컨텐트 모델


    본 프레젠테이션에서 우리는 내용 모델을 매우 간단하게 유지한다. - 단지 하나의 내용 유형에 우리의 문답 쌍과 내용 편집기의 내부 제목을 참고로 포함한다. 

    네트워크 연결


    우리는 Webhook을 사용하여 이벤트를 발표하고 취소하여 우리의 클라우드 기능을 촉발합니다.

    발표 이벤트 웹hook을 만들 때, 항목 발표 이벤트에 웹hook 트리거를 설정하십시오. 아래와 같습니다.URL의 경우 클라우드 기능을 구성하지 않았기 때문에 클라우드 기능의 끝점을 추가해야 합니다.우리는 DummyWebhook 사이트 또는 ngrok을 사용하여 가상 단점을 만들고 추가할 수 있다.

    게시 취소 이벤트 웹hook을 만들 때, 항목의 게시 취소 이벤트에 웹hook의 트리거를 설정하십시오. 아래와 같습니다.지난번처럼 우리는 Dummy Webhook이나ngrok의 가상 값을 사용하여 URL을 채울 것입니다.

    완료된 후, 게시와 취소, 발송된 웹hook 부하를 검사하여 우리의 작업 흐름을 테스트할 수 있는 항목을 만들 수 있습니다.그리고 웹 훅 로그에서 유효 부하를 볼 수 있습니다.
    발표 항목 웹훅 부하:
    {
      "sys": {
        "type": "Entry",
        "id": "1ssZF4Lqq1Wpi9KSHvq9jE",
        "space": {
          "sys": {
            "type": "Link",
            "linkType": "Space",
            "id": "bwn0phmhnub6"
          }
        },
        "environment": {
          "sys": {
            "id": "master",
            "type": "Link",
            "linkType": "Environment"
          }
        },
        "contentType": {
          "sys": {
            "type": "Link",
            "linkType": "ContentType",
            "id": "faqQuestion"
          }
        },
        "revision": 2,
        "createdAt": "2020-04-13T23:06:07.225Z",
        "updatedAt": "2020-04-13T23:07:05.635Z"
      },
      "fields": {
        "title": {
          "en-US": "First question"
        },
        "question": {
          "en-US": "What is contentful? \n\n"
        },
        "answer": {
          "en-US": {
            "data": {},
            "content": [
              {
                "data": {},
                "content": [
                  {
                    "data": {},
                    "marks": [],
                    "value": "Contentful is Headless CSM",
                    "nodeType": "text"
                  }
                ],
                "nodeType": "paragraph"
              }
            ],
            "nodeType": "document"
          }
        }
      }
    }
    
    항목 웹 훅 로드 게시 취소:
    {
      "sys": {
        "type": "DeletedEntry",
        "id": "1ssZF4Lqq1Wpi9KSHvq9jE",
        "space": {
          "sys": {
            "type": "Link",
            "linkType": "Space",
            "id": "bwn0phmhnub6"
          }
        },
        "environment": {
          "sys": {
            "id": "master",
            "type": "Link",
            "linkType": "Environment"
          }
        },
        "contentType": {
          "sys": {
            "type": "Link",
            "linkType": "ContentType",
            "id": "faqQuestion"
          }
        },
        "revision": 2,
        "createdAt": "2020-04-13T23:27:30.971Z",
        "updatedAt": "2020-04-13T23:27:30.971Z",
        "deletedAt": "2020-04-13T23:27:30.971Z"
      }
    }
    
    지금, 이것이 바로 우리가 만족 속에서 해야 할 일이다. 

    icrosoft Knowledgebase에서 FAQ 채팅 로봇 만들기


    QnA 서비스


    1. https://www.qnamaker.ai/으로 이동하여 무료 계정을 만듭니다.

    2. 지식고를 구축한다.

    3. QnA 서비스를 만듭니다.

    4. 구독 이름과 Azure QnA 서비스를 보기 위해 https://www.qnamaker.ai/으로 돌아가서 새로 고칩니다.

    5. 지식 라이브러리 작성의 나머지 단계를 완료합니다.완료되면 아래와 같은 지식 라이브러리가 있습니다.

    통합할 API


    현재 우리는 지식 라이브러리를 만드는 작업을 마쳤고 그 안에 Contentful에서 온 문제와 답안을 채워 채팅 로봇이 사용할 수 있도록 해야 한다.지식 라이브러리의 정보를 추가, 업데이트 또는 삭제할 수 있는 API를 찾아보겠습니다.
    우리는 update endpoint을 사용하여 내용을 추가하고 삭제할 것입니다.우리는 또한 download endpoint을 사용하여 모든 문제와 답안을 얻은 후에 그것들을 필터할 것이다.

    Azure 기능


    Azure 기능은 서버 없는 어플리케이션을 개발하고 배포하는 강력한 방법입니다.이 용례에 대해 우리는 Azure 함수를 선택했다. 왜냐하면 우리는 우리의 개념 검증을 신속하게 개발하고 테스트할 수 있기 때문이다.

    설치 프로그램


    Visual Studio 코드를 사용하여 Azure 기능 항목을 설정하는 지침을 제공합니다.
    우리는 이 채팅 로봇 프로젝트를 위해 다음과 같은 설정을 사용했다.
  • 언어: multiple languages을 선택할 수 있지만 자바스크립트
  • 을 사용합니다.
  • 함수 트리거: http
  • 명칭: 첫 번째 함수는publishWebhookHandler를 사용하고, 두 번째 함수는unpublishWebhookHandler
  • 을 사용합니다.
  • 액세스 권한: 잠시 익명으로 설정합니다.생산에 있어서 적당한 안전 메커니즘
  • 을 실시하도록 확보하다
    우리는 두 가지 함수를 포함하는 새로운 Azure 함수 항목을 만들었습니다:publishWebhookHandler와 unpublishWebhookHandler.

    publishWebhookHandler


    내용이 발표될 때마다 이 함수는 Contentful에서 온 웹 훅을 사용하여 내용을 지식 라이브러리로 전송하는 데 사용됩니다.
    알고리즘
  • 웹훅에서 다음 내용 검색: 항목 ID, 퀴즈
  • API으로 전화를 걸어 우리의 지식고에 전화를 걸어 모든 문제와 답안을 얻습니다.모든 문제가 생기면 메타데이터로 문제를 필터하고 항목 ID를 검사합니다. 저희는 지식 라이브러리에 중복된 문제가 있는지 확인하기 위해서 중복된 항목을 추가하는 것이 아니라 업데이트합니다.
  • 문제가 존재하면 update endpoint을 사용하여 이 문제를 업데이트합니다.동일한 끝점을 사용하여 새 문제를 추가합니다.유일한 차이점은 유효 하중의 주체이다.메타데이터에서 볼 수 있습니다. 키contentfulid와 그 값을 추가하고 있습니다.이것은 우리가 지식 라이브러리의 항목을 만족시키는 항목을 비추고 항목을 삭제하고 업데이트하는 데 도움이 된다.
  • 새 질문 추가:
    {
      "add": {
        "qnaList": [
          {
            "answer": "answer",
            "source": "source",
            "questions": [
              "question"
            ],
            "metadata": [{"name":"contentfulid","value":"1ssZF4Lqq1Wpi9KSHvq9jE"}]
          }
        ]
      }
    }
    
    업데이트 질문:
    {
      "update": {
        "name": "QnA Maker FAQ Prompts Bot",
        "qnaList": [
          {
            "id":87,
            "answer": "answer 2",
            "source": "source",
            "questions": {
              "add":["questions 1"],
              "delete":[]
            }
          }
        ]
      }
    }
    
    우리의 지식 라이브러리에 내용을 추가하는 예제 함수:
    module.exports = async function(context, req) {
       if (req.body) {
           const contentfulID = req.body.sys.id;
           const contentfulQuestion = req.body.fields.question['en-US'];
           const contentfulAnswer = req.body.fields.answer['en-US'].content[0].content[0].value;
    
           const questionFromKB = await getQuestionIdFromKB(contentfulID);
           const response = await  upsertQuestionInKB(context, questionFromKB, contentfulID, contentfulAnswer, contentfulQuestion);
    
           context.res = {
               status: 200,
               body: JSON.stringify(response),
           };
       } else {
           context.res = {
               status: 400,
               body: 'Please pass a name on the query string or in the request body',
           };
       }
    };
    

    WebHookHandler 게시 취소


    내용이 발표되지 않을 때마다 이 함수는 발표되지 않은 웹 훅을 사용하여 우리의 지식 라이브러리에서 내용을 삭제합니다.
    module.exports = async function(context, req) {
     if (req.body) {
         const contentfulID = req.body.sys.id;
         const questionId = await getQuestionIdFromKB(contentfulID);
         const response = await removeQuestionFromKB(questionId);
         context.res = {
             body: JSON.stringify(response),
         };
     } else {
         context.res = {
             status: 400,
             body: 'Please pass a name on the query string or in the request body',
         };
     }
    };
    
    알고리즘
  • 웹hook
  • 에서 항목 id 검색
  • 우리의 지식 라이브러리를 호출하여 모든 문제를 얻고 항목 id
  • 을 사용하여 문제를 선별합니다
  • API으로 전화를 걸어 우리의 지식 라이브러리에서 이 문제를 삭제합니다.유효 하중은 다음과 비슷해 보입니다.
  • {
       "delete":{
          "ids":[
             29
          ]
       }
    }
    

    미국 석유 학회 배치


    일단 이 두 가지 기능이 모두 준비되면 그것들을 Azure 클라우드에 배치할 수 있다.

    배치가 완료되면 Microsoft Azure portal에서publishWebhookHandler와 unpublishWebhookHandler URL을 가져옵니다.첫 번째 단계에서 만든 웹 훅에 추가합니다.

    채팅 로봇 테스트


    컨텐츠 채우기


    우리는 세 개의 테스트 문답을 발표했다.모든 발표 이벤트는 웹 훅을 터치하여 우리의 지식 라이브러리로 전송합니다.검사를 진행하기 위해서, 우리는 에 로그인하여 문제가 발표되었는지 확인합니다.
    아래 화면 캡처에서 발표된 세 개의 문답 문제를 볼 수 있습니다. 내용이 풍부하고 저희 지식 라이브러리에 추가됩니다.
    https://www.qnamaker.ai
    이제 우리 지식고에서 훈련 내용을 배울 것이다.QnA 서비스에서 Test를 클릭하면 채팅 로봇을 테스트할 수 있습니다.

    결과


    현재 당신은 스마트 채팅 로봇이 하나 생겨서 고객이 그것과 이야기할 수 있다.이렇게 하면 고객은 사이트의 대량의 목록을 조회해서 간단한 답안을 검색할 필요가 없다.너는 또한 고객의 정서와 그들이 자주 제기하는 문제를 평가할 수 있다.이러한 추가 정보가 있으면 우리는 흔히 볼 수 있는 문제를 개선할 수 있다. 

    채팅 로봇의 미래 증강 기능

  • 우리의 내용 모델은 하나의 답안에 여러 개의 문제를 추가하고 항목마다 추가 메타데이터를 추가할 수 있도록 확장할 수 있습니다.이를 위해,publishWebhookHandler 함수의 동기화 기능을 업데이트해야 합니다.
  • Contentful은 서로 다른 모델을 제공하여 다양한 언어로 내용을 만들고 다중 언어 로봇을 지원할 수 있다. 
  • 은 본고에서 우리는 Microsoft 기술을 사용하는 창고를 탐색했지만 localizationAWS Lambda을 사용해도 비슷한 기능을 실현할 수 있다.API를 제공하여 지식 라이브러리에 접근하는 모든 채팅 로봇 플랫폼은 Contentful과 함께 사용할 수 있다.웹hooks와 클라우드 기능을 사용하면 우리는 내용을 지식 라이브러리에 전송한 후에 이를 교육할 수 있다.
  • 만약 당신이 자신의 대화 채팅 로봇을 실현하고 싶다면, 당신은 AWS Lex을 스스로 시험해 보세요.언제든지 연락 주세요.우리의 솔루션 서비스 팀은 기업 고객과 협력하여 그들의 디지털화 여행을 가속화시켰다.

    좋은 웹페이지 즐겨찾기