|

챗GPT와 그 다음 세대 챗봇

챗GPT(ChatGPT)로 대표되는 대규모 언어 모델(Large Language Model, 이하 LLM)의 시대가 왔다. ChatGPT 혹은 바드와 같은 LLM은 챗봇에 혁신을 가져왔다. LLM 그리고 그 이전 세대들과의 비교를 통해 챗봇의 미래를 이야기 해보도록 한다.

챗봇은 기술 발전과 함께 꾸준히 진화해 왔다. 특히 인공지능의 발달과 함께 더욱 발전해 왔다. 처음에는 단순히 주어진 메뉴를 선택하는 수준이었지만, 이제는 인간과 대화를 할 수 있을 정도로 발전해 왔다. 심지어 이글도 구글의 바드와 대화를 하며 기사를 작성한 결과물이다.

챗봇은 꾸준히 발전해 왔지만, 그 성장의 과정을 살펴보면 크게 4단계로 나눌 수 있다. 룰베이스와 키워드 베이스로 만들어진 챗봇을 1세대로 분류한다면, 자연어 처리를 하기 시작한 챗봇을 2세대, 그리고 최근 LLM을 이용한 챗봇이 3세대다. 마지막으로 최근 등장하기 시작하는 4세대 챗봇까지 포함해 알아보도록 하자.

1세대: 룰베이스 & 키워드

1세대 챗봇은 룰베이스와 키워드 베이스를 기반으로 동작한다. 룰베이스 챗봇은 사전에 정의된 규칙에 따라 사용자의 질문에 응답하는 방식이다. 일반적으로 설명하는 텍스트가 있고, 그것을 선택할 수 있는 버튼을 제시하는 형태의 UI를 사용해 챗봇의 플로우가 진행된다.

키워드 방식은 사용자가 입력한 키워드에 대해 1:1 형태로 답변이 진행된다. 해당 키워드가 있으면 앞뒤의 설명이 어떤 내용이든지 상관없지 동작한다. 만약에 여러개의 키워드가 동시에 있을 경우에는 우선순위를 따라 동작하게 된다.

동작은 상당히 단순하지만, 개발이 쉽고 사용하기 직관적이라 흔히 쓰이고 가장 쉽게 접할 수 있다. 현재 가장 많이 접할 수 있는 챗봇이며 대부분의 주문 챗봇들이 여기에 해당한다.

2세대: 자연어 처리를 이용한 1세대 머신러닝

2세대 챗봇은 1세대 챗봇에 머신러닝 기술을 활용해서 적용했다. 사용자가 입력한 문장을 기반으로 해당 챗봇에 등록된 문장중에서 가장 유사한 문장을 찾아 내는 것이다.

예를 들어 등록된 문장이 “오늘 날씨 어때?” 라고 가정한다면, ‘오늘’이나 ‘어때’라는 단어가 없더라도 날씨에 대한 부분을 이해할 수 있다. 물론 키워드 방식에서도 이런것은 가능했지만, 기존의 “오늘 날씨 어때” 라는 문장과 “서울 날씨 어때”라는 문장이 있을때 구분하지 못했던 것을 구분할 수 있게 도와준다.

“서울 날씨 어때?”라고만 챗봇에 등록해두면 그게 꼭 서울이 아니라 부산,광주,제주 등의 지명이어도 챗봇이 이해를 하고 응답을 할 수 있게 도와준다. 머신러닝이 적용되면서 1세대와 다르게 2세대 챗봇은 훨씬 광범위한 문장을 이해하고, 그에 따른 답변을 할 수 있게 되었다.

이러한 기술들이 적용된것으로 대표적으로는 카카오톡에서 적용 가능한 오픈빌더와, 자연어 처리엔진만 제공해주는 구글의 다이얼로그플로우(Dialogflow)와 같은 엔진들이 있다(필자의 회사 꿈많은청년들에서는 두개의 엔진을 같이 사용할 수 있도록 클라우드튜링이라는 빌더를 제공한다).

이러한 대화 엔진들은 기본적으로 상당량의 질문과 답변을 준비해두고 해당 데이터들을 엔진에 넣어 학습시켜 그결과물을 이용하는 형태로 동작된다.

3세대: LLM을 이용한 생성형 AI 챗봇

대규모 언어 모델(LLM)이 등장하면서 3세대 챗봇이 탄생했다. 대표적인 LLM으로는 챗GPT, 구글의 바드, 얼마 전 발표된 네이버 하이퍼클로바X 등이 있다. 3세대 챗봇은 LLM을 기반으로 간단한 프롬프팅을 통해 사람과 같은 대화가 가능하다. 물론 실수는 간혹 있지만, 이전 세대 챗봇과 비교할 수 없을 정도로 자연스러운 대화를 할 수 있다.

기존 챗봇은 모든 문장을 직접 입력하거나 기능을 일일이 구현해야 했다. 하지만 3세대 챗봇은 간단한 몇 가지 지침만으로도 개발할 수 있다. 예를 들어, 챗봇에게 다음과 같은 지침을 주면 된다.

너는 꿈많은청년들 챗봇이다.
다음과 같은 내용을 사용자와 이야기할 수 있다.
회사 소개, 상품 소개 등

이러한 지침을 바탕으로 챗봇은 가이드를 벗어나지 않는 한도 내에서 답변을 한다. 물론 사용자가 유도하면 가이드를 벗어나기도 하지만, 대체적으로는 쓸만한 수준이다. 이러한 지침을 프롬프트라고 한다. 3세대 챗봇은 기존의 명령형 프로그래밍에서 프롬프팅으로 개발의 방향성이 완전히 바뀌었다. 4세대 챗봇에서는 프롬프팅이 더욱 중요해진다.

4세대: LLM과 LangChain의 결합

4세대 챗봇은 LLM과 랭체인(LangChain)의 결합으로 이루어졌다. 기존의 LLM만 이용하여 만드는 챗봇들은 프롬프트만으로 가이드를 하기에는 너무도 어려웠다. 기본적으로 입력이 가능한 토큰수가 제한되어 있는 상황에서 해당 토큰을 이용해 모든 상황을 제어할 수가 없기 때문이다.

예를 들면, 방대한 데이터의 고객 상담 데이터나 상품 카탈로그를 가지고 있는 기업의 상담을 LLM으로 하자면 그 데이터를 한 번에 다 넣고 응답하기는 너무 어렵다.

하지만 LangChain이 등장하면서 프롬프팅은 또 다른 국면을 맞이했다. 우선 LangChain은 언어(Language)+체인(Chain)으로, 연쇄적으로 질문과 답변을 반복하면서 원하는 답변을 찾아가는 과정을 거치는 라이브러리라고 이해하면 된다.

예를 들어 보자. 챗봇에게 “스탠다드 요금제의 가격을 알려줘”라고 하면 일반적인 LLM이라면 어떻게 답변할지 정말 예측이 안 된다. 1세대, 2세대의 경우에는 그나마 입력된 데이터 내에서 답변을 하기 때문에 어느 정도 예측이 되지만, 3세대에서는 만약에 사전에 정보 데이터가 입력이 안 된 것일 경우에는 환각현상이라고 불리우는, 흔히 이야기 하는 ‘거짓말’을 하게 된다.

4세대 챗봇은 다음과 같은 방식으로 문제 해결을 접근하기 때문에 그러한 문제에서 조금 더 자유로울 수 있다. 프롬프팅을 아주 간략히 설명하면 다음과 같다.

필요한 경우 다음과 같은 기능들을 사용할 수 있다.
[가격표] : 상품에 대한 가격 정보를 얻을 수 있다.
[요금제] : 상품에 대한 정보를 얻을 수 있다.
모르는 경우에는 모른다고 답변을 하고, 어떤 기능을 사용할 지 답해라.

실제로는 위와 완전히 동일하진 않지만 비슷한 형태의 프롬프팅을 한다. 그러면 답변은 다음과 유사한 형태로 오게 된다.

[답변] : 모르겠음.
[기능] : [가격표]
[입력어] : [스탠다드]

그러면 LangChain은 가격표 기능을 이용해서 스탠다드의 가격을 가져오고 응답을 한 뒤 다시 LLM에 물어본다. 이번엔 가격 정보를 입력한 상태로 LLM에 물어보게 되면 우리에게 “스탠다드 요금제의 가격은 얼마입니까?”라는 형식으로 답변을 하게 되어 출력이 된다.

처음 3세대 LLM챗봇이 나왔을때, 그 대단한 답변력으로 모두가 놀랐지만, 조금 지나자 생긴 문제들은 그 답변에 대한 가이드였다. 앞에서 이야기 했던 일명 환각현상 때문에 LLM의 용도가 제한되고, 거짓말로 많은 문제가 되곤 했다.

그러나 LangChain이 등장하면서 이 문제들은 사라지고 있다. 정말로 답변을 할 수 없는 내용이거나 모르는 내용들은 모른다고 답변한다. 필요한 내용들은 지식 데이터베이스에서 검색해서 적절하게 문장으로 만들어서 답변을 하는 모습은 챗봇의 미래를 더욱더 낙관적이게 만들었다.

사실 LLM만으로는 개인에게 특화된 서비스를 만들기 어렵다. 다양한 정보들을 저장하고 제공하기 힘들며, 또한 사용자의 정보를 업데이트 하는것도 어렵기 때문이다. 그러나 LangChain과의 결합은 그 어려운 일들도 현실로 만들 수 있다. 영화에서만 보던 좀 더 많은 일을 할 수 있는 인공지능, 그리고 챗봇은 더 이상 영화 속의 일이 아니도록 만들 수 있다.

관련 글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다