이경전, 윤이지, 이수영, 정백, 안은정, 심민준, 정규윤, 옥근우, 김담, 박동주, LLM과 RAG에 기반한 대화형 매칭 에이전트 프롬프트 엔지니어링 과정과 최적화 이슈. 2024 지능정보시스템학회 춘계 학술대회, 2024.
Abstract
기업이나 정부 등 사회 조직에서 일반적인 상식과 지식을 가진 사람을 채용하게 되면, 그 채용된 사람은 해당 조직의 규칙과 전문 지식을 교육받아 습득하게 된 이후에 업무에 투입되는 데, 이와 마찬가지로, 일반적인 상식과 지식을 어느 정도 갖춘 LLM (Large Language Model)과 같은 초거대 생성AI가 발전한다 하더라도, 그 AI 시스템이 특정 조직과 목적을 위해 일할 때는, 해당 조직의 규칙을 습득하고 이에 기반하여 일을 할 수 있어야 하는데, 이러한 것을 가능하게 하는 과정이 프롬프트 엔지니어링이다. 그 직무가 매칭(Matching)일 경우, 매칭 에이전트는 시시각각 변하는 사용자들의 요구(Request)와 상황(Situation) 정보를 반영할 필요가 있는데, 이는 현재, RAG(Retrieval Augmented Generation)기술에 기반해야 한다. 본 연구는, 다양한 분야에서 매칭을 하는 에이전트를 위한 핵심 알고리듬을 설계하고 개발하기 위한 프롬프트 엔지니어링 과정과 최적화 이슈를 소개한다. 발전하고 있는 LLM과 RAG 기술을 활용하면, 사람과 사람, 사람과 상품, 사람과 비즈니스 등을 모두 이어줄 수 있는, 말 그대로 특정 카테고리의 구분 없이 상대를 매칭해주는 인공지능 시스템을 개발할 수 있을 것이라고 예상된다. 이 시스템은, 실시간으로 조건에 맞는 상대를 매칭하는데, 사용자가 매칭을 요구하는 대화를 입력했을 때, 해당 조건에 맞는 다른 사용자를 추천해주고, 추천된 상대와 연결하고, 남녀매칭이나 중고거래뿐만 아니라 특정 카테고리에 속하기 어려운 요구들도 매칭하는 것을 목표로 한다.
본 연구에서, LLM은 OpenAI의 GPT-4-Turbo를, RAG를 위한 embedding에는 OpenAI의 “text-embedding-3-large” 모델을 사용하여 다음과 같이 프롬프트 엔지니어링을 진행하고 있다. 모든 입력 대화가 매칭을 원한다는 가정 하에, 사용자가 입력한 대화를 입력값으로하는 RAG를 수행하여 유사한 대화들을 N개 추출한다. 유사한 대화들임을 판단하는 기준은 L2거리로, FAISS 라이브러리를 이용하여 Embedding을 통해 벡터값으로 저장되어 있던 타 사용자들의 대화들과 사용자 대화의 벡터값을 비교함으로써 구할 수 있다. 추출된 N개의 대화와 사용자가 입력한 대화를 함께 프롬프트에 넣고, 사용자의 요구사항에 가장 부합하는 타 사용자의 대화를 매칭하는 답변을 생성한다. 만약, 매칭을 찾지 못할 경우 차선이 될 수 있는 매칭 대화를 연결해주되 차선임을 알리는 답변도 함께 생성하도록 설정하였다. 그럼에도 적절한 매칭이 어려운 경우에는, 매칭되지 못했음을 안내하고 다른 매칭으로 재시도해달라는 답변을 생성한다.
매칭 알고리듬의 성능을 높이기 위한 RAG의 개선과 최적화 실험도 진행하였다. 먼저, RAG 검색을 다양화하여 적절한 문장을 검색하도록 하였다. RAG 검색 시 사용자의 입력 문장을 그대로 검색하는 것뿐만 아니라 형태소 단위로 나누어 검색한다. 이와 더불어, 사용자 입력 문장으로부터 명사를 추출하여 해당 단어에 대한 일반적인 텍스트 검색도 수행한다. 이렇듯 검색 방식을 다양화하는 이유는, 전통적인 키워드 검색 방식을 사용하거나 chunk 단위로 검색할 경우에 더 잘 검색되는 대화들이 있기 때문이다. 가령, ‘제가 쓰던 축구공 팔아요.’라는 대화는 RAG 시 ‘축구공’보다 ‘팔아요’라는 의미에 더욱 집중하여 어떠한 제품을 판매하는 대화들을 추출하지만, 해당 문장을 형태소 단위로 분리 시 ‘축구공’과 더 관련된 문장들을 추출하게 된다. 프롬프트 역시 단순히 사용자의 요구에 따라 매칭된 타 사용자를 출력해달라 하는 것보다 매칭 이유까지 출력하도록 할 때, 그리고 사용자가 어떠한 물건을 사고 싶어할 때 사용자가 원하는 물건과 타 사용자가 판매 중인 물건을 함께 출력해보라 작성할 경우 더 적절하고 정확히 매칭하는 양상을 발견하였다.
매칭 시 응답 속도를 높이는 방법으로서, 유사 대화들과 사용자의 입력 대화를 프롬프트에 넣고 매칭을 요청하는 과정에서, 매칭된 상대의 활동명만을 먼저 출력한 뒤 답변을 생성하는 ‘필터링’ 방법을 시도하였다. 이 방법의 유효성을 검증하기 위해, 판매 상점 및 취미 관련 1,102개의 데이터를 활용하여 RAG를 이용한 문장 필터링 유무에 따른 LLM의 응답 속도를 비교 분석하기 위해 30번의 실험 후, 평균 응답 속도를 측정하고, 독립 표본 T-검정과 단순 회귀분석을 실시하였다. 필터링 미적용에서의 평균 응답 속도는 12.59초인데, 필터링 적용시 경우 평균 응답 속도는 10.85초로 감소하였고, 독립 표본 T-검정의 결과, 필터링 적용 전후의 응답 속도 차이는 p-value 0.0015로 매우 유의미한 것으로 나타났다. 또한 회귀분석을 통해 계산된 p-value는 0.002로, 필터링이 응답 속도에 유의한 영향을 미친다는 결과를 재확인했다. 회귀분석에서 도출된 R-squared 값은 0.735로, 필터링 적용의 설명력이 높음을 시사하며, 이는 필터링이 LLM응답 속도에 영향을 끼치는 주요 요인임을 나타낸다. 본 실험결과는, RAG를 이용한 문장 필터링과 같은 최적화 기법이 LLM 응답 속도를 향상시켜서, 인공지능 시스템의 효율성과 사용자 경험을 개선하는 데 기여할 수 있음을 보여준다. 이러한 매칭 알고리듬과 이에 기반한 매칭 에이전트 서비스를 개발하는 과정은 다양한 LLM 대안을 놓고, 속도와 비용, 매칭 성과를 고려하여 최선의 조합을 취사 선택하고, 또 RAG 자체의 성과를 최대하기 위한 알고리듬을 실험하는 과정을 필요로 한다. 실험 결과로 나온 지식들은 프롬프트로 반영되며, 그것은 절차적 알고리듬의 형태로 표현되기보다는 LLM에게 명령하는 프롬프트에 선언적으로 반영하여, 매칭 알고리듬에서의 코드와 지식의 독립성을 높이는 노력을 계속할 예정이다.
매칭에이전트는 거래 상대방을 찾는 데에 그치지 않고, 둘간의 채팅, 만남, 거래 완결까지 진행할 필요도 있다. 이 과정을 완전히 대화형 인터페이스(CUI: Conversational User Interface)로 구현할 수도 있겠지만, 결제 등의 프로세스는 사용자의 명확한 의사 표시와 행동에 근거할 필요가 있으므로, 이를 대화형이 아닌 사용자 클릭 등의 GUI(Graphical User Interface)로 개발하는 한편, 사용자의 의도 파악 알고리듬이 경량화, 내재화되어 비용과 처리시간이 최소화되는 동시에 정확성을 담보하게 된다면, 완전한 대화형 서비스로 구현하는 것을 준비중이다.
매칭 알고리듬은 다양한 분야에서 사용자 요구를 파악하고 원하는 조건의 상대를 찾아주는 매칭 Agent 시스템에서 유연하게 사용되는 것을 목표로 한다. 특정 도메인에서의 매칭에서 사용될 경우, RAG 검색 방식이나 프롬프트에 포함된 변수들을 파라미터화 하여 특화하여 사용할 수 있도록 개발중이다. 개발된 알고리듬은 현재 ㈜하렉스인포텍의 매칭 에이전트 Jarvis Just (JJ)에 채용되어, 중부시장 등 전통시장에 먼저 적용되고 있다.
본 연구는 처음에는 오직 순수한 LLM기반의 이른바 No Code 프로그래밍의 형태로 구현하는 새로운 에이전트 개발 방식을 목표로 출발하였다. 그런데, 중요한 태스크(Task)는 그저 상식과 일반 지식을 가진 LLM의 채용으로 해결되지 않는다는 점을 개발 과정에서 절감하였다. 더구나 다양한 태스크에 대해서 비용과 시간이 많이 드는 LLM API(Application Programming Interface)를 외부에서 일률적으로 부르는 것은, 실험실 연구가 아닌 실제 산업 현장에 적용하는 연구에는 비현실적이었다. 결국 LLM 그 자체의 최적화, RAG 방법 그 자체의 최적화 등 각 프로세스 단위의 최적화가 필요한 동시에, 여러 다양한 LLM API와 자체 AI 모델에 대한 Make-or-Buy Decision을 가설에 근거한 실험을 통해 채택하고 조합해야 하는 최적화 과정이라는 점을 확인할 수 있었다. 또한, 그러한 최적화의 결과가 프롬프트 상에서의 절차적 코드 형태로 표현되는 것은 시스템 유지 보수 관점과 에이전트의 특정 태스크 지식을 관리한다는 측면에서 모두 비효율적이므로, 프롬프트 엔지니어링 과정에서 코드와 지식을 어떻게 분리함으로써, 최적화를 달성할 수 있는가라는 새로운 이슈를 제기한다는 점을 발견하였다.
댓글을 달려면 로그인해야 합니다.