23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
이 글에서는 이번에 출시한 'T멤버십 영화예매 에이전트'를 개발하면서 겪었던 경험들을 공유하려고 합니다.
영화예매 에이전트는 'T멤버십 영화예매' 서비스에 LLM을 적용하여 대화로 쉽고 편리하게 영화를 예매할 수 있도록 도와주는 에이전트입니다.
질문 이해와 답변을 생성하는 기존의 에이전트에서 나아가 실제로 Action('영화 예매')으로 이어질 수 있는 Actionable AI 에이전트로서 기존 서비스에 AI를 조금 더 직접적으로 도입하고자 하였습니다.
본문에서는 개발시작 단계부터 부족했다고 느꼈던 점으로 시작하여, 이를 해결 하기 위해서 LLM Workflow를 도입했고, 이를 통해서 얻은 효과가 어떤 것인지를 예시와 함께 자세히 설명하겠습니다.
처음에는 영화예매에 필요한 기본적인 '영화 조회', '극장 검색', '스케쥴 조회', '날짜 조회' 등의 함수를 정의하고 해당함수를 호출해서,
그 함수의 결과값 기반으로 응답을 생성해준다면 말로 하는 영화예매의 프로세스를 만들 수 있을 것이라고 기대 했습니다.
아래 그림은 실제로 프로젝트 초반에 간단하게 프로토타입했던 것을 도식화한 그림입니다.
하지만 상용화의 문턱은 생각보다 높았습니다. 빠르고 정확한 응답은 기본이었고, 자연스러운 멀티턴 대화 관리가 필요했습니다.
사용자의 개인 정보와 컨텍스트를 적절히 반영하면서도, 긴 대화에서 중요한 정보를 놓치지 않고 추적해야 했습니다.
또한 영화 제목이나 극장명 같은 핵심 엔티티를 정확히 인식하는 것도 중요했습니다.
이 모든 과정에서 여러 AI 모델들을 효과적으로 조합해 최적의 결과를 도출해야 했죠.
이러한 복잡한 요구사항들을 통합적으로 관리하고 해결하기 위해, 체계적이고 유연한 LLM Workflow의 설계가 필수적이었습니다.
이를 통해 단순한 프로토타입을 넘어, 실제 사용자들에게 가치 있는 서비스를 제공할 수 있는 기반을 마련하고자 했습니다.
우선 크게 두가지를 중점적으로 고려하고자 하였습니다.
상태 관리(State management): 영화예매를 하기 위해서 꼭 필요한 정보인 "어떤 영화를", "언제", "어디서(or 어느 극장에서) 볼지" 를 발화에서 개체(entity)로 추출하고 앞으로 이어질 대화에 반영
멀티턴 시나리오
role | content |
|---|---|
user | 주말에 용산 cgv에서 여자친구랑 영화 볼려고 |
assistant | 어떤 영화를 보시겠어요? |
user | 베놈 볼려고 |
assistant | 이번 주말 베놈의 상영 시간표는 다음과 같습니다. 언제 관람하시겠어요? |
user | 아 그냥 코엑스 메박에서 내일 봐야겠다. |
기대 결과: 내일 코엑스 메가박스에서 2명이서 베놈 영화 예매하기 위한 시간표 조회.
개인화 Context 반영: 더 나은 사용자 경험을 위해, 유저의 사전정보(최근 방문한 영화관, 선호극장)를 대화 흐름에 반영
예시
user | assistant |
|---|---|
(홍대 CGV를 자주 찾는 유저) 영화 보고 싶어 | "즐겨찾는 극장인 홍대 CGV에서 보실 수 있는 영화는 ‘베테랑2’, ‘조커’ 등이 있습니다. 어떤 영화를 보시겠어요?" |
최종적으로 위 두 꼭지를 LLM Flow에 이를 반영하기 위해 전체 LLM의 Action plan generation 을 수행하는 모델을 2가지로 나누었습니다.
Entity 추출 모델: 답변 생성 전, 사용자의 입력 및 이전 대화 히스토리 기반으로 다음 LLM에 삭제하거나 유지시켜야할 Entity들을 포함하여 추출.
Workflow 모델: 사용자의 발화와 엔티티 추출 결과를 바탕으로 함수 호출이 필요할 경우, 호출할 함수를 결정하고, 그 함수의 응답 결과를 이용하여 최종 답변을 생성. 함수 호출이 필요 없을 경우, 바로 답변을 생성하여 응답.
이와 같은 고민을 거쳐 이를 해결할 수 있는 Workflow는 아래와 같은 모습이 되었습니다.
위 Workflow를 도입하고 얻을 수 있었던 장점에 대해서 상세히 설명하겠습니다.
유저가 여의도 근처에 있는 상황에서 “오후에 베테랑2 보고 싶어"라고 발화했을 경우,
현재 위치 기준으로 가장 가까운 극장인 ‘여의도 CGV’에서 베테랑2 시간표를 조회해준다면, 예매를 더 쉽고 빠르게 할 수 있을 것이라고 기대해볼 수 있습니다.
아래는 유저의 사전정보가 LLM Flow에서 적용되는 예시를 보여줍니다.
단순하게 대화 이력을 LLM 에 전달한다면, 대화가 길어질 수록 컨텍스트 유실이 발생할수 있습니다.
이를 방지하기 위해, 매 Turn마다 추출된 entity 를 따로 저장하도록 관리하여 대화 컨텍스트를 유지할 수 있도록 하였습니다.
즉, 대화가 길어지더라도, 고객이 이전에 언급한 것을 잊지 않고 다음 대화에 반영할 수 있게 되었습니다.
Role | Content | Entity |
|---|---|---|
user | 주말에 친구랑 영화볼려고 | {"selected_theater":"상암월드컵경기장 megabox","selected_time":"주말에", "selected_people": "친구랑"} |
assistant | 주말에 보기 좋은 영화로는 '베놈:라스트 댄스', '대도시의 사랑법' 등이 있습니다. | - |
user | 베놈:라스트 댄스 | {"selected_theater":"상암월드컵경기장 megabox","selected_time":"주말에", "selected_people": "친구랑", "selected_title": "베놈: 라스트 댄스"} |
assistant | 시간표를 조회했어요 | - |
user | 아 그냥 내일 봐야겠다. | {"selected_theater":"상암월드컵경기장 megabox","selected_time":"내일", "selected_people": "친구랑", "selected_title": "베놈: 라스트 댄스"} |
에이전트에서 사용되는 엔티티 추출 모델은 'gpt-4-0-mini-2024-07-18'을 기반으로 Fine-tuning되어 있습니다.
하지만 모델을 최신 영화가 개봉할때마다 재학습할수는 없습니다.
즉 매번 메타 데이터를 업데이트 할 수 없기때문에 모델 앞단에 엔티티 추출 및 검증 절차를 거치도록 하여 영화/상영관 데이터가 업데이트되더라도 모델이 엔티티를 인식할수 있도록 하였습니다.
이를 통해 모델이 영화 제목이나 극장명과 같은 엔티티를 더 잘 인식할 수 있게 되었습니다.
영화 예매 Agent의 핵심은 “높은 정확도 성능이 요구되는 Actionable한 LLM Agent”를 구축하는 데 있습니다.
이를 위해서는 각 핵심 Task(엔티티 추출, 함수 호출, 답변 생성)의 정확도가 매우 중요합니다.
뿐만 아니라, 고객의 편의를 극대화하기 위해 답변의 길이와 일관된 톤앤 매너 역시 중요한 요소로 고려되었습니다.
이러한 이유로, 핵심 Task를 수행하는 모델에는 반드시 미세 조정(Fine-tuning)이 필요했습니다.
반면, 날짜 추출이나 인원 추출과 같은 Sub task는 별도의 미세 조정 없이도 프롬프트 조정만으로 충분한 성능을 발휘할 수 있었습니다.
저희 LLM Workflow 는 모든 Task 들에 각각 가장 효율적인 LLM 모델들을 적용하여 전체적인 성능을 높혔습니다.
다양한 모델과 파라미터를 조정하여 호출할 수 있도록 LLM Workflow가 구성되었기 때문에 가능한 일이었습니다.
지금까지 T멤버쉽 영화예매 서비스를 어떻게 개발하게 되었는지 LLM Workflow 측면에서 공유드렸습니다.
이 글은 저희의 전체 구현사항을 담지는 못했고, LLM을 이용하여 진행하는 메인 워크플로우를 설명드렸습니다.
이 메인 워크플로우 이외에도 빠르고 구조화된 대화 처리라는 다른 목적을 가지고 구현된 사전 정의 대화 기반으로 구성한 워크플로우도 함께 구성되어있습니다.
내용이 길어져 이 사전정의 대화 기반 워크플로우는 다음 글을 통해 이어 설명하고자합니다.
이 글이 에이전트를 개발하시는 많은 분들께 도움이 되었으면 좋겠습니다.
추가로 LLM Workflow는 Aide Framework 기반으로 개발 되었습니다. 코드 구성이 궁금하신 분들은 관련 블로그를 참고해 주세요.
영화 예매 에이전트를 사용해 보고 싶으시면, 에이닷 앱을 설치하고 대화창에서 '영화예매'라고 입력해 보세요.
저희 에이전트와 멀티턴 대화를 통해 고민의 흔적을 함께 느껴보시면 좋겠습니다.
이 기술이 다양한 Domain으로도 전파되기를 기대하며, 다음에 더 흥미로운 내용으로 찾아뵙겠습니다.
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.