주요 컨텐츠로 이동

Mosaic AI 에이전트 프레임워크로 자율적인 AI 어시스턴트 만들기

 Build an Autonomous AI Assistant with Mosaic AI Agent Framework

Published: November 26, 2024

생성형 AI4분 소요

작성자: Ananya Roy

Summary

  • 대규모 언어 모델은 고급 자연어 처리 기술을 활용하여 복잡한 작업을 수행함으로써 우리가 기술과 상호작용하는 방식을 혁신하고 있습니다.
  • LLM 에이전트는 차세대 고급 AI 시스템으로, 추론, 선제적 사고, 과거 대화 기억, 그리고 다양한 도구를 활용한 응답 조정 등 복잡한 작업을 수행하기 위해 설계되었습니다.
  • Mosaic AI 에이전트 프레임워크는 개발자들이 어떤 대규모 언어 모델을 통해서든 실제 서비스에 적용 가능한 에이전트 시스템을 구축할 수 있게 해줍니다. 이 프레임워크는 사용자 맞춤 설정을 가능하게 하고, 에이전트가 자율적으로 의사결정을 내릴 수 있도록 지원합니다.

대규모 언어 모델(LLM)은 고급 자연어 처리 기술을 활용해 복잡한 작업을 수행함으로써 우리가 기술과 상호작용하는 방식을 혁신하고 있습니다. 최근 몇 년간 최첨단 LLM 모델들은 다양한 혁신적 응용 프로그램을 가능하게 했습니다. 작년에는 RAG(Retrieval Augmented Generation)가 주목받았는데, 이를 통해 사용자들은 벡터 임베딩을 이용해 조직의 데이터를 LLM에 제공하여 대화형 AI 챗봇을 만들 수 있었습니다.

하지만 이는 시작에 불과합니다. "정보 검색 기반 생성(RAG)"는 강력하지만 정적 지식 검색에만 국한되는 한계가 있습니다. 이제 우리는 한 걸음 더 나아가, 내부 데이터를 기반으로 질문에 답변할 뿐만 아니라 최소한의 인간 개입으로 실제 조치를 취할 수 있는 고객 서비스 에이전트를 상상해볼 수 있습니다.

LLM의 의미 이해와 언어적 능력을 활용하면, 단순히 사용자 쿼리에 응답하는 것을 넘어 실제로 '행동'할 수 있는 완전 자율 의사결정 애플리케이션을 만들 수 있습니다.

Databricks Mosaic AI 에이전트 프레임워크: 

Databricks가 새롭게 선보인 Mosaic AI 에이전트 프레임워크는 개발자들이 다양한 대규모 언어 모델(LLM)을 활용해 실제 서비스에 적용 가능한 에이전트 시스템을 구축할 수 있도록 지원합니다. 이 프레임워크의 핵심 기능은 RAG 애플리케이션을 포함한 고품질 AI 에이전트의 개발, 배포, 평가를 위한 종합적인 도구 세트를 제공하는 것입니다.

개발자들은 다양한 라이브러리를 활용해 에이전트를 생성하고 로그를 기록할 수 있으며, MLFlow와도 쉽게 연동할 수 있습니다. 에이전트의 매개변수 조정을 통해 빠른 실험과 반복 개발이 가능하며, 에이전트 추적 기능을 통해 로그를 기록하고 분석하여 에이전트의 응답 과정을 자세히 디버깅하고 이해할 수 있습니다.

이 블로그 시리즈의 첫 부분에서는 에이전트의 기본 개념과 핵심 구성 요소를 살펴보고, Databricks에서 제공하는 최고 성능의 오픈소스 기본 모델을 사용하여 온라인 소매업체를 위한 자율적인 다중 대화형 고객 서비스 AI 에이전트를 구축하는 과정을 소개합니다. 후속 시리즈에서는 다중 에이전트 프레임워크를 탐구하고, 같은 비즈니스 애플리케이션을 위한 고급 다단계 추론 기반의 다중 에이전트 시스템 구축 방법을 다룰 예정입니다.

LLM 에이전트란 무엇인가요?

LLM 에이전트는 복잡한 작업을 수행하기 위해 설계된 차세대 고급 AI 시스템입니다. 이들은 미래를 예측하고, 과거 대화를 기억하며, 상황과 필요에 따라 적절한 방식으로 응답을 조정할 수 있는 다양한 도구를 활용합니다.

LLM 에이전트는 RAG 기술의 자연스러운 진화 형태로 볼 수 있습니다. 이는 최신 대규모 언어 모델에 외부 시스템이나 도구, 기능을 추가하여 자율적인 의사결정을 가능하게 하는 접근 방식입니다. 복합 AI 시스템에서 에이전트는 메모리, 자기 성찰 능력, 도구 사용 등으로 강화된 의사결정 엔진으로 볼 수 있습니다. 쉽게 말해, 이들은 독립적으로 학습하고, 추론하며, 행동할 수 있는 매우 지능적인 의사결정 엔진이라고 생각하면 됩니다. 이러한 기술의 궁극적인 목표는 진정으로 자율적인 AI 애플리케이션을 만드는 것입니다.

핵심 구성 요소: 

에이전트 애플리케이션은 다음과 같은 주요 구성 요소로 이루어집니다:

  • LLM/중앙 에이전트: 워크플로우의 중심에서 핵심적인 의사결정을 담당합니다.
  • 메모리: 과거의 대화 내용과 에이전트가 이전에 제공한 응답들을 저장하고 관리합니다.
  • 계획: 에이전트가 앞으로 수행할 작업을 체계적으로 구상하는 중요한 구성 요소입니다.
  • 도구: 특정 작업을 수행하고 주요 LLM과 상호작용하는 다양한 함수과 프로그램들을 포함합니다.

중앙 에이전트 (Central Agent):  

에이전트 프레임워크의 핵심은 데이터를 처리하고 이해할 수 있는 사전 학습된 범용 대규모 언어 모델입니다. 이러한 모델들은 대개 고성능의 사전 학습 모델로, 이들과 상호작용하기 위해서는 특정한 프롬프트를 작성해야 합니다. 이 프롬프트를 통해 필수적인 맥락을 제공하고, 응답 방식, 사용할 도구, 그리고 상호작용 중 달성해야 할 목표 등을 안내합니다.

에이전트 프레임워크의 장점 중 하나는 사용자 정의가 가능하다는 점입니다. 이를 통해 모델에 고유한 정체성을 부여할 수 있으며, 특정 작업이나 상호작용의 요구사항에 맞춰 모델의 특성과 전문성을 조정할 수 있습니다. 결과적으로, LLM 에이전트는 고급 데이터 처리 능력과 맞춤형 기능을 완벽하게 결합하여, 다양한 작업을 정밀하고 유연하게 처리할 수 있는 강력한 도구로 자리잡게 됩니다.

메모리 (Memory):  

메모리는 에이전트 아키텍처의 핵심 구성 요소입니다. 이는 에이전트가 대화 내용을 저장하는 공간으로, 크게 두 가지 유형으로 나눌 수 있습니다. 첫째, 단기 작업 메모리입니다. 이는 LLM 에이전트가 현재 정보를 즉각적인 맥락으로 유지하고, 작업이 완료되면 내용을 지우는 임시 저장소입니다. 둘째, 장기 메모리(또는 에피소드 메모리)입니다. 이는 장기간의 대화를 저장하여 에이전트가 패턴을 이해하고, 과거 경험에서 학습하며, 미래 상호작용에서 더 나은 결정을 내리는 데 도움을 줍니다. 이러한 대화 내용은 주로 벡터 데이터베이스와 같은 외부 저장소에 보관됩니다.

이 두 가지 메모리를 효과적으로 활용함으로써, 에이전트는 시간이 지남에 따라 사용자의 선호도를 반영한 맞춤형 응답을 제공하고 더욱 효율적으로 작동하게 됩니다. 단, 에이전트의 메모리와 LLM의 대화 메모리(conversational memory)는 서로 다른 목적을 가지고 있으므로 혼동하지 않도록 주의해야 합니다.

플래너 (Planner): 

LLM 에이전트의 중요한 구성 요소 중 하나는 복잡한 작업을 관리 가능한 단위로 나누고 각 단위를 실행하는 데 도움을 주는 계획 수립 기능입니다. 계획을 세우는 과정에서 플래너는 연쇄적 사고 추론(chain-of-thought)이나 의사결정트리와 같은 계층적 추론 등 다양한 추론 기법을 활용하여 최적의 경로를 선택합니다.

계획이 수립되면, 에이전트들은 여러 내부 피드백 메커니즘을 통해 그 효과성을 검토하고 평가합니다. 대표적인 방법으로는 ReActReflexion 등이 있습니다. 이러한 방법들을 통해 LLM은 일련의 사고 과정을 거치며 결과를 관찰함으로써 복잡한 작업을 해결해 나갑니다. 이 과정을 반복하면서 점진적으로 성능을 개선해 나가게 됩니다.

일반적인 다중 대화 챗봇에서는 단일 LLM 에이전트가 계획과 조정을 담당하지만, 다중 에이전트 프레임워크에서는 라우팅이나 계획 등 특정 작업을 수행하는 별도의 에이전트가 존재할 수 있습니다. 이에 대해서는 다음 블로그 시리즈에서 다중 에이전트 프레임워크를 다룰 때 더 자세히 설명하도록 하겠습니다.

도구 (Tools): 

도구는 에이전트의 중요한 구성 요소로, 중앙 핵심 에이전트의 지시에 따라 다양한 작업을 수행합니다. 이는 API 호출, 파이썬 또는 SQL 함수, 웹 검색, 코딩, Databricks Genie space 등 다양한 형태의 작업 실행자가 될 수 있습니다. 이러한 도구들을 통합함으로써 LLM 에이전트는 워크플로우를 따라 특정 작업을 수행하고, 관찰 결과(observation)를 수집하며, 하위 작업 완료에 필요한 정보를 얻을 수 있습니다.

이런 애플리케이션을 구축할 때 주의해야 할 점은 상호작용의 지속 시간입니다. 장기간 이어지는 상호작용에서는 오래된 대화를 잊을 가능성이 있어 LLM의 컨텍스트 한계를 쉽게 초과할 수 있습니다. 사용자와의 긴 대화 중 결정 흐름의 제어는 단일 스레드, 병렬 멀티 스레드, 또는 루프 형태로 이루어질 수 있으며, 결정 체인이 복잡해질수록 그 구현도 복잡해집니다.

그림 1에서 볼 수 있듯이, 단일 고성능 LLM이 의사결정의 중심 역할을 합니다. 사용자의 질문을 바탕으로 어떤 경로로 의사결정 흐름을 라우팅할지 판단합니다. 이 과정에서 여러 도구를 활용하여 특정 작업을 수행하고, 중간 결과를 메모리에 저장하며, 이후 계획을 수립하고 최종적으로 결과를 사용자에게 전달할 수 있습니다.

단일 고성능 LLM이 결정을 내리는 데 핵심입니다. 사용자의 질문에 따라, 결정 흐름을 라우팅해야 하는 경로를 이해합니다. 특정 작업을 수행하기 위해 여러 도구를 활용하고, 중간 결과를 메모리에 저장하고, 후속 계획을 수립하고, 마지막으로 결과를 사용자에게 반환할 수 있습니다.

온라인 소매 업체를 위한 대화형 에이전트: 

이 블로그에서는 Mosaic AI 에이전트 프레임워크를 활용해 온라인 전자제품 소매업체를 위한 자율적인 고객 서비스 AI 어시스턴트를 개발하는 과정을 소개합니다. 이 어시스턴트는 고객과 실시간으로 상호작용하며 질문에 답변하고 고객의 요청에 따라 다양한 작업을 수행합니다. 필요에 따라 응답의 정확성을 높이기 위해 인간 전문가의 검토 과정(human-in-the-loop)을 도입할 수도 있습니다. 우리는 Mosaic AI의 도구 기능을 활용하여 Unity Catalog에 필요한 도구들을 생성하고 등록할 예정입니다. 이를 통해 AI 어시스턴트가 다양한 기능을 수행할 수 있도록 지원합니다. 본문에서는 이 프로젝트를 위해 특별히 구축한 엔터티 관계도(합성 데이터 기반)를 함께 제시하여 시스템의 구조를 보다 명확히 이해할 수 있도록 돕겠습니다

엔티티 관계 다이어그램

아래는 우리의 유즈케이스에 대한 간단한 프로세스 흐름도입니다.

간단한 에이전트 프레임워크 프로세스 흐름

코드 스니펫: (SQL) 주문 상세 정보

다음 코드는 사용자가 입력한 주문 ID를 바탕으로 해당 주문의 세부 정보를 조회합니다. 이 코드에서 특히 주목해야 할 점은 함수의 입력 필드와 주석(comment) 필드에 대한 설명입니다. 함수와 매개변수에 대한 주석은 매우 중요한 역할을 합니다. 이는 LLM이 함수나 도구를 정확하게 호출하는 데 필수적인 요소이므로 반드시 포함해야 합니다.

이러한 주석은 중앙 LLM이 사용자의 질문에 따라 어떤 함수를 실행할지 결정하는 데 사용되는 메타데이터 매개변수로 활용됩니다. 주석이 부정확하거나 불충분할 경우, LLM이 잘못된 함수나 도구를 실행하게 될 수 있으므로 주의가 필요합니다. 따라서 코드를 작성할 때는 함수의 목적, 입력값, 출력값 등에 대해 명확하고 상세한 주석을 달아주는 것이 중요합니다. 이는 AI 시스템의 정확성과 효율성을 높이는 데 크게 기여할 것입니다.

코드 스니펫: (SQL) 배송 상세 정보 

이 함수는 사용자가 제공한 ID를 사용하여 배송 테이블에서 해당 배송의 상세 정보를 조회합니다. 앞서 설명한 주문 상세 정보 함수와 마찬가지로, 이 함수에서도 메타데이터의 주석(comment)과 세부 정보가 매우 중요한 역할을 합니다.

코드 스니펫: (Python) 

마찬가지로, 필요에 따라 Python 함수를 만들어 도구나 기능으로 활용할 수 있습니다. 이러한 Python 함수도 앞서 설명한 SQL 함수와 동일한 방식으로 Unity Catalog에 등록할 수 있으며, 이를 통해 앞서 언급한 모든 장점을 그대로 누릴 수 있습니다. 아래에 제시된 예제는 우리가 개발한 웹 검색 도구입니다. 이 도구는 AI 에이전트가 필요할 때 호출할 수 있는 엔드포인트로 기능합니다. 이를 통해 에이전트는 웹에서 필요한 정보를 검색하고 활용할 수 있게 됩니다.

우리의 유즈케이스에서는 다음과 같이 다양한 작업을 수행하는 여러 도구를 개발했습니다:

작업 수행 도구

return_order_details

주어진 주문 ID에 대한 주문 세부 정보를 반환

return_shipment_details

제공된 배송 ID에 대한 배송 세부 정보를 반환

return_product_details

제품 ID가 주어진 경우 제품 세부 정보를 반환

return_product_review_details

비구조화된 데이터에서 리뷰 요약을 반환

search_tool

키워드 기반으로 웹을 검색하고 결과를 반환

process_order

사용자 요청에 따라 환불 요청 처리

 

Unity Catalog UCFunctionToolkit :

우리는 LangChain 오케스트레이터를 활용하여 Databricks UCFunctionToolkit과 기본 API 모델을 통합한 Chain 프레임워크를 개발할 예정입니다. 에이전트 구축에는 다양한 오케스트레이터 프레임워크를 사용할 수 있지만, UC Functions(tools)를 이용한 에이전트 개발을 위해서는 UCFunctionToolkit이 필수적입니다.

d

에이전트 생성:

이제 우리가 준비한 도구들을 Databricks에서 제공하는 대규모 언어 기반 모델과 통합할 차례입니다. 물론 AI Gateway를 통해 자체 개발한 모델이나 외부 모델을 활용할 수도 있습니다. 하지만 이 블로그에서는 Databricks가 호스팅하는 'databricks-meta-llama-3-1-70b-instruct' 모델을 사용하겠습니다.

이 모델은 Meta에서 개발한 오픈소스 모델로, Databricks 환경에서 우리가 만든 도구들을 효과적으로 활용할 수 있도록 최적화되어 있습니다. 다만 모든 모델의 성능이 동일하지 않으며, 각 모델마다 도구를 사용하는 능력에 차이가 있을 수 있다는 점을 염두에 두어야 합니다.

이제 우리의 대규모 언어 모델(LLM)이 준비되었으니, LangChain 에이전트 실행기를 활용하여 모든 요소를 통합하고 에이전트를 구축해 보겠습니다:

실제 작동 방식을 이해하기 위해 샘플 질문을 살펴보겠습니다:

고객의 입장에서 에이전트에게 "Breville 전기 주전자"의 가격을 회사 내부와 외부 시장을 비교해달라고 요청했습니다.

이 질문을 바탕으로 에이전트는 두 가지 기능/도구를 실행하기로 결정했습니다:

  • return_product_price_details -  내부 가격 조회용
  • web_search_tool 웹 검색용 

아래 스크린샷은 사용자의 질문에 따라 이 두 도구가 순차적으로 실행되는 과정을 보여줍니다.

최종적으로, 에이전트는 이 두 함수/도구로부터 얻은 정보를 종합하여 답변을 생성하고 아래와 같은 응답을 제공합니다. 에이전트가 자동으로 적절한 함수를 이해하고 실행하여 사용자의 질문에 답변한 것입니다. 정말 놀랍지 않나요?

사용자의 질문��에 기반한 다른 도구들의 순차적 실행입니다.

또한 MLflow Trace를 통해 에이전트 실행 과정을 처음부터 끝까지 상세히 추적할 수 있습니다. 이 기능은 디버깅 작업에 매우 유용하며, 각 단계가 어떻게 진행되는지 명확하게 보여줍니다.

 MLflow Trace를 통한 에이전트 실행의 종단 간 추적

메모리: 

에이전트를 구축할 때 가장 중요한 요소 중 하나는 상태(state)와 기억(memory)입니다. 앞서 언급했듯이, 각 함수는 결과를 반환하며, 이상적으로는 이전 대화를 기억하여 여러 차례 대화를 이어갈 수 있어야 합니다. 이는 다양한 오케스트레이터 프레임워크를 통해 여러 방식으로 구현할 수 있습니다. 이번 사례에서는 LangChain Agent Memory를 활용하여 다중 대화가 가능한 챗봇을 만들어보겠습니다.

LangChain과 Databricks FM API를 어떻게 활용하여 이를 구현할 수 있는지 살펴보겠습니다. 기존의 에이전트 실행기를 기반으로 하여 LangChain ChatMessageHistory와 RunnableWithMessageHistory를 메모리에 추가할 것입니다.

여기서는 데모를 위해 인메모리 채팅을 사용합니다. 메모리가 인스턴스화되면 이를 에이전트 실행기에 추가하고, 아래와 같은 채팅 기록을 가진 에이전트를 생성합니다. 새로운 에이전트가 어떻게 반응하는지 살펴보겠습니다.

이제 에이전트 실행기를 정의했으니, 에이전트에게 추가 질문을 해보며 대화를 잘 기억하고 있는지 확인해봅시다. 여기서 session_id에 주목해 주세요. 이는 현재 진행 중인 대화를 유지하는 메모리 스레드 역할을 합니다.

에이전트 채팅 기록

에이전트 채팅 기록

좋아요! 이제 에이전트가 사용자의 이전 대화를 모두 기억하고 후속 질문에 대해 정확하게 응답할 수 있게 되었습니다. 에이전트 생성 방법과 대화 이력 유지 방법을 이해했으니, 이제 완전한(end-to-end) 대화형 챗봇 에이전트의 작동 방식을 살펴보겠습니다.

Databricks AI Playground를 활용하여 전체적인 모습을 확인해 보겠습니다. Databricks AI Playground는 다양한 대규모 언어 모델(LLM)을 테스트하고, 프롬프트를 입력하며, 결과를 비교할 수 있는 대화형 환경입니다. 더불어, 우리가 방금 만든 에이전트를 서비스 엔드포인트로 제공하고 Playground에서 직접 에이전트의 성능을 테스트할 수 있습니다

멀티턴 대화형 챗봇: 

Databricks Mosaic AI Agent Framework, Databricks Foundational Model API, 그리고 LangChain 오케스트레이터를 활용하여 우리만의 AI 에이전트를 개발했습니다.

아래 영상은 Meta-llama-3-1-70b-instruct 모델을 기반으로 구축한 멀티턴 에이전트와 Databricks의 UC 함수/도구 간의 상호작용을 보여줍니다.

이 영상에서는 고객과 에이전트 사이의 대화 흐름을 확인할 수 있습니다. 에이전트는 고객의 연속된 질문들을 바탕으로 적절한 도구를 실시간으로 선택하고 실행하여 원활한 고객 지원을 제공합니다.

다음은 온라인 소매업체를 위해 새롭게 개발한 에이전트와 고객 간의 대화 내용입니다.

우리의 온라인 소매점을 위해 새롭게 구축한 에이전트와 고객의 대화 흐름.

고객이 이름을 통해 주문 상태를 문의하는 것부터 주문을 완료하는 단계까지, 모든 과정이 사람의 개입 없이 자동으로 처리됩니다.

에이전트 데모

결론: 

이제 마무리입니다! 몇 줄의 코드로 고객을 대신해 대화하고, 추론하며, 행동할 수 있는 자율적인 멀티턴 에이전트의 힘을 활용할 수 있었습니다. 그 결과는? 수동 작업이 크게 줄어들고 자동화가 크게 향상되었습니다. 하지만 이제 시작에 불과합니다! Mosaic AI Agent Framework는 Databricks에서 무한한 가능성의 문을 열었습니다.

다음 편을 기대해주세요. 이번에는 다중 에이전트 AI를 활용해 여러 에이전트가 협력하여 가장 복잡한 작업도 해결하는 방법을 다룰 예정입니다. 또한, MLflow와 모델 서빙 엔드포인트를 통해 이를 배포하는 방법도 보여드릴 것입니다. 이를 통해 데이터 거버넌스를 유지하면서 프로덕션 규모의 에이전트 애플리케이션을 쉽게 구축할 수 있습니다. AI의 미래는 이제 시작되었으며, 클릭 한 번으로 그 가능성을 경험할 수 있습니다.

--

이제 마무리 단계에 도달했습니다! 몇 줄의 코드만으로 고객을 대신해 대화하고, 추론하며, 행동할 수 있는 자율적인 다중 대화형 에이전트의 힘을 경험해보셨습니다. 그 결과는 놀랍습니다. 수동 작업이 대폭 줄어들고 자동화 수준이 크게 향상되었습니다. 하지만 이는 시작에 불과합니다! Mosaic AI Agent Framework는 Databricks 플랫폼에서 무한한 가능성의 문을 열어주었습니다.

다음 편에서는 더욱 흥미진진한 내용을 다룰 예정입니다. 여러 에이전트가 협력하여 가장 복잡한 작업도 해결하는 다중 에이전트 AI 시스템을 소개하겠습니다. 또한, MLflow와 모델 서빙 엔드포인트를 활용해 이를 실제 환경에 배포하는 방법도 상세히 설명드릴 것입니다. 이를 통해 데이터 거버넌스를 유지하면서도 프로덕션 규모의 에이전트 애플리케이션을 손쉽게 구축할 수 있음을 보여드리겠습니다. AI의 미래는 이제 막 시작되었으며, 여러분은 단 한 번의 클릭으로 그 놀라운 가능성을 직접 경험하실 수 있습니다.

 

참고 문헌 & 자료: 

Mosaic AI: Build and Deploy Production-quality AI Agent Systems 

Announcing Mosaic AI Agent Framework and Agent Evaluation | Databricks Blog 

Mosaic AI Agent Framework | Databricks 

The Shift from Models to Compound AI Systems – The Berkeley Artificial Intelligence Research Blog 

React: Synergizing reasoning and acting in language models 

Reflexion: Language agents with verbal reinforcement learning 

Reflection Agents 

LLM agents: The ultimate guide | SuperAnnotate 

Memory in LLM agents - DEV Community 

A Survey on Large Language Model based Autonomous Agents arXiv:2308.11432v5 [cs.AI] 4 Apr 2024 

How to run multiple agents on the same thread

 

(번역: Youngkyong Ko, Kyoungtae Hwang)  Original Post

 

게시물을 놓치지 마세요

관심 있는 카테고리를 구독하고 최신 게시물을 받은편지함으로 받아보세요