Function Calling을 활용한 신뢰할 수 있는 기업용 AI 에이전트 만들기

2024-09-15
tony

많은 기업이 생성형 AI를 활용해 업무용 챗봇을 개발하고 있습니다. 최근 LLM(대형 언어 모델)의 성능이 상향 평준화된 이유도 있지만, AI에게 기업의 데이터를 학습시키는 다양한 방법이 등장했기 때문입니다.

과거에는 Fine Tuning 방식을 통해 대량의 데이터 입력과 수작업이 필요했지만, 최근 RAG(Retrieval-Augmented Generation)를 활용하면 간단하게 데이터를 학습한 업무용 챗봇을 만들 수 있게 되었습니다.

1. RAG의 원리

RAG의 원리는 간단합니다. 기본적으로 두 가지 요소로 구성됩니다:

  • 검색 모듈: 외부 데이터베이스나 문서에서 필요한 정보를 검색하는 역할을 담당합니다.
  • 생성 모듈: 검색된 정보를 바탕으로 사용자가 요구하는 응답을 자연스럽게 생성하는 역할을 합니다.

RAG는 LLM의 학습 한계와 시간의 흐름에 따른 정보 업데이트 문제를 해결하는 데 유용합니다. 기본적으로 LLM이 최신 데이터나 기업 내부의 기밀 자료 등을 활용한 맞춤형 응답을 제공할 수 있도록 도와줍니다.

RAG 구성

1. Vector Store에 데이터 입력

2. 사용자 질문 수신

-> 사용자 문맥 저장 및 조회

3. 질문 분석

-> AI는사용자로부터 입력된 명령어 또는 질문을 자연어 처리(NLP)로 분석함. 예를들어, “갤럭시 S24 장점이 뭐야?"라는명령어가 있으면 AI는 날씨 정보를 제공하는 함수가 필요하다는 것을 이해

4. 정보 검색

-> 질문을벡터로 변환한 후, 사전 입력된 Vector Store에서 코사인 유사도 등을 기반으로 관련성 있는 정보를 찾음(학습된데이터에 품질에 따라 할루시네이션 있을 수 있음)

5. 결과 반환

-> 질문의 의도에 맞게 답변을 자연스럽게 정리하고 프롬프트에 맞춰서 답변함

2. RAG의 한계점

RAG를 활용하여 다양한 리서치를 진행했습니다. 많은 회사들이 RAG를 도입해 챗봇을 개발하고 있으며, 우리도 이 기술을 적극적으로 활용하고자 했습니다. 그러나 특정 환경에서 RAG는 다음과 같은 한계점을 드러냈습니다.

  1. 정확성 문제: RAG는 검색된 정보에 기반해 답변을 생성하기 때문에, 검색된 정보가 부정확하거나 불완전할 경우 생성된 답변의 품질이 크게 떨어졌습니다. 예를 들어, 기업의 Wiki에 있는 정보를 PDF로 변환해 그대로 벡터 저장소(Vector Store)에 학습시키면 AI가 혼동을 일으킵니다. 예컨대, 1년 전에 작성된 회의록을 최근 업무 현황으로 잘못 인식하거나, 동일한 주제로 작성된 회사의 프로세스나 규정을 혼합해 잘못된 답변을 하기도 합니다. 또한, 수천만 개의 데이터베이스 행(row)을 학습시킨 후 평균 데이터나 합산 값을 요구했을 때, 엉뚱한 숫자를 반환하는 치명적인 문제를 발견했습니다.
  2. 지연 시간: RAG는 실시간 검색을 수행한 후 그 결과를 바탕으로 응답을 생성하므로 일반적인 질문에 비해 답변 시간이 더 오래 걸립니다. 특히, 벡터 저장소에 저장된 데이터가 많을수록 검색 시간이 길어지고, 그에 따라 응답 속도도 느려집니다.
  3. 비용 문제: RAG를 사용할 경우 벡터 저장소에서 검색하는 입력 토큰의 양이 많아집니다. 이로 인해 LLM의 API 사용 비용이 기하급수적으로 증가할 수 있습니다. 한 번의 질문에 2~3만 개의 토큰을 사용하는 경우도 있으며, 이는 저장된 데이터 양에 비례해 더 많은 토큰을 소모하게 됩니다.

3. Function Calling을 활용한 RAG의 한계 극복

RAG의 에이전트를 분리하고 프롬프트를 최적화하는 등 여러 절차를 거쳤으나, 어느 순간 더 이상 답변의 신뢰도가 향상되지 않았습니다. 그래서 다른 방법을 찾았고, 그 해결책이 바로 Function Calling이었습니다.

Function Calling은 RAG의 한계를 극복할 수 있는 여러 장점을 제공합니다.

  • 정확성 향상: Function Calling은 데이터를 더욱 구체적이고 정확하게 처리할 수 있는 특정 기능을 호출합니다. 예를 들어, 기업의 내부 시스템에서 실시간으로 정보를 가져오거나, 계산 및 분석 작업을 자동으로 처리할 수 있습니다. 이를 통해 LLM의 응답은 단순한 문장 생성에서 벗어나 실제 비즈니스 로직을 수행할 수 있게 됩니다.
  • 지연 시간 단축: Function Calling을 사용하면 미리 정의된 API를 호출해 특정 작업을 수행함으로써 RAG의 검색 시간과 데이터 처리 시간을 단축할 수 있습니다. 이를 통해 실시간에 가까운 빠른 응답이 가능합니다.
  • 확장성: Function Calling은 RAG와 결합해 AI 에이전트의 기능을 확장할 수 있습니다. 예를 들어, 다양한 기업용 소프트웨어 시스템과의 통합이 가능해지며, 이를 통해 사용자에게 맞춤형 정보를 제공할 수 있습니다. ERP, CRM 시스템과 통합하여 실시간 데이터를 보고받거나, 처리 작업을 요청할 수 있는 진정한 AI 비서로 활용할 수 있습니다.

Function Calling

1.사용자 질문 수신

-> 사용자 문맥 저장 및 조회

2.질문 분석

-> AI는사용자로부터 입력된 명령어 또는 질문을 자연어 처리(NLP)로 분석함. 예를들어, “갤럭시 S24 장점이 뭐야?"라는 명령어가 있으면 AI는 날씨 정보를 제공하는 함수가 필요하다는 것을 이해

3.함수 호출

-> 명령을분석한 후, 해당 작업을 처리할 수 있는 함수(또는 API)를 호출 이때 함수는 미리 정의된 명령어와 파라미터를 기반으로 호출됨. 예)뉴스룸 Search API에갤럭시 S24를 검색함
(검색된결과를 반환하므로 할루시네이션 없음)

4.결과 반환

-> 함수가 실행되고 나면, 그 결과를 사용자가 이해할 수 있는 형태로 다시 제공
예) 가져온 정보에서 갤럭시 S24의 장점만 뽑아서 대답(이때 프롬프트 엔지니어링이 적용됨)

4. 두 기술의 결합 사용

기업용 AI 에이전트를 구축할 때는 RAG와 Function Calling 기능을 적절히 결합하는 것이 중요합니다. 그 이유는 모든 기업 데이터가 시스템에 존재하지 않기 때문에, API로 호출할 수 없는 정보도 많기 때문입니다. 예를 들어, 기업의 규정처럼 단일 사실로 존재하는 데이터는 RAG가 더 효율적입니다.

반면, 영업, 물류, 관리 등 실시간으로 변하는 비즈니스 프로세스 데이터는 Function Calling을 활용해 처리해야 합니다.

RAG와 Function Calling을 효과적으로 결합해 AI 에이전트를 구축한다면, 기업 환경에서 더 신뢰할 수 있고 효율적인 AI 솔루션을 만들 수 있습니다.

셀리즈 서비스가 궁금하다면?