자산 관리를위한 챗봇
이 기사에서는 재미있는 작은 프로젝트로 Asset Control 용 챗봇을 구성하고 있습니다. 왜? 나는 한동안 챗봇을 구현하고 싶었 기 때문에-그 방법을 이해하기 위해서만-AC 도메인에서 그렇게하는 것은 자연스럽게 보인다. 또한 Slack과 통합하여 기존 도구 및 워크 플로에 어떻게 적용되는지 확인합니다.
무엇을 할 수있는 챗봇?
지금 쯤이면 여러 곳에서 챗봇을 만나게 될 것입니다. 회사 웹 사이트에있을 수 있으며 자주 묻는 질문에 대한 답변을 얻고 예약 등을 할 수 있습니다.
이 경우에는 Asset Control과 통신 할 수있는 Slack과 통합 할 챗봇의 프로토 타입을 구현하고 싶습니다. AC 환경의 상태 정보를 요청하거나 데이터를 요청할 수 있습니다.
구현을 안내하기 위해 봇이 답할 수 있어야하는 다음 질문을 사용했습니다.
- XYZ의 마지막 가격은 얼마입니까?
- XYZ의 이번 달 최고는 무엇입니까?
- 오늘 용의자는 몇 명입니까?
- 복제가 최신 상태입니까?
그렇다면 봇을 처음부터 구현하고 있습니까? 당연히 아니지. 많은 솔루션이 있으며 Google Dialogflow에 빠르게 정착했습니다. 이것이 어떻게 작동하는지 봅시다.
Dialogflow에서 봇 빌드
Google Dialogflow 에서 봇을 빌드하려면 몇 가지 개념을 이해해야합니다.
- 의도
- 엔티티
- 이행
인 텐트는 봇이 처리해야하는 협소하게 정의 된 특정 주제에 속하는 모든 항목을 번들로 제공합니다. 우리의 경우 시스템에서 재고의 마지막 가용 가격을 검색합니다. Dialogflow를 사용하여 봇에게 학습 문구를 제공하여 대화가 그러한 의도에 대한 대화 인 경우 이해하도록 봇을 학습시킵니다. 곧 알게 될 것입니다.
그런 다음 엔티티는 대화를 구성하는 빌딩 블록이며 매개 변수로 포착하기 위해 특별히 관심을 갖습니다. 이제 우리의 경우 "AAPL의 마지막 가격은 얼마입니까?"라는 질문을 할 때 시세 기호 AAPL이됩니다.
마지막으로 이행 개념을 사용하면 웹훅을 통해 챗봇 뒤의 서비스에 접근 할 수 있습니다. 즉, Asset Control과 통신하여 주어진 주식을 쿼리하고 사용 가능한 마지막 가격을 검색합니다.
이제 봇을 만들어 보겠습니다.
1 단계 : 봇을 설정합니다.
머리 https://dialogflow.cloud.google.com/#/login 그런 다음 에이전트 AcChatBot을 만듭니다.
2 단계 : Stock 엔터티 만들기
왼쪽 메뉴에서 엔티티 옆에있는 플러스를 클릭하고 Stock이라고 부르고 [A-Z][A-Z0-9]{1,6}
정규 표현식으로 입력 합니다. 티커 기호와 완전히 일치하는 것은 아니지만 예제에서는 충분하며 Dialogflow 자체에서 수행하는 정규 표현식에 대한 검사와 함께 작동합니다 (예 : 너무 광범위하지 않음). 그런 다음 저장하십시오.
3 단계 : 최종 가격 의도 생성
마지막 가격 의도를위한 시간입니다. 다시 왼쪽 메뉴에서 Intents 옆에있는 Plus를 선택하고 호출 한 다음 Last price
ADD TRAINING PHRASES를 클릭합니다.
를 입력하십시오 What is the last price for AAPL?
. 그런 다음 AAPL
마우스로 강조 표시 합니다. 팝업이 나타납니다. 을 검색 Stock
한 다음 제시된 옵션을 선택합니다.
올바르게 수행하면 Dialogflow가 Stock 항목을 올바르게 캡처하도록 결과가 다음과 같이 표시됩니다.
중대한! 그런 다음 아래로 스크롤하여 Fulfillment 섹션을 열고 Enable Fulfillment를 클릭 한 후 다음과 같이 전환하십시오 Enable webhook call for this intent
.
이를 통해 자체 백엔드 함수를 호출하고 자산 제어와 통신 할 수 있습니다.
계속 진행하기 전에 의도를 저장해야합니다.
4 단계 : REST 서비스를 구현하여 자산 제어 데이터 검색
이 작업을 수행하는 방법에는 여러 가지가 있습니다. 우리는 우리를 위해 모든 무거운 작업을 수행하기 때문에 Spring Boot를 사용할 것이며 Java에 머 무르므로 Adetta가 사용 하는 것과 동일한 Asset Control Java API를 즉시 사용할 수 있습니다 .
아직 모르는 경우 Adetta는 자산 제어를위한 테스트 자동화 소프트웨어입니다. 상기 봐 가지고 있는지 확인 여기 Adetta 소개를 .
흥미로운 부분은 아래와 같이 클래스 AcBotController
와 그 handleIntent
메서드입니다.
Dialogflow 이행의 웹훅이 POST 요청을 처리하고 있음을 알 수 있습니다. 입력과 출력은 모두 JSON입니다. 그리고 GoogleCloudDialogflowV2Webhook*
클래스를 사용 하여 요청 및 응답 JSON을 모두 처리합니다.
인 텐트의 실제 처리는 호출에서 얻은 AcBotIntentHandler에 전달됩니다 AcBotIntents.getHandlerFor(request)
. 이 클래스를 살펴 보겠습니다.
인 텐트를 핸들러에 매핑하고 (인 텐트 기억 Last price
?) 요청 객체에 인코딩 된 인 텐트가 주어지면 적절한 핸들러를 검색하는 메서드를 구현합니다. 또한 실제 처리기를 찾을 수없는 경우 기본 처리기를 정의합니다.
이제 주어진 주식에 대한 마지막 가격을 얻으려면 다음을 살펴 보겠습니다 AcBotLastPriceIntentHandler
.
request.getQueryResult().getParameters().getOrDefault("Stock", "")
다음 getLastPriceMessageForStock
과 같이 요청 객체에서 Stock 엔티티 매개 변수를 검색 한 다음 호출하는 방법 을 볼 수 있습니다.
우리는 주식의 누락 된 가치로부터 스스로를 보호합니다. 그렇지 않으면 자산 관리 시스템에서 주어진 시세가있는 주식을 찾습니다. 그러한 ADO가없는 경우 해당 메시지를 표시합니다. 그렇지 않으면 우리가 찾은 각 ADO에 대한 가격 데이터를 계속 검색합니다 (단일 ADO 여야하지만 구현은 필요한 경우 여러 메시지를 반환합니다).
마지막 가격을 찾는 방법은 다음과 같습니다.
ADO의 시계열을로드하고 마지막 레코드를 가져오고 (있는 경우)으로 읽는 메시지를 만듭니다 The last price for AAPL (C0.EQY.100101) is from 2020-06-12 at $338.00
. 그리고 다시 우리는 가격을 찾을 수없는 경우에 대비합니다.
Spring Boot를 사용하여이를 실행하고 REST 서비스를 localhost : 8080 / ac-bot에서 실행할 수 있습니다. 다음은?
음, 우리는이 서비스를 어디에도 배포하지 않기 때문에 약간의 속임수를 쓰고 있습니다. 따라서 외부에서 사용할 수 있도록 ngrok 를 사용 하여 터널을 설정합니다.
5 단계 : 자체 처리 웹훅 설정
다음으로 REST 서비스가 어디에 있는지 Dialogflow에 알려야합니다. 다시 돌아가서 왼쪽 메뉴에서 Fulfillment를 클릭합니다.
그런 다음 https://...
ngrok에서 제공 하는 주소를 입력 /ac-bot
하고 끝에 추가하십시오 .
좋아, 진실의 순간. 라고 표시된 오른쪽 상단에 Try it now
입력 할 수 What is the last price for AAPL?
있으며 모든 것이 정상적으로 작동하면 다음과 같은 답변을 얻을 수 있습니다.
신난다!
6 단계 : 챗봇을 Slack과 통합
이제 Dialogflow 콘솔을 계속 사용하여 봇을 사용하지 않을 것입니다. 대신 Slack과 통합합니다. 따라서 왼쪽 메뉴에서 통합을 선택하고 Slack을 찾아 테스트 봇을 시작합니다.
그런 다음 Slack으로 이동하여 봇과 채팅을 시작합니다.
그런 다음 기사의 시작 부분에 설명 된 다른 질문 / 의도를 구현하기 위해주기를 반복 할 수 있습니다.
마무리 단어
재미 있다고 생각했습니다. 그리고 생각보다 쉬웠습니다. 물론 몇 가지 지름길을 택했습니다.
- 서비스를 로컬로만 실행합니다.
- 보안, 액세스 제어 및 자산 제어 환경 선택을 고려하지 않습니다.
- 매우 제한된 봇 사용.
이 기사가 재미 있었기를 바랍니다. 귀하의 생각을 공유하고 질문 등을하기 위해 연락하십시오. 저희가 도와 드리겠습니다.