LLM Multi Agent: Customer Service를 기깔나게 자동화하는 방법

Corca
Corca
Published in
17 min readSep 6, 2023

Written by: 오경택(Back-end Engineer), 설지원(Back-end Engineer), 김준홍(ML Engineer)

Intro

안녕하세요! 코르카 테크팀입니다. 오늘은 코르카가 LLM을 활용해 구축한 Multi Agent Architecture로 Customer Service (CS) 문제를 어떻게 해결했는지 소개해드리려고 합니다.

* LLM은 Large Language Model의 약자로, 정말 간단히 말해 많은 양의 텍스트를 학습한 인공지능입니다. 최근 많은 관심을 받았던 ChatGPT가 LLM 중 하나입니다.[1]

우선 우리가 해결해야 하는 문제는 아래와 같았습니다.

  • A사는 여행 도메인에서 서비스를 제공하고 있으며, 고객이 인터넷 문의글을 작성하면 이에 대하여 상담사가 답변을 작성합니다. 이때 참고해야 하는 자료는 FAQ입니다.
  • B사는 헬스케어 도메인에서 서비스를 제공하고 있으며, 마찬가지로 인터넷 문의글에 대하여 전문가가 답변을 작성해야 합니다. 이때, 헬스케어 도메인 특성상 상담자의 개인적인 요건과 환경을 파악하여 종합적 이해를 바탕으로 객관적인 내용을 작성해야 합니다. 참고해야 하는 자료는 책, 과거 상담내역, 추천할 만한 B사의 제품 등 다양합니다.

앞서 말씀드린 2가지 문제는 LLM 세계에서 흔히 알려진, 그러나 그것보다 조금 더 복잡한 관점에서의 QA 태스크라고 볼 수 있습니다. 사람이 직접 하던 태스크를 LLM이 도와준다면 더 빠르고 효율적으로, 시간과 인건비를 절약하며 사람의 힘을 덜어줄 수 있겠다는 생각이 들었습니다. 여러 도메인에서 니즈가 꾸준히 있는 것을 확인했고 상대적으로 간단한 CS 기능을 필요로 하는 A사의 문제 해결부터 시작해보았습니다.

Single Agent Architecture

A사에서는 동일하거나 비슷한 내용으로 들어오는 많은 질문들에 상담사가 일일이 답변을 작성해야 했는데요. 이 수고스러운 작업을 생략하거나 축소하고자 하는 니즈가 있었습니다. 이러한 관점에서 2023년 5월 말부터 6월 초까지 다양한 방법을 시도해서 프로젝트를 진행하였습니다.

특히 ‘동일하거나 비슷한 내용의 질문을 다시 한다’ 라는 점에 주목하여 FAQ 데이터를 받아 응답하는 QA Chatbot을 구상했습니다.

간단한 답변을 작성해야 하는 것이 목표인 이 프로젝트에 가장 적합한 구조로 하나의 도구를 가진 Single Agent Architecture를 만들었고, Retrieve Information and Answer를 통해 문제를 해결했습니다. (실제로는 이보다 복잡하지만) Agent 하나의 구조를 간략히 해본다면 아래 그림과 같습니다.

* Agent란 LLM 학계에서 통용되고 있는 단어입니다. 정확한 정의는 아직 없지만, 통상적으로 LLM을 하나의 지성체로 보고 스스로의 기억(Memory)를 기반으로 계획하고, 행동하고, 도구(Tools)를 사용하며 능동적으로 문제를 해결하는 하나의 존재 단위를 뜻합니다. [2]

Agent는 사용자 질문에 대해 아래 단계를 거쳐 답변을 생성합니다.

  1. 사용자 질의를 분석하여 카테고리와 질문을 추출합니다.
  2. FAQ 데이터가 저장된 Vector Store에서 사용자 질문과 비슷한 QA 페어를 Search합니다.
  3. 해당 지식을 기반으로 LLM이 응답합니다.

위와 같은 단계를 거쳐 LLM이 FAQ 데이터 중 고객의 문의와 유사한 질문들을 가져오고 이를 기반으로 답변을 생성하는 것을 확인했습니다.

Challenges

앞선 A사와의 프로젝트 결과를 통해 CS 분야에서 사람이 직접 하던 것보다 훨씬 효율적으로 문제를 해결할 수 있다는 가능성을 확인하였고, 보다 복잡한 B사의 Pain Point를 들여다 보았습니다. 다양한 자료를 참고해서 정확한 정보를 전달하는 상담 서비스를 제공하는 것이 목표였던 B사의 프로젝트를 위해서는 크게 4가지 챌린지를 해결해야 했습니다.

  • 상담 내용이 복잡합니다.

요구 사항이 많은 상담에 대하여 디테일을 놓치지 않고 말해야 합니다. 너무 많은 양의 요구를 주고 사람한테 한 번에 해결하라고 하면 못하겠죠? 단계적으로, 혹은 여러 개로 분할해서 접근해야 해결할 수 있는 문제가 분명히 있습니다.

  • 참고해야 하는 데이터의 종류가 많습니다.

LLM에는 프롬프트 토큰 크기에 제한이 있어서, 책이나 과거 상담내역 등 한 번에 참조해야할 데이터가 많아 프롬프트 길이가 지나치게 길어지는 문제가 있었습니다. 실제로 토큰 제한을 넘겨 응답을 받지 못하고 에러가 나는 경우도 있었습니다.

  • Agent의 책임을 분리해야 합니다.

기존 Single Agent 구조에서는 모든 작업을 하나의 Agent가 맡아서 해야만 했습니다. 어떠한 문제에서 A → B → C라는 작업을 해야 하는데, 또 다른 문제에서는 A → B 작업만 하고 싶을 수 있습니다. 이때 Single Agent Architecture에서는 각각의 경우에 대하여 Agent를 따로 만들어야 하는 문제가 있었습니다. 이는 하나의 Agent가 모든 책임을 지고 있기 때문에 발생하는 문제입니다.

  • Hallucination 발생을 최소화해야 합니다.

헬스케어 도메인에서 의학적으로 틀린 부분을 맞는 것처럼 지어내서 이야기하게 된다면 사용자가 영양제를 잘못 복용하는 등의 문제가 발생할 수 있습니다. 또한 LLM이 존재하지 않는 상품을 존재하는 것처럼 추천하는 경우 사용자는 그 상품을 구매하고 싶어도 구매하지 못하는 문제가 발생할 수 있습니다.

* Hallucination이란 LLM이 사실이 아닌 것을 사실처럼 말하는 현상입니다.

Multi Agent Architecture

위에서 언급한 챌린지를 해결하기 위해 Agent가 협동할 수 있는 Multi Agent Architecture를 구현했습니다. Multi Agent Architecture란 여러 Agent가 서로 협동하여 문제를 해결하는 구조를 말합니다. 우리는 Leader Agent와 그가 생성하는 협업 Agent들로 Multi Agent 구조를 만들었습니다.[3]

Multi Agent Architecture에서의 Problem Solving 과정은 다음과 같습니다.

  1. Leader AgentKey Point Analyzer Agent에게 복잡한 질문을 간단한 여러 개의 Sub-question으로 나눠달라고 요청합니다.
  2. Leader Agent가 Sub-question 목록을 받으면 각각의 Sub-question에 대하여 Question Answerer Agent을 생성하고 답해달라고 요청합니다.
  3. 이때 Question Answerer Agent는 각 Sub-question에 필요한 정보를 Vector Store에서 찾아와서 이를 참고하여 답합니다.
  4. Leader Agent는 각각의 Sub-Question에 대한 답을 합하여 사용자 질의에 대한 답을 생성하고, Reviewer Agent에게 검토해달라고 요청합니다.
  5. Reviewer AgentLeader Agent로부터 전달받은 답변에 대한 피드백을 말합니다. Leader Agent는 그 피드백을 반영하여 최종 답변을 생성한 후 사용자에게 전달합니다.

기존에는 사용자의 상담, 즉 질의의 텍스트 길이가 길어지면 전반적인 사용자의 요구를 이해하지 못하고 찾아온 지식을 줄줄이 말하며 질문의 핵심과는 떨어진 답변을 했습니다. 그러나 Multi Agent Architecture에서는 Key point Analyzer Agent가 복잡한 질문을 간단한 질문 여러 개로 나누고, 각각 나눈 질문에 대하여 Question Answer Agent가 고민해서 내놓은 답변을 Leader Agent가 합하도록 했습니다. 이에 따라 상담자의 상황과 요구에 집중하여 더 개인화된 답변을 생성할 수 있었습니다.

하나의 Question Answer Agent는 간소화된 문제만을 해결하면 되기 때문에 그에 필요한 지식만 가져와서 참고하면 됩니다. 그리고 모든 Agent는 다른 Agent가 가진 지식을 다 알고 있을 필요가 없습니다. 이렇게 컨텍스트 제한 내에서 문제를 해결할 수 있습니다. 각자의 기억이 다르지만 서로 협업하여 도울 수 있는 구조가 된 거죠.

Agent 별로 기능 및 역할이 명확히 분리되었기 때문에 요구사항이 늘어나면 추가적으로 Agent를 늘리는 것 또한 쉬워졌습니다. 답변에 원하는 말투나 포맷을 적용하고 싶으면 반영하는 Agent를 추가하면 되고, 답변을 기반으로 상품 추천을 하고 싶으면 상품을 추천하는 Agent를 추가하면 됩니다. 각 Agent는 각자가 책임지면 되는 문제만 해결하면 되고 필요할 때마다 그 역할을 하는 Agent를 불러 협업하도록 하면 됩니다. 이런 방식으로 Agent 하나의 책임을 줄이고 명확한 역할을 부여하여 Agent의 재사용성을 높일 수 있었습니다.

헬스케어 도메인에서 의학적으로 틀린 부분을 맞는 것처럼 지어내서 얘기하게 된다면 정말 치명적인 단점이 될 것입니다. 만약 없는 사실이라면 없다고 이야기하는 것도 필요합니다. 예를 들어 상품을 검색했을 때 데이터베이스에 존재하지 않는 상품인 경우 현재 상품 정보를 가지고 있지 않습니다. 라고 말할 수 있어야 합니다. 이 부분에 집중하여 각 Agent에서 Hallucination이 발생하지 않도록 프롬프트를 개발하고 최적화했습니다. 또한, Reviewer Agent를 만들어 답변에 포함된 요소끼리의 상호작용을 검토하여 Leader Agent가 답변을 재생성할 수 있도록 했습니다.

Single Agent vs. Multi Agent

그럼 여러 가지 상황과 고민을 가지고 있는 사용자의 상담을 Single Agent와 Multi Agent에게 시켜보겠습니다 🧐

Question

안녕하세요 개발자로 일하고 있는 30대 남자입니다. 
헬스를 자주 하긴 하는데 잠을 좀 불규칙하게 자서 피로감을 잘 느낍니다.
이제 슬슬 건강을 신경써야할 나이기도 하고 평소에 피로감을 많이 느껴요.
뭔가 추천해주실 만한 게 있을까요?
루테인 먹다가 간에 부담이 갈 수 있다고 들어서 일단은 그만뒀습니다.
그리고 자도자도 피로감이 안 풀려요 ㅠㅜ
평소에 6-7시간 자다가 5일 중 한번은 12시간 이상 자는 것 같고 평소에 식습관은 탄수화물을 즐겨먹습니다.
알러지 없는 편이긴 한데 새우 알러지만 있어요
영양제 많이 먹으면 간에 부담이 간다고 해서 걱정이 되어 어떻게 섭취할지도 알려주시면 감사하겠습니다

Single Agent Answer

피로감이 느껴지는 원인은 다양할 수 있습니다. 일상 생활의 습관, 식습관, 운동, 스트레스 등 여러 요인이 복합적으로 작용하여 피로감을 유발할 수 있습니다. 피로감을 줄이고 건강을 유지하기 위한 몇 가지 권장사항을 제시해 드리겠습니다:

1. 규칙적인 수면 패턴 유지: 아무리 바쁘더라도 가능한한 같은 시간에 잠자리에 들고 깨는 것이 좋습니다. 꾸준한 수면 패턴을 유지하면 피로감을 줄일 수 있습니다.

2. 균형 잡힌 식습관: 탄수화물을 즐겨먹는다면 전체 식사의 균형을 유지하는 것이 중요합니다. 과다한 당분 섭취는 혈당 수치의 급격한 변동을 유발할 수 있으므로 복합 탄수화물(곡물, 채소 등)을 주로 섭취하는 것이 좋습니다. 또한 단백질과 건강한 지방, 비타민 및 미네랄도 균형 잡힌 식사에 포함되어야 합니다.

3. 물 섭취: 충분한 물을 섭취하여 데히드레이션(탈수) 상태를 예방합니다. 탈수는 피로감의 원인 중 하나일 수 있습니다.

4. 영양제: 간 건강에 유의하면서 영양제를 섭취하는 것도 고려해 볼 만합니다. B군 비타민, 매그네슘, 아이언 등은 에너지 생산과 관련이 있어 피로감 완화에 도움을 줄 수 있습니다. 하지만 과다 섭취는 간에 부담을 줄 수 있으므로 권장량 내에서 섭취하는 것이 중요합니다. 제품 성분과 섭취량을 확인한 후 의사나 영양사와 상담하는 것을 권장합니다.

5. 스트레스 관리: 스트레스는 피로감의 주요 원인 중 하나입니다. 명상, 요가, 호흡 운동 등의 이완 기법을 사용하여 스트레스를 관리하는 것이 좋습니다.

6. 알코올, 카페인 섭취 제한: 과도한 알코올과 카페인 섭취는 수면의 질을 저하시키고 피로감을 느끼게 할 수 있습니다.

새우 알러지가 있다면 영양제 섭취 시 해당 알러겐이 포함되어 있는지 확인하는 것이 중요합니다.

마지막으로, 지속적인 피로감이나 다른 건강 문제가 발생할 경우 의사와 상담하는 것이 가장 좋습니다.

Multi Agent Answer

안녕하세요! 상세한 정보를 제공해주셔서 감사합니다. 공유해주신 내용을 바탕으로 다음과 같이 조언드리겠습니다:

1️⃣ 피로감을 해소하기 위해 오메가3와 락토바실러스를 복용하시는 것을 추천드립니다. 이들은 전반적인 에너지 수준을 향상시키는 데 도움이 됩니다. 또한, 에너지 생산에 중요한 역할을 하는 비타민 B와 코엔자임 Q10을 보충하는 것도 좋습니다.

2️⃣ 루테인이 간에 부담을 주는지에 대한 우려에 대해, 현재까지 루테인이 간 손상을 일으키는 것과 관련된 구체적인 보고는 없습니다. 그러나 현재 루테인을 복용 중단하신 것은 안전한 결정입니다.

3️⃣ 탄수화물을 많이 섭취하는 식습관을 가지고 계시다면, 인슐린 효율성을 돕고 혈당 수준을 조절하는 크롬을 복용하는 것을 고려해보시는 것도 좋습니다.

4️⃣ 새우 알레르기가 있으시다면, 그린입히드머슬 추출물 오일과 같은 보충제에 조개류 성분이 포함되어 있는지 라벨을 주의 깊게 확인하시는 것이 중요합니다.

마지막으로, 모든 보충제는 식사 후에 하루에 2-3번으로 나눠서 복용하는 것이 좋습니다. 새로운 보충제 복용을 시작하기 전에 항상 의료 서비스 제공자와 상의하는 것이 가장 좋습니다.

추가로, 오메가3 보충제로는 'XXX'를 추천드립니다. 이 제품은 신선한 액체 형태로, 천연 삼중 항산화 기능이 있으며, 지속 가능한 인증을 받은 야생 어류에서 추출한 제품입니다. 하루에 한 번, 5ml를 섭취하시면 됩니다.

락토바실러스 보충제로는 'XXX'를 추천드립니다. 이 제품은 X 특허 기술로 제조된 두 가지 종류의 유산균을 포함하고 있으며, 세계에서 인정받은 특허 균주 락토바실러스를 함유하고 있습니다. 하루에 한 번, 1캡슐을 아침 식사 전에 섭취하시면 됩니다.

이 정보가 도움이 되었기를 바라며, 추가로 궁금한 사항이 있으시면 언제든지 문의해주세요. 건강한 하루 보내세요! 😊

영양제 상담을 하는 경우를 가정하고 질문을 던져봤는데요. Single Agent는 많이 일반적인 내용을 중심으로 답변을 해주는 반면, Multi Agent의 경우는 사용자가 평소에 느끼는 피로감, 식습관, 우려에 대해 깊이 있게 이해하고 개인화된 답변을 해주는 걸 볼 수 있습니다.

이렇게 Single Agent에서 Multi Agent Architecture로 구조를 바꾸었더니, 답변 퀄리티가 눈에 띄게 향상했습니다. 실제로 B사 관계자분께 전반적으로 문의사항을 잘 캐치하고, 우리의 상담톤과 비슷하게 답하고 있다고 피드백을 받았습니다.

What can we do with Multi Agent Architecture?

그럼 이 Multi Agent Architecture를 통해 어떤 가치를 얻을 수 있을까요?

보통의 LLM 챗봇이라 하면 하나의 LLM을 활용하여, 그리고 필요하면 간단한 행동을 할 수 있도록 하여 사용자에게 원하는 답변을 내주는 구조인데요, Multi Agent Architecture에서는 복잡한 일을 하는 것이 가능하여 충분히 생각을 많이 거친 답변을 들을 수 있다는 게 장점입니다. 클라이언트 측에서 제공하는 데이터를 더 많이 볼 수 있어서 기존 LLM 챗봇보다 더욱 니즈에 맞는, 논리적이고 정확한 상담이 가능합니다.

복잡하고 고려할 사항이 많거나 전문적인 지식을 필요로 하는 상담을 상담사가 처음부터 끝까지 다 한다면 하나하나 답변하는 데 코스트가 굉장히 크고 하루에 열 몇 개 정도의 답변이 최대일 것입니다. 그러나 Agent들이 협동하여 작성한 답변을 이용하면 상담사가 검토만 하면 되기에 5배, 10배 더 많은 답변을 제공할 수 있습니다.

코르카는 이를 위한 구조를 구축했고 여러 번의 관련 프로젝트 경험으로 클라이언트 측의 과거 상담내역(QA 데이터)과 부가적으로 참고할 만한 데이터만 있다면 어떤 도메인의 문제든 각 클라이언트에 개인화된 훌륭한 Agent를 만들어 해결할 수 있습니다. 어떤 방식으로 클라이언트의 데이터를 전처리하면 검색이 잘 되는지, LLM이 어떠한 검색어를 만들어야 검색 성능을 올릴 수 있는지 등 꾸준한 리서치를 통해 경험이 축적되었기에 각 클라이언트의 데이터에 맞게 LLM의 성능을 끌어올릴 수 있는 기술력을 보유하고 있습니다.

Future works

코르카는 이에 만족하지 않고 더 좋은 서비스를 제공하기 위하여 중장기적으로 아래와 같은 목표로 아키텍쳐를 더 발전시키려 합니다.

  • Autonomous Agent로의 진화

지금은 각 Agent 마다 우리가 직접 사용 가능한 도구를 쥐어주고, Agent 간의 협업은 직접 Planning 해줍니다. 나아가 앞으로는 Leader Agent가 적재적소에 필요한 Agent를 호출하여 도구를 쥐어주고, 직접 그들 간의 Planning도 할 수 있는 완전한 Autonomous Agent를 구현하는 것이 목표입니다.

  • Agent에게 더욱 폭넓은 Tool 제공

Agent가 더 다양한 Tool을 다룰 수 있게 합니다. 지금은 Agent가 LLM과 Vector Store를 활용할 수 있습니다. 앞으로는 인터넷 검색을 할 수 있는 Search Tool 혹은 Crawling Tool 등을 활용하여 외부 데이터를 필요에 따라 탐색할 수 있도록 구현할 예정입니다.

  • Information Retrieval 성능 개선

현재는 Vector Store에 데이터들이 저장되고 similarity score라는 숫자 하나에 의존해 가장 비슷한 데이터를 가져오는 방식인데, 데이터들을 잘 정리해서 압축된 지식 그래프 (Knowledge Graph) 형태로 정제한다면 검색을 하는 데 있어서 LLM이 사용자 질문에 대해 지식을 참조해 이해한 것을 바탕으로, 더 정확한 정보를 가져올 수 있습니다. 이를 통해 Hallucination을 최소화하는 것을 기대하고 있습니다.

  • 비용 최적화

비용 최적화는 이 세상 모든 문제 해결에 필요한 작업입니다. LLM에서 비용 최적화를 위한 방법은 크게 두 가지가 있습니다. 첫 번째로 Open-source LLM을 직접 Fine-tuning 해서 OpenAI 의존성을 줄이면서 비용을 아끼는 방법입니다. 두 번째로 Prompt Engineering을 통해 같은 성능을 내는 더 짧은 프롬프트를 탐색해 최적화하는 방법입니다. LLM은 토큰 단위로 비용이 발생하기 때문에 이를 줄이는 과정은 매우 중요합니다. 서비스 안정화 후 최적화 작업도 차근차근 진행할 예정입니다.

Outro

지금까지 코르카가 약 3달 동안 진행했던 프로젝트와 앞으로의 방향성에 대해 간단히 설명드렸습니다. 코르카는 여러 방면에서 가능성을 열어 최신 기술을 지속적으로 리서치하고 프로덕트에 반영하는 작업을 하고 있습니다. 언젠가는 Customer Service 뿐만 아니라 더 복잡한 작업들도 할 수 있게 되리라 믿고 있습니다.

ChatGPT를 사용하기 위한 OpenAI의 문서에서 가장 첫 번째로 보이는 프롬프트가 You are a helpful assistant인데요. 우리는 사람이 직접 하던 작업을 대신 해주고, 사람의 시간을 아껴줄 수 있는, 사람에게 도움이 되는 assistant를 기대합니다. 앞으로도 코르카의 가치를 향해 더 helpful한 assistant를 만드는 여정을 지켜봐주시기 바랍니다! 긴 글 읽어주셔서 감사합니다.

References

  1. A Survey of Large Language Models
  2. LLM Powered Autonomous Agents
  3. AgentVerse: Facilitating Multi-Agent Collaboration and Exploring Emergent Behaviors in Agents

우리가 살아가는 세상을 AI 기술로 변화시키는 팀 Corca는 고도화된 기술력과 기획력을 토대로 새로운 가치를 창출하고 있습니다.
Corca의 여정에 함께하실 분들은 corca.team페이지를 확인해주세요!

--

--