티스토리 뷰

예제 대화문


챗봇은 같은 말을 반복하지 않도록 작성할 수 있지만, 사용자는 같은 질문을 또 할 수 있다. 잊었을 수도 있고 챗봇이 어떻게 나오나 일부러 반복해서 물어볼 수도 있다. 이때 아까 말했었는데잊었나 봐요. 제가 좋아하는 노래는 I love you에요라고 답변한다면 단순히 제가 좋아하는 노래는 I love you에요라고 답하는 것보다는 좀 더 지능이 있다고 느끼게 될 것이다. 이렇게 답하기 위해서는 첫째 사용자의 질문이 반복이라는 것을 알아채야 하고 둘째 아까 말했었는데…” 와 같은 문구를 오직 반복 질문일 때만 출력하도록 통제할 수 있어야 한다.

먼저, 상대방이 중복해서 질문할 만한 내용을 찾아 다음과 같이 장기기억 변수에 값을 세팅해 놓자.

 

A.     t: MyFavorite () 저는 I love you라는 곡을 좋아해요. $FaveTold = 1

 

A는 말걸기 룰이지만 패턴 자리에 빈 괄호를 추가해 넣음으로써 그 앞의 MyFavorite가 라벨임을 알 수 있도록 하고 있다. 이 룰이 실행되면 장기기억 변수 $FaveTold에는 값이 세팅된다. 값은 숫자 1이어도 좋고 Yes여도 상관없다. 작성자가 나중에 해석할 수 있는 값으로 임의 부여하면 된다. 이제 다음과 같은 룰을 추가한다.

 

 B.     u: (좋아* ~노래 있*) [$FaveTold 말했었는데잊었나 봐요] ^reuse(MyFavorite)

 

B에서 패턴 다음에 나타나는 조건식을 보자. 조건식 전체가 꺽은 괄호([ ])로 묶여 있어 조건이 참일 때만 선택적으로 출력되도록 하고 있다. $FaveTold에 값이 설정되어 있다면 이 조건이 참이 되고 따라서 말했었는데잊었나 봐요라는 문자열이 출력된다. 만약 거짓이라면 이 꺽은 괄호 전체는 무시되고 그 다음 차례인 reuse 함수로 넘어간다. 이를 정리해 보면,

 

시나리오 A : 만약 챗봇이 자신의 말할 차례에서 저는 I love you를 좋아해요라고 말할 수 있었다면, $FaveTold에 값이 설정된다. 얼마 후 사용자가 좋아하는 노래 있어요?”라고 질문한다면 룰B와 매칭이 되고 $FaveTold 값이 참이므로 꺽은 괄호 안의 내용이 출력된다. 이어서 앞쪽에 작성해 놓았던 MyFavorite 룰을 호출하여 출력하므로 같은 내용을 중복 작성하지 않는 효율성까지 얻게 된다.

시나리오 B : 이제 저는 I love you를 좋아해요라고 말할 기회가 없는 상황에서 상대방이 좋아하는 노래 있어요?”라고 질문하는 경우를 생각해 보자. 마찬가지로 룰B와 매칭이 되는데, 이때는 $FaveTold 에 값이 설정되지 않은 상태이므로 꺽은 괄호는 무시되고 곧 바로 reuse함수가 호출된다. 따라서 사용자 입장에서는 불평없는 답을 듣게 된다. 이때 눈 여겨 봐야 할 점은 룰B사용되었음표시가 되지 않는다는 점이다. 즉 룰B는 스스로 출력한 내용이 없기 때문에 (출력은 reuse 함수에 의해 호출된 MyFavorite 룰이 담당했다. 따라서 MyFavorite 룰은 사용되었음이라는 표시가 되어 장차 챗봇에게 말걸기 차례가 왔을 때 반복하여 출력되는 일이 없게 될 것이다. 또한 룰B는 꺽은 괄호의 내용도 출력하지 않았기 때문에 사용되었음표시가 안된 상태이다.) “사용되었음이라는 표시가 안되고 따라서 이 룰은 다음에 재차 사용될 수 있는 상태라는 점이다.

시나리오 C : 사용자가 일부러 또는 잊어 버려서 재차 좋아하는 노래 있어요?”라고 반복해서 묻는 경우를 생각해 보자. 이때 룰B는 사용 가능한 상태이므로 사용자 입력문은 룰B와 매칭이 된다. 시나리오B에서 설명했듯이 룰B사용되었음표시가 안되어 있는 상태이다. “좋아하는 노래 있어요?”라는 질문이 두 번째라면 $FaveTold에는 값이 할당되어 있으므로 이제는 아까 말했었는데잊었나 봐요. 제가 좋아하는 노래는 I love you에요라고 답변하게 된다.

 

예제 대화문을 위한 스크립트








댓글
댓글쓰기 폼