주요 컨텐츠로 이동

Mosaic AI Agent Framework를 이용하여 자율적인 AI 어시스턴트 구축

이 포스트 공유하기

Summary

  • LLM 에이전트는 추론, 선제적 사고, 과거 대화 기억, 다양한 도구를 사용하여 응답을 조정하는 복잡한 작업을 수행하기 위해 설계된 차세대 고급 AI 시스템입니다.
  • Mosaic AI Agent Framework는 개발자가 어떤 LLM을 통해서든 프로덕션 규모의 에이전트 시스템을 구축할 수 있게 하며, 사용자 정의를 허용하고 에이전트가 자율적인 결정을 내릴 수 있게 강화합니다.

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

그러나 이는 시작에 불과합니다. "정보 검색 기반 생성(RAG)"은 강력하지만 정적 지식 검색에만 응용이 제한됩니다. 내부 데이터를 기반으로 질문에 답변할 뿐만 아니라 최소한의 인간 개입으로 조치를 취할 수 있는 일반적인 고객 서비스 에이전트를 상상해 보세요. LLM을 사용하면 사용자 쿼리에 단순히 응답하는 것을 넘어 행동할 수 있는 완전 자율 의사결정 애플리케이션을 만들 수 있습니다. 내부 데이터 분석에서 웹 검색에 이르기까지 가능성은 무궁무진합니다.

대규모 언어 모델의 의미 이해와 언어적 능력을 활용하면 사용자 쿼리에 단순히 답변할 뿐만 아니라 "행동"할 수도 있는 완전 자율 의사결정 애플리케이션을 만들 수 있습니다.

Databricks Mosaic AI Agent Framework: 

Databricks는 Mosaic AI Agent 프레임워크를 출시하여 개발자가 어떤 LLM을 통해서든 프로덕션 규모의 에이전트 프레임워크를 구축할 수 있도록 지원합니다. 주요 기능 중 하나는 Databricks에서 도구를 생성하여 RAG 애플리케이션 등 프로덕션 품질의 AI 에이전트를 구축, 배포 및 평가하는 데 도움을 주는 것입니다. 개발자는 다양한 라이브러리를 사용하여 에이전트를 생성하고 로깅할 수 있으며, MLFlow와 통합할 수 있습니다. 에이전트를 매개변수화하여 빠르게 실험하고 개발을 반복할 수 있습니다. 에이전트 추적 기능은 로그를 기록하고, 분석하며, 요청에 대한 에이전트의 응답 방식을 디버깅하고 이해할 수 있도록 도와줍니다.

이 블로그의 첫 부분에서는 에이전트와 그들의 핵심 구성 요소를 탐색하고, 플랫폼에서 가장 성능이 좋은 Databricks 기본 모델(오픈 소스) 중 하나를 사용하여 온라인 소매 회사를 위한 자율적인 멀티턴 고객 서비스 AI 에이전트를 구축할 것입니다. 다음 블로그 시리즈에서는 멀티 에이전트 프레임워크를 탐색하고 동일한 비즈니스 애플리케이션을 위한 고급 다단계 추론 멀티 에이전트를 구축할 것입니다. 

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

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

RAG의 자연스러운 발전으로서, LLM 에이전트는 최첨단 대규모 언어 모델에 외부 시스템/도구 또는 기능을 추가하여 자율적으로 의사결정을 내릴 수 있도록 하는 접근 방식입니다. 복합 AI 시스템에서 에이전트는 메모리, 자기 성찰 능력, 도구 사용 등으로 강화된 의사결정 엔진으로 간주될 수 있습니다. 이들은 독립적으로 학습하고, 추론하며, 행동할 수 있는 슈퍼 스마트 의사결정 엔진이라고 생각하면 됩니다. 궁극적인 목표는 진정한 자율 AI 애플리케이션을 만드는 것입니다.

핵심 구성 요소: 

에이전트 애플리케이션의 주요 구성 요소는 다음과 같습니다: 

  • LLM/중앙 에이전트: 워크플로우의 중앙 결정 요소로 작동합니다. 
  • 메모리: 과거 대화와 에이전트의 이전 응답을 관리합니다. 
  • 계획: 에이전트가 실행할 미래의 작업을 계획하는 핵심 구성 요소입니다. 
  • 도구: 특정 작업을 수행하고 주요 LLM과 상호작용하는 함수와 프로그램입니다. 

중앙 에이전트 (Central Agent):  

에이전트 프레임워크의 주요 요소는 데이터를 처리하고 이해할 수 있는 사전에 학습된 범용 대규모 언어 모델입니다. 이러한 모델은 일반적으로 고성능 사전 학습 모델이며, 이러한 모델과 상호작용하려면 특정 프롬프트를 작성하여 필수 컨텍스트를 제공하고, 응답 방법, 활용 도구 및 상호작용 중 달성해야 할 목표 등을 안내합니다.

에이전트 프레임워크는 사용자 정의를 허용하여 모델에 고유한 정체성을 부여할 수 있게 합니다. 이는 특정 작업이나 상호작용의 요구사항에 더 잘 맞도록 그 특성과 전문성을 맞춤화할 수 있다는 것을 의미합니다. 궁극적으로, LLM 에이전트는 고급 데이터 처리 기능과 사용자 정의 기능을 완벽하게 결합하여 다양한 작업을 정밀하고 유연하게 처리하는 가치 있는 도구가 됩니다.

메모리 (Memory):  

메모리는 에이전트 아키텍처의 중요한 구성 요소입니다. 이는 에이전트가 대화를 저장하는 임시 저장소입니다. 이는 LLM 에이전트가 현재 정보를 즉각적인 맥락으로 유지하고 작업이 완료되면 메모리를 지우는 단기 작업 메모리일 수 있습니다. 이것은 임시적입니다. 

반면에, 장기 메모리(에피소드 메모리라고도 함)도 있습니다. 이는 장기간의 대화를 저장하고, 에이전트가 패턴을 이해하고 이전의 작업에서 배우며, 미래의 상호작용에서 더 나은 결정을 내리기 위해 정보를 회상하는 데 도움이 됩니다. 이 대화는 일반적으로 외부 데이터베이스에 저장됩니다. (예 - 벡터 데이터베이스). 

이 두 가지 메모리를 결합하여 에이전트는 시간이 지남에 따라 사용자 선호에 기반하여 맞춤형 응답을 제공하고 더 잘 작동하게 됩니다. 에이전트의 메모리와 LLM의 대화 메모리(conversational memory)를 혼동하지 마세요. 둘은 각각 다른 목적을 가지고 있습니다.   

플래너 (Planner): 

LLM 에이전트의 다음 구성 요소는 복잡한 작업을 관리 가능한 작업으로 분해하고 각 작업을 실행하는 데 도움이 되는 계획 수립 기능입니다. 계획을 수립하는 동안, 플래너 구성 요소는 chain-of-thought 추론 또는 의사결정트리와 같은 계층적 추론 등의 다양한 추론 기법을 활용하여 어떤 경로를 선택할지 결정할 수 있습니다. 

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

일반적인 멀티턴 챗봇에서는 단일 LLM 에이전트가 계획과 조정(orchestration)을 담당하지만, 멀티 에이전트 프레임워크에서는 라우팅, 계획 등 특정 작업을 수행하는 별도의 에이전트가 있을 수 있습니다. 이에 대해 다음 멀티 에이전트 프레임에 대한 블로그 부분에서 더 자세히 다룰 것입니다.   

도구 (Tools): 

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

이러한 애플리케이션을 구축할 때 고려해야 할 한 가지는 상호 작용이 얼마나 길게 이어지는지입니다. 상호작용이 장기간 진행되고 오래된 대화를 잊을 가능성이 있을 때 LLM의 컨텍스트 한계를 쉽게 소진할 수 있습니다. 사용자와의 긴 대화 동안, 결정 흐름의 제어는 단일 스레드, 병렬 멀티 스레드, 또는 루프로 이루어질 수 있습니다. 결정 체인이 복잡해질수록 그 구현도 복잡해집니다. 

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

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

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

이 블로그에서 우리는 Mosaic AI Agent Framework를 활용하여 온라인 전자 제품 소매업체를 위한 자율 고객 서비스 AI 어시스턴트를 만들 것입니다. 이 어시스턴트는 고객과 상호 작용하며 질문에 답하고 사용자 지시에 따라 작업을 수행합니다. 응답을 검증하기 위해 인간이 개입하는 방식(human-in-loop)을 도입할 수도 있습니다. Mosaic AI의 tools 기능을 사용하여 Unity Catalog에 도구를 생성하고 등록할 것입니다. 아래는 블로그를 위해 구축한 엔터티 관계(합성 데이터)입니다.

엔티티 관계 다이어그램

아래는 우리의 사용 사례에 대한 간단한 프로세스 흐름도입니다.

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

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

아래 코드는 사용자가 제공한 주문 ID를 기반으로 주문 세부 정보를 반환합니다. 함수의 입력 필드와 comment 필드에 대한 설명에 주목하세요. 함수와 매개변수에 대한 주석(comments)은 매우 중요하며, LLM이 함수나 도구를 올바르게 호출하기 위해 반드시 포함해야 합니다.

주석은 중앙 LLM이 사용자 쿼리에 따라 실행할 함수를 결정하는 메타데이터 패러미터로 사용됩니다. 잘못되거나 불충분한 주석은 LLM이 잘못된 함수/도구를 실행하게 할 수 있습니다.

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

이 함수는 주어진 ID를 이용해 배송 테이블에서 배송 상세 정보를 반환합니다. 위와 비슷하게, 메타데이터의 주석(comment)과 세부 정보는 에이전트가 도구와 상호작용하는 데 중요합니다.

코드 스니펫: (Python) 

마찬가지로, 원하는 Python 함수를 생성하여 도구 또는 함수로 사용할 수 있습니다. 해당 함수는 Unity Catalog에 동일한 방식으로 등록할 수 있으며, 위에서 언급한 모든 이점을 제공합니다. 아래는 우리가 구축한 웹 검색 도구의 예제로, 에이전트가 호출할 수 있는 엔드포인트로 사용되고 있습니다.

우리의 사용 사례에서는 다음과 같이 다양한 작업을 수행하는 여러 도구를 생성했습니다:

작업 수행 도구

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

에이전트 생성:

이제 우리의 도구들(tools)이 준비되었으므로, 이를 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를 통해 에이전트 실행의 end-to-end 추적을 볼 수 있습니다. 이는 디버깅 과정에 매우 도움이 되며, 각 단계가 어떻게 실행되는지에 대한 명확성을 제공합니다. 

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

메모리: 

에이전트를 구축하는 데 있어 중요한 요소 중 하나는 그 상태(state)와 기억(memory)입니다. 위에서 언급한 것처럼, 각 함수는 출력을 반환하며, 이상적으로는 이전 대화를 기억하여 멀티턴 대화를 할 수 있어야 합니다. 이는 다양한 오케스트레이터 프레임워크를 통해 여러 가지 방법으로 구현할 수 있습니다. 이 사례에서, 우리는 LangChain Agent Memory를 사용하여 멀티턴 대화형 봇을 구축할 것입니다

LangChain과 Databricks FM API를 통해 이를 어떻게 달성할 수 있는지 살펴보겠습니다. 이전의 에이전트 실행기를 활용하고 LangChain ChatMessageHistory 와 RunnableWithMessageHistory를 메모리에 추가하겠습니다. 

여기서는 데모 목적으로 인메모리 채팅을 사용하고 있습니다. 메모리가 인스턴스화되면, 우리는 그것을 우리의 에이전트 실행기에 추가하고 아래의 채팅 기록을 가진 에이전트를 생성합니다. 새로운 에이전트로 어떤 반응이 나오는지 봅시다.

이제 에이전트 실행기를 정의했으니, 에이전트에게 후속 질문을 해보고 대화를 기억하는지 확인해봅시다. session_id 를 유의하세요. 이것은 진행 중인 대화를 유지하는 메모리 스레드입니다.

에이전트 채팅 기록

에이전트 채팅 기록

좋아요! 이는 사용자의 이전 대화를 모두 기억하고, 후속 질문을 아주 잘 실행할 수 있습니다! 이제 에이전트를 만드는 방법과 그 이력을 유지하는 방법을 이해했으니, end-to-end 대화 챗봇 에이전트가 어떻게 작동하는지 봅시다. 

우리는 Databricks AI Playground 를 활용하여 end-to-end로 어떻게 보이는지 확인할 것입니다. 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: 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)  Original Post

 

Databricks 무료로 시작하기

관련 포스트

Mosaic AI Agent Framework 과 Agent Evaluation 발표

데이터브릭스는 2024 데이터 + AI 서밋에서 Generative AI Cookbook 과 함께 모자이크 AI Agent Framework 와 Agent Evaluation 의 공개 프리뷰를 발표 했습니다...

Mosaic AI: 프로덕션 품질의 컴파운드 AI 시스템 구축 및 배포

June 12, 2024 작성자: Patrick Wendell, Naveen Rao in
지난 한 해 동안 일반 지식 작업에 대한 강력한 추론 능력을 보여주는 상용 및 오픈 소스 기반 모델이 급증했습니다. 이러한 일반 모델도 중요한...
모든 생성형 AI 포스트 보기