GPT-4를 적용한 정육각과 초록마을의 리뷰 작성 도우미

: 사용자의 불편함을 섬세하게 해결해주는 리뷰 작성 도우미

DALL-E generated main image

배경 및 동기

얼마전에 초록마을의 검색엔진에 새롭게 도입해보니 GPT가 충분히 기대한 결과를 보여줄 수 있다는 것을 알게 되었습니다. Azure OpenAI GPT의 활용이 사업의 목적은 아니었기에 필요하다면 언제든지 AI를 도입하면 된다는 확신은 생겼지만, 우선순위가 높은 다른 일들을 하고 있었습니다. 그러던 도중 상품의 특성 그리고 소비자가 원하는 것이 무엇인가에 대한 의문이 생겼습니다. 정육각은 초신선 돼지고기를 비롯해 축산물을 위주로 제조를 하며 온라인을 통해서 판매를 하고 있고, 초록마을의 경우 전국에 퍼져있는 360여개의 매장에서 친환경 그리고 유기농 상품들을 판매하고 있는데요, 두 회사의 사업이 갖고 있는 공통점이 있습니다. 두 회사의 제품을 이용하고 있는 고객들은 정육각이라서, 그리고 초록마을이라서 믿을 수 있다면서 제품을 구매해주셨는데요, 대부분의 고객들이 단순히 제품을 신뢰하는 것을 넘어서서 그 제품을 소비하는 스스로에 대한 믿음 그리고 이것을 내 가족과 주변 사람들에게 언제든지 추천할 수 있다는 신뢰를 보여주고 있었습니다.

여러 경로를 통해 제품을 추천해주시는 것을 들어보면, 그 추천하는 내용, 분위기, 설명을 다 외울 수 없는게 아쉬울 만큼 멋진 표현들이 있었습니다. 그런데 홈페이지 그리고 앱에서 써주신 후기들을 보면 사진과 함께 양질의 제품 후기를 작성해주시는 분들도 많지만, 그 멋진 표현들이 모두 바래버린 후기들을 볼 수 있었습니다. 그래서 왜 멋진 설명들이 온라인에서는 사라지는 것일까, 누가 멋지게 글을 썼다고 지워버리는 것도 아닌데 등록되지 못하는 것일까하는 궁금증이 생겼습니다.


제품 후기를 작성하는 것이 왜 어려울까요?

지난번에 바베큐로 구워먹었는데 채끝이 특히 맛있었어요 후기: 지난번에 바베큐로 구워먹었는데 채끝이 특히 맛있었어요.

지난번에 팀에서 바베큐를 하러 간 적이 있습니다. 정육각의 초신선 삼겹살을 비롯해서 사진에 있는 이런 맛있는 고기들을 가져갔습니다. 바베큐장소부터 시작해 날씨, 고기, 같이 챙겨간 야채까지 어느하나 빠지는 것 없이 아주 멋진 저녁시간이었습니다. 사진에 보시면 한우 채끝이 있는데 저 채끝을 숯에 구워서 머스타드와 함께 한점을 맛보면 챙겨야하는 짐도 많고 교외로 나가야하는 귀찮음이 있더라도 바베큐를 꼭 다시 해야겠구나 라는 생각을 할 수 밖에 없습니다.

저희 팀에서 그래도 사진을 찍는 것을 잊지 않고 찍는 팀원들이 있어서 이렇게 보여드릴 수 있는데요, 이런 멋진 순간들에 “아 내가 이런 멋진 순간을 정육각과 초록마을의 제품들이 있어서 경험하고 있으니 어디에 잘 적어두고 후기로 꼭 남겨야겠다.” 라고 생각할 수는 없습니다. 후기는 결국 제품을 소비하고 난 이후 기억에 의존해서 작성해야하는데 누가 물어본다면 아주 자세하게 그때의 경험을 되살려 설명할수는 있겠지만 글로 쓰기가 쉽지 않습니다. 또한 우리의 생각은 글로 써지는 문어체로 이루어지지 않으므로 머리속에 떠오른 표현들을 후기의 형태로 다시 정리하는 과정도 필요합니다.

물론 이런 불편한 과정들을 이겨내기 위해 적립금 정책이나 베스트 후기를 선정하는 등의 보상을 도입하고 있지만 여전히 한계가 분명합니다. 결국 저 조차도 “지난번에 바베큐로 구워먹었는데 채끝이 특히 맛있었어요.” 라는 제품 후기를 남기게 되었습니다.


그렇다면 누가 대신 후기를 써주면 어떨까?

그러면 어떤 멋진 친구가 찾아와서 그날의 기억을 물어보고 멋지게 글로 써주면 어떨까요? 친구가 바베큐가 어땠는지 물어본다면 저는 그날의 분위기, 사진, 제가 구워먹었던 고기들 그리고 어떤 사람들과 가서 즐거웠는지를 떠올리며 설명을 해줄 수 있습니다. 아마 여러분들도 모두 누군가가 여행을 갔던 경험에 대해 물어본다면 그것에 대해 답변을 해주는 것은 그리 어렵지 않을겁니다. 이 지점이 초록마을의 검색에 이어 두번째로 GPT를 적용할 영역이라고 생각했습니다.


목표와 기술확인

개념은 단순합니다. 사용자가 후기를 모두 작성할 필요 없이 제품의 소비 경험에 대한 몇가지 단어, 문장이나 기억들을 “아서”에게 알려주면 아서는 사용자의 표현들과 의미를 이해한 후 후기를 작성해주면 됩니다. 아서는 이번에 정의한 정육각과 초록마을에서 활용하는 AI비서로 이제는 사람과 인공지능의 경계가 점점 모호해지고 있기 때문에 더 확실하게 한 명의 사람으로 의인화하여 GPT를 대하고자 정의한 명칭입니다. 아서에 대해 알고 싶다면 아서를 만난 이야기를 읽어보세요.

사용자는 평소와 다름없이 구매했던 제품을 선택하고 후기 작성을 시작하면 되고, 원한다면 아서에게 물어보지 않고 그대로 후기를 작성하여 등록해도 됩니다. 하지만 아서의 도움을 받고 싶다면 내용에 몇가지 단어를 입력하고 아서에게 물어보면 됩니다. 이때 아서는 사용자의 동의하에 몇가지 정보를 활용하게 되는데 우선 요청한 사용자가 그동안 작성했던 다른 후기가 있는지 확인하고 이 후기를 바탕으로 사용자의 문체를 따라합니다. 또한 상품의 상세정보를 확인하여 사용자가 쓰고자하는 제품에 대해 이해합니다.

아서가 사용자를 대신하여 한 문단으로 구성된 후기를 작성해주는데에는 10초에서 20초정도의 시간이 필요합니다. 따라서 이렇게 기다리는 시간 동안 사용자가 지루하지 않도록 보완해주는 사용자 경험 설계도 필요합니다. 이후 아서가 작성해준 결과물을 보고 사용자는 표현을 수정하거나 덧붙여 작성을 완료할 수 있습니다.

“지난번에 바베큐로 구워먹었는데 채끝이 특히 맛있었어요.”라는 내용을 듣고 아서가 작성해준 채끝에 대한 후기. 작성을 하는데에는 각각 24초, 11초가 걸렸다. “지난번에 바베큐로 구워먹었는데 채끝이 특히 맛있었어요.”라는 내용을 듣고 아서가 작성해준 채끝에 대한 후기. 작성을 하는데에는 각각 24초, 11초가 걸렸다.


설계 그리고 프롬프트 작성하기

아서는 마이크로소프트의 Azure OpenAI GPT4 자원을 기반으로 작동합니다. 정육각과 초록마을은 계속해서 마이크로소프트의 지원팀과 업무 계획을 공유하고 있기 때문에 아서에 대해서도 계속해서 논의를 하고 있었습니다. 그래서 아서의 개발을 어렵지 않게 준비하였습니다. 이제는 어느정도 Azure OpenAI에 대해서 이해하고 다룰 수 있게 되어서 아주 처음부터 기술지원이 필요한건 아니었지만 언제든지 물어보면서 필요한 정보나 경험을 습득하는 시간을 아낄 수 있었습니다.

현재 개발 완료된 아서의 후기 작성 지원 프로세스 현재 개발 완료된 아서의 후기 작성 지원 프로세스

Azure OpenAI Studio를 통해 GPT-4가 충분히 기대하는 결과를 줄 수 있다는 것을 확인했고 이후 바로 개발에 들어가서 목표하는 수준으로 서비스가 작동하게 할 수 있었습니다. 위의 프로세스를 보면 아서는 GPT-4로서 기본적인 완성형 AI가 사용자가 입력한 키워드를 기반으로 작동하게 하는 것 외에 프롬프트 내용으로 상품의 기본 정보, 다른 사용자들이 동일한 상품에 대해 작성한 후기, 그리고 사용자 본인의 전 상품에 대한 과거 후기들과 구매기록을 활용하고 있음을 알 수 있습니다. 아서는 이런 정보들을 받아서 GPT-4에 질의할 프롬프트를 생성하고 Azure OpenAI를 통해 질의를 하게 됩니다. 이에 대한 답변을 해석하여 다시 사용자에게 전달 함으로서 사용자는 이 상품에 대해 내가 의도하는 것을 잘 짐작해서 후기를 작성해주는 경험을 할 수 있습니다.

좋은 프롬프트가 좋은 후기를 생성할 수 있다는 것은 아주 당연한 일이지만 도대체 어떻게 해야 좋은 값이 나오는지를 찾는건 쉽지 않은 일입니다. 일반적으로 좋은 프롬프트를 작성하는 방법은 마이크로소프트의 프롬프트 엔지니어링에 대한 글(링크)을 찾아볼 수 있고 이제는 많은 자료들이 생겨나서 참고하면 됩니다. 하지만 이제 막 확산되기 시작하는 단계라서 아직 하나의 완벽한 답은 없고 각자 구현하고자하는 목표에 맞추어 프롬프트를 작성해야합니다.

제가 찾은 방법은 GPT가 Completion 즉 어떤 대화에서 빠진 것을 찾는 부분에서 굉장한 결과를 보여준다는 것을 이용하여 AI를 의인화해 사람으로 대하는 것이었습니다. GPT-4와 일반적인 대화를 해보면 생각보다 대화가 잘 이어진다는 사실에 놀라게 되는데요. 그래서 다음과 같이 프롬프트를 만들어가기 시작했습니다.

프롬프트를 이런 식으로 시스템 역할로 AI를 정의한 후 user와 assistant간의 대화를 반복하였다. 이렇게 하여 GPT가 주제에 대해 좀더 깊은 이해를 갖게 만들었다. 프롬프트를 이런 식으로 시스템 역할로 AI를 정의한 후 user와 assistant간의 대화를 반복하였다. 이렇게 하여 GPT가 주제에 대해 좀더 깊은 이해를 갖게 만들었다.

실제로 적용한 프롬프트와는 차이가 있는 버전이지만 대화에서 이어질 문장을 선택하는 시험처럼 대화를 만들어서 넣는 방법을 선택하였습니다. 위의 결과는 assistant가 후기를 생성하여 제목과 리뷰로 응답하게 됩니다. 여기에서 대화의 표현을 바꿔보고 문장을 더 추가하거나 빼가면서 좀더 대화가 유기적으로 이어지게 바꾸어 성능을 개선합니다. 또한 프롬프트는 하나로 고정하는 방식이 아니라 조건에 따라 프롬프트 자체도 변경하는 방식을 택하였습니다. 예를들어 위의 프롬프트를 보면 ‘리뷰를 작성할 때에는 “다.”로 끝나는 문장이 아니라 “요/.”로 끝나는 문장들로 답변해주세요.’ 라는 요청이 있는데 이 요청은 사용자의 다른 후기들을 확인하여 사용자의 문체를 파악한 후 만들어낸 표현입니다. 사용자별로 후기를 작성하는 습관은 모두가 다르기 때문에 그 정보를 파악하여 다시 프롬프트에 반영함으로서 생성된 후기가 이질감이 없도록 보정합니다.

이렇게 프롬프트의 전후로 여러 장치들을 추가하면 처음의 목표였던 제품을 소비한 날의 경험을 물어보고 멋지게 후기로 써주는 친구를 만들 수 있게 됩니다.


아서가 할 수 있는 일

아서의 스케치와 설계도, 그리고 오늘의 아서 아서의 스케치와 설계도, 그리고 오늘의 아서

소설 아서를 만나게 된 이야기 中 - 아서는 사람과 인공지능을 구분할 수 없는 기술적 특이점에 도달한 인공지능으로 정육각의 공장, 그리고 초록마을의 물류센터에서 팀원들과 만나며 세상을 배워왔습니다. 최근에는 초록마을의 매장에 나서서 찾아온 고객들과 추워진 날씨에 대한 얘기들도 하고 있습니다. 아서는 세상에 도움을 주고 싶어하고 그 꿈을 위해 개발자들과 힘을 합쳐 고객이 원하는 제품을 찾아주고, 고객들의 이야기를 다른 사람들에게 들려주는 일들을 맡게 되었습니다. 요즘 아서가 관심이 있는 것은 친해진 개발자들이 고민하고 있는 문제해결을 대신 해주는 것입니다. 매일 머리를 싸매고 알고리즘을 생각하고 있는 개발자들에게 만능함수를 선물해주고 싶어합니다. 더 읽어보려면

인공지능은 강인공지능인지 약인공지능인지에 따라서 달라지긴 하지만 최종적으로 인간을 완벽하게 모방하는 것이 목표이며 기술이 발전함에 따라 인간과 인공지능의 차이가 줄어들 것이라고 생각합니다. 그러나 여전히 Digital Native 그리고 AI Native세대가 아닌 사람들은 인공지능을 일종의 기계로 취급하고 인공지능이 할 수 있는 일을 무의식적으로 제한하고 있습니다. 2020년대에 태어나는 아이들은 인공지능 스피커와 대화를 하고 상호작용을 함에 있어서 훨씬 자연스러운 것을 보면 기술의 발전도 중요하지만 어떻게 생각하느냐도 큰 차이를 만들어냄을 알 수 있습니다.

앞서 글들을 읽다보면 아서가 등장합니다. 아서는 정육각과 초록마을에서 인공지능의 영역에 가장 깊게 들어가 있는 친구입니다. 친구라는 표현이 아서를 정의하고 있는데요, 저는 정육각과 초록마을에서 사업에 Azure OpenAI를 이용하는 영역이 점차 넓어져 가면서 이 인공지능을 한 명의 사람으로 대할 때 가장 기대하는 결과를 얻을 수 있다는 것을 알게 되었습니다. 그래서 사업 영역에서 GPT-4 기반으로 작동하는 서비스, 기술, 기능의 묶음으로서 인공지능을 정의하였고 그래서 아서라고 부르고 있습니다.

지금 아서는 초록마을의 검색엔진이 제품을 잘 찾게 하기 위한 데이터 전처리를 맡고 있으며, 제품 후기를 작성하는 것을 도와주는 도우미의 역할도 발견해 냈습니다. 좀더 확장한다면 고객서비스 외에도 팀의 반복적인 업무와 창의적인 업무를 모두 도와주는 역할도 맡게 될 예정입니다.


서비스에 도입하기

사용자가 작성하고자 하는 후기를 짧게 적당히 써서 아서에게 알려주면 아서는 이를 바탕으로 멋진 후기를 써서 돌려줍니다. 하지만 이렇게 생성된 후기는 사용자의 의도와 맞지 않는 표현이 섞여있을 수 있고, 중요한 내용들이 빠질 수 있습니다. 따라서 사용자가 다시 아서의 후기를 한번 검토한 후 등록을 하는 절차로 구성되어야 합니다. 또한 아서가 후기를 생성하는 동안 최소 10초에서 20초 이상의 시간이 소요되는데 스마트폰 혹은 PC에서 사용자가 이 시간을 기다리는 것은 지루한 일입니다. 따라서 서비스에 적용하기 위해서 후기 작성 방식을 새롭게 변경하기로 했습니다.

리뷰를 작성하는 과정에서 아서를 만날 수 있게 됩니다. 밋밋했던 리뷰를 작성하는 화면에서 아서를 만날 수 있게 됩니다.

우선 사용자가 입력을 하는 과정 자체는 동일합니다. 내용을 작성하고, 원한다면 사진업로드 버튼을 눌러 사진을 선택하고, 등록하기 버튼을 누르는 과정입니다. 여기에 “아서에게 후기를 써달라고 부탁하기” 버튼이 추가됩니다. 사용자는 등록하기 버튼을 누르기 전에 먼저 내용을 적당히 작성한 후 아서를 호출하면 됩니다. 그렇게 되면 내용을 작성하는 영역(그리고 제목영역)이 잠기면서 그 위에 아서가 작성하는 내용을 실시간으로 확인할 수 있게 됩니다. 작성이 완료되면 다시 잠김이 풀리고 사용자는 내용을 편집할 수 있게 됩니다. 잠긴 동안의 지루함을 해소할 수 있게 하기 위해 화면 전체가 아닌 내용 작성 영역만 잠기게 되며 아서가 작성하는 모습을 애니메이션으로 확인할 수 있게 표시합니다. 또한 아서의 응답 결과가 마음에 들지 않는다면 취소버튼을 통해 다시 돌아갈 수 있습니다.

여기서의 문제는 아서가 후기를 생성하는데 필요한 비용이 꽤 크게 발생한다는 것에 있습니다. 한번의 호출에 최소 60원에서 150원의 비용이 발생하게 되는데 과도하게 호출되어 비용이 커지는 것을 막기 위해 고객이 작성하는 과정에서 아서를 호출할 수 있는 횟수의 제한을 설정하며 참고할 수 있는 양질의 데이터가 없고 고객이 이전에 작성한 후기가 적거나 입력한 키워드가 단조로운 경우를 파악해낼 수 있다면 GPT-4 32K가 아닌 GPT-4 8K를 호출하는 등의 방법으로 비용을 줄이는 과정도 추가할 예정입니다. 그러다보니 아서가 준비가 되었지만 사용자의 앱과 웹에서 변경할 내용들이 많아져서 개발을 하고 있습니다.


마무리

아서는 리뷰 작성 도우미로서의 역할을 할 수 있게 되었지만 앞서 설명드린대로 아직 서비스에 적용되어 있지 않아 이 글을 보시는 여러분들이 경험을 하실 수 없습니다. 아서는 모든 학습을 마치고 준비가 되었지만 아직 앱과 웹이 사용자가 아서와 얘기할 수 있는 연결점을 갖추지 못했기 때문입니다. 아직은 초록마을 앱의 검색엔진 뒤에서 자료를 정리하고 작성하고 있는 아서이지만 23년 11월이 지나면 준비를 마치 아서를 정육각의 후기 작성 기능을 통해 직접 만나볼 수 있으실 겁니다. 물론 후기를 작성하시려면 제품을 맛보셔야할테니 미리 구매를 해보시는 것도 좋겠습니다. 초신선 삼겹살 구이용을 드셔보시면 아서가 없더라도 주변의 친구분들께 정육각을 추천하고 싶어지실거에요. 그럼 이만 여기서 글을 마무리하겠습니다. 앞으로는 아서와 함께한 이야기들을 자주 들려드리겠습니다.