챗봇 구축 프로젝트 3. Dialogflow

J. Hwang·2024년 1월 15일
0

Chatbot

목록 보기
3/4

요즘은 챗봇을 구축할 수 있는 챗봇 빌더가 굉장히 많다. (References 1 참고)
그 중에서도 이번 프로젝트에서는 구글의 Dialogflow라는 툴을 이용해서 챗봇을 구축해보겠다.

Dialogflow란

Dialogflow는 대화식 사용자 인터페이스를 모바일 앱, 웹 애플리케이션, 기기, 봇, 대화형 음성 응답 시스템 등에 쉽게 설계하고 통합할 수 있는 자연어 이해 플랫폼이다. 예상되는 대화 시나리오를 처리하도록 학습시키는 ML-based tool이다.
주요 특징은 아래와 같다.

  • 무료
  • 사용법이 간단
  • 한글 지원
  • 카카오톡 등 다양한 메신저와 연계 가능

Dialogflow url : https://dialogflow.cloud.google.com
매뉴얼 : https://cloud.google.com/dialogflow/es/docs?hl=ko

Dialogflow 사용법

  1. 좌측 상단의 + Create Agent 를 클릭해서 Language와 Timezone을 선택한 후 우측 상단의 Create 를 클릭해서 프로젝트를 생성한다.
  2. 프로젝트가 생성되면 왼쪽 탭에 Intents, Entities, Knowledge, Fulfillment, Integrations라는 탭이 생긴다.
  • Intents : 입력되는 문장의 의도를 파악한다. Intent는 Training phrases, Action and Parameters, Responses로 구성된다.
    • Training phrases : 사용자가 입력할 예시 문구이다. Dialogflow에서는 이 문구를 학습하여 기존에 정의된 Intent와 일치시켜 사용자가 입력한 문장의 의도를 파악하게 된다.
    • Action and Parameters : 입력한 문장의 의도가 파악되면 그에 맞게 수행되는 작업이다. Training phrase 속에 든 entity의 목록을 보여준다.
    • Responses : 사용자에게 최종적으로 제공하는 output이다. 사용자가 입력한 문장에 대한 대답을 하거나 추가 정보를 요청하거나 대화를 종료한다.
  • Entities : 입력된 문장에서 추출한 개체의 정보 (ex) 룸의 종류)
  • Knowledge : 웹페이지에서 정보를 찾아 전달한다. (단, 한국어 미지원)
  • Fulfillment : 외부 서버와 정보를 주고 받는다.
  • Integrations : 메신저, 웹, 음성 비서 등과 연동한다.
  1. Default Intent 설정
  • Default Welcome Intent : 초기 인사말. Training phrase는 그대로 둬도 무관할 것 같고, Response 같은 경우는 숙박시설 예약 챗봇이니 "안녕하세요! 숙박시설 예약 챗봇입니다. 무엇을 도와드릴까요?" 정도로 입력하고 Save하자.
  • Default Fallbak : 일치하는 Intent가 없을 때 응답할 멘트. "이해하지 못했어요. 다른 응답을 입력해주세요." 정도로 입력하면 되겠다.
  1. Entity 만들기
    우측 상단 CREATE ENTITY 버튼을 눌러서 만들 수 있다. 입력 받을 정보들을 입력하는 것이라고 생각하면 된다. 예를 들어 숙박시설의 룸 타입을 입력받아야 한다면, room_type이라는 entity를 만들고 (Define synonyms가 체크된 상황에서) 싱글, 더블, 트윈, 트리플, 스위트 등의 룸 타입을 입력하고 그들과 동의어를 입력하여 사용자가 약간 다른 단어를 입력하더라도 인식할 수 있도록 해준다.

  2. Intent 만들기
    CREATE INTENT 버튼을 눌러 본격적으로 숙박시설 예약을 위한 intent를 만들자. 사용자가 "숙소를 예약하고 싶다"라고 입력할 것이라고 가정하고, Training phrases에 관련 문장과 단어들을 입력한다. 그리고 Response에 "예약을 도와드리겠습니다. 어떤 숙소를 이용하시겠습니까?" 등의 적절한 반응을 입력하고 SAVE한다.

  3. Follow-up intent 만들기
    어떤 숙소를 이용하는지 묻는 것에서 끝나면 숙소를 예약할 수가 없다. 따라서 Follow-up intent를 통해서 연속해서 다른 정보를 입력받거나 요구할 수 있어야 한다. 이 때 만드는 것이 Follow-up intent이다. Follow-up intent는 먼저 만들어놓은 Intent 위에 커서를 올리면 우측에 Add follow-up intent라는 글씨가 뜨는데 이를 클릭해서 custom 버튼을 누르면 아래에 custom follow-up intent가 형성된다. 이제 이 follow-up intent를 수정하면 된다.

  4. Intent 만들기 2 - entity가 포함된 intent 만들기
    사용자가 룸 타입을 입력한다고 가정하여 Training phrase에 "트리플을 이용하겠습니다." 등의 문장을 입력한다. 이 때 entity가 바르게 생성되었다면 트리플이라는 단어에 반응하여 @room_type과 같이 뜨면서 형광펜 처리가 된다. 이를 적절히 등록해준다. 그 후 Action and parameters 에서 사용된 entity의 목록을 확인하고, 현재 단계에서 사용하지 않을 entity는 삭제한다. 현재 단계에서 꼭 입력받을 entity는 맨 앞의 required 를 체크하고 PROMPTS에서 해당 정보를 입력받기 위한 질문을 입력한다. (ex) 어떤 룸 타입을 이용하시겠습니까?) 그 후 적절한 Response 문장을 입력하고 저장한다.

  5. 이제 위 과정을 반복하면서 챗봇을 완성하면 된다. 주의할 점은 하나의 연속된 챗봇 흐름을 만드려면 follow-up intent 하위에 또 다른 follow-up intent를 만들어야 한다는 것이다. 원래의 큰 Intent 내에 다른 follow-up intent를 만드는 것이 아니다.

  6. 맨 마지막 follow-up intent의 Responses 항목에서 Set this intent as end of conversation을 enable하면 챗봇이 종료된다.

  7. 이제 완성된 챗봇을 테스트 해보자. Integrations 탭에 들어가면 Web Demo라는 항목이 있다. Web Demo에서 링크를 클릭하면 챗봇 채팅창이 띄워지면서 지금까지 만들어진 챗봇을 시험해 볼 수 있다.

기타 팁

  • follow-up intent를 만들 때, 별도로 이름을 설정하지 않는다면 이전 follow-up intent의 이름이 계속 이어져서 이름이 너무 길어지게 된다. 그러면 오류로 더 이상 follow-up intent가 생성되지 않으므로 주의하자.
  • follow-up intent의 output context 앞에 적힌 숫자는 lifespan이라고 해서 해당 intent 뒤에 이어질 수 있는 follow-up intent의 수를 의미한다. 따라서 미리 충분한 수치로 lifespan을 늘려놓아야 연속적으로 챗봇이 잘 흘러갈 수 있다.
  • parameter 중 @sys.number와 @sys.number-integer 이 다른 개념임에 주의해야 한다. @sys.number는 특정 숫자만 인식하는 반면, @sys.number-integer는 integer를 모두 포함하는 개념이므로 숫자가 바뀌어도 인식한다. 한마디로, 웬만한 상황에서는 @sys.number-integer를 써야 한다.
  • 만들어진 챗봇을 zip 파일로 저장하여 타인에게 공유할 수도 있다. 프로젝트명 옆의 톱니바퀴를 누르면 오른쪽에 Export and Import 탭이 나오는데 거기에서 Export as a zip 하면 zip 파일로 챗봇이 다운로드 된다.
  • 이전의 intent에서 입력받은 내용을 follow-up intent에서 불러오기
    follow-up intent의 action and parameters에 이전에 입력받은 내용을 입력하면 된다. 예를 들어 이전에 입력받은 룸 타입을 follow-up intent에서 언급한다고 하자. action and parameters에서 parameter name을 입력하고, entity는 별개로 입력할 필요 없이 value에 #이전의 intent-followup.entity이름 을 입력해주면 된다. (ex) #roomtype-followup.room_type) 이 때 entity가 system entity라면 sys는 생략하고 entity 이름을 입력하면 된다.
  • 다른 프로젝트를 import 해올 때, 반드시 create new agent 해서 새 agent를 만든 후에 import해야 한다. 그렇지 않을 경우 기존에 만들어놓은 agent에 덮어씌워져서 intent flow가 엉망이 된다.
  • system entity 종류 : https://cloud.google.com/dialogflow/cx/docs/reference/system-entities
  • Web Demo로 테스트할 때 나오는 링크는 절대 노출 금지!! 타인이 그 링크로 챗봇을 여러 번 이용하게 되면 이용료가 청구될 수 있다. 링크를 노출하지 말고, 사용하지 않을 때는 링크를 DISABLE 해놓자.

cf) ChatGPT로 숙소 예약 챗봇 구현

https://da-it-so.tistory.com/m/117

References

http://chatbotq.org/wp/?page_id=156
https://cloud.google.com/dialogflow/es/docs?hl=ko
https://cloud.google.com/dialogflow/es/docs/basics?hl=ko
https://www.youtube.com/watch?v=vZG8G05x0MY
https://www.youtube.com/watch?v=AyCO5rFYUic&list=PLRx0vPvlEmdCb33sBZGXzVOMY_seqnWJT&index=3

profile
Let it code

0개의 댓글