이 글에서는 Databricks Data Intelligence Platform을 활용하여 실제 운영 환경에 적합한 Agent System 애플리케이션을 개발하는 방법을 상세히 설명하겠습니다. Agent System은 다양한 AI와 생성형 AI 모델을 조율하여 복잡한 작업을 수행하는 시스템을 말합니다. 구체적으로 벡터 검색, 모델 서빙, AI 게이트웨이, 온라인 테이블, 유니티 카탈로그와 같은 플랫폼 기능들을 활용하는 방법을 다룰 예정입니다. 또한, 평가 중심 개발 방법론을 적용하여 에이전트 애플리케이션을 신속하게 구축하고, 모델의 품질을 지속적으로 개선하는 과정을 소개하겠습니다. 이를 통해 효율적이고 고성능의 AI 시스템을 개발하는 방법을 배우실 수 있을 것입니다.
생성형 AI는 기업용 애플리케이션 개발에 혁신적인 이점을 제공합니다. 고급 자연어 처리 기능을 통해 소프트웨어 엔지니어들은 콘텐츠 생성, 데이터 분석, 코드 제안 등 복잡한 작업을 자동화할 수 있어 개발 시간과 운영 비용을 크게 절감할 수 있습니다. 또한 고급 모델을 활용하면 기업들은 더욱 개인화된 사용자 경험을 제공하고, 지능적인 데이터 인사이트로 의사결정을 개선하며, AI 기반 챗봇으로 고객 지원 등의 프로세스를 간소화할 수 있습니다.
하지만 이러한 장점에도 불구하고, 기업 애플리케이션 개발에 생성형 AI를 도입하는 것은 여러 가지 중요한 도전 과제를 수반합니다. 첫째, AI 출력의 정확성과 신뢰성 문제가 있습니다. 생성 모델이 때로는 부정확하거나 편향된 결과를 만들어낼 수 있기 때문입니다. 둘째, AI의 안전하고 윤리적인 사용을 보장하는 것이 중요합니다. 특히 민감한 데이터나 규제가 엄격한 산업에서 AI를 적용할 때는 더욱 그렇습니다. 규제 준수와 보안 취약점 해결은 AI를 대규모로 배포할 때 반드시 고려해야 할 사항입니다.
또한, AI 시스템을 기업 규모로 확장하는 데는 강력한 인프라와 전문 지 식이 필요하며, 이는 상당한 자원 투자를 요구할 수 있습니다. 기존 시스템에 생성형 AI를 통합하는 과정에서 호환성 문제가 발생할 수 있으며, AI 주도 프로세스에서 투명성과 책임을 유지하는 것도 중요하지만 쉽지 않은 과제입니다.
이러한 도전 과제들을 극복하고 생성형 AI의 잠재력을 최대한 활용하기 위해서는 신중한 계획, 지속적인 모니터링, 그리고 윤리적 고려사항을 염두에 둔 접근이 필요합니다. 이를 통해 기업들은 혁신적이면서도 신뢰할 수 있는 AI 솔루션을 개발하고 구현할 수 있을 것입니다.
모자이크 AI 에이전트 프레임워크는 최신 생성형 AI 애플리케이션의 개발, 배포, 평가, 관리를 위한 종합적인 도구 세트를 제공합니다. 데이터브릭스의 데이터 인텔리전스 플랫폼을 기반으로 하는 모자이크 AI는 기업들이 복잡한 AI 시스템을 안전하고 비용 효율적으로 개발할 수 있게 해줍니다. 또한 이를 기업의 기존 데이터 시스템과 원활하게 통합할 수 있도록 지원합니다. 이를 통해 기업은 AI 기술의 혁신적인 잠재력을 최대한 활용하면서도, 데이터 보안과 비용 효율성을 동시에 확보할 수 있습니다.
건강관리 산업에서 '지불자'란 서비스 요금 설정, 지불 수집, 청구 처리, 의료 제공자 지불을 담당하는 조직을 말합니다. 예를 들어 건강보험 제공업체, 메디케어, 메디케이드 등이 여기에 해당합니다. 개인이 의료 서비스나 치료가 필요할 때, 대부분 자신의 보험사 고객 서비스 센터에 전화를 걸어 상황을 설명하고 해당 치료, 서비스, 또는 시술에 대한 예상 비용을 문의합니다.
이러한 비용 계산은 대체로 표준화되어 있어, 사용자로부터 충분한 정보를 얻으면 정확하게 수행할 수 있습니다. 따라서 사용자의 입력에서 관련 정보를 식별하고 정확한 비용을 검색할 수 있는 AI 에이전트 애플리케이션을 개발한다면, 고객 서비스 담당자들이 더 중요한 업무에 집중할 수 있게 될 것입니다.
이 글에서는 모자이크 AI의 다양한 기능(벡터 검색, 모델 서빙, AI 게이트웨이, 온라인 테이블, 유니티 카탈로그 등)을 활용하여 생성형 AI 에이전트 시스템을 구축하는 방법을 소개합니다. 또한 평가 중심 개발 방법론을 적용하여 에이전트 애플리케이션을 신속하게 개발하고, 모델의 품질을 지속적으로 개선하는 과정을 설명할 것입니다.
이 시나리오는 고객이 보험사 포털에 로그인하여 챗봇을 통해 의료 시술 비용을 문의하는 상황을 다룹니다. 우리가 개발할 에이전트 애플리케이션은 Mosaic AI 모델 서빙을 이용해 REST API로 배포됩니다.
에이전트가 질문을 받으면 다음과 같은 절차로 비용을 추정합니다:
실제로는 이 애플리케이션의 데이터는 복잡한 데이터 엔지니어링 과정을 거쳐 생성되지만, 에이전트 애플리케이션의 설계, 개발, 배포에 초점을 맞추기 위해 몇 가지 가정으로 단순화 합니다:
이 솔루션 가속기를 위한 노트북은 여기에서 사용할 수 있습니다.
이 솔루션은 Databricks 데이터 인텔리전스 플랫폼에서 Mosaic AI Agent 프레임워크를 활용하여 구축됩니다. 전체적인 구조는 아래의 상위 레벨 아키텍처 다이어그램을 통해 확인할 수 있습니다.
이 솔루션을 여러 단계로 나누어 구축할 예정이며, 데이터 준비 단계부터 시작하겠습니다. 각 단계별로 상세한 설명과 함께, 실제 구현 과정을 단계적으로 안내해 드리겠습니다. 이를 통해 복잡한 AI 에이전트 시스템을 체계적으로 개발하고, Databricks 플랫폼의 다양한 기능을 효과적으로 활용하는 방법을 배우실 수 있을 것입니다.
다음 섹션들에서는 에이전트 애플리케이션을 위한 데이터 준비 과정을 상세히 설명하겠습니다.
이 에이전트에 필요한 합성 데이터는 다음과 같은 델타 테이블에 저장됩니다:
member_enrolment: 회원의 등록 정보(클라이언트 ID, 플랜 ID 등)를 포함
member_accumulators: 회원의 누적 금액 정보(공제액, 자기부담금 등)를 포함
cpt_codes: CPT(의료행위) 코드와 그에 대한 설명을 포함
procedure_cost: 각 의료 시술에 대한 협상된 비용 정보를 포함
sbc_details: 혜택 요약 PDF에서 추출한 청크들을 포함
각 테이블의 구체적인 구조와 데이터 준비 과정에 대한 자세한 내용은 제공된 노트북을 참조하시기 바랍니다. 이 노트북에서는 데이터 생성, 테이블 구조 설계, 데이터 적재 등의 과정을 단계별로 안내하고 있습니다.
고객 질문과 관련된 적절한 계약 정보를 검색하기 위해서는 먼저 각 고객의 혜택 요약 문서를 델타 테이블로 파싱해야 합니다. 이렇게 파싱된 데이터는 고객 질문을 바탕으로 의미론적 검색을 수행할 수 있도록 벡터 인덱스를 생성하는 데 사용됩니다.
혜택 요약 문서의 구조는 다음과 같다고 가정합니다:
우리의 목표는 이 표 형식의 데이터를 PDF에서 추출하고, 각 항목에 대해 세부 사항을 적절히 포착하는 전문적인 요약을 생성하는 것입니다. 예를 들어:
위 항목에 대해 다음과 같은 두 단락을 생성하고자 합니다:
"진단 테스트(x-레이, 혈액 검사)의 경우, 협력사 내에서는 테스트당 $10의 공제금을 지불하고 외부 시설에서는 40%의 공동보험을 지불합니다."
그리고
"이미징 검사(CT/PET 스캔, MRI)의 경우, 협력사 내에서는 검사당 $50의 공제금을 지불하고 외부 시설에서는 40%의 공동보험을 지불합니다."
주의: 혜택 요약 문서의 형식이 다를 경우, 각 형식에 맞는 추가적인 파이프라인과 파싱 로직을 개발해야 합니다. 청크화 과정에 대한 자세한 설명은 제공된 노트북을 참조하시기 바랍니다.
이 과정의 결과물은 각 혜택 요약 문서의 항목을 별도의 행으로 포함하는 델타 테이블입니다. client_id는 혜택 문단의 메타데이터로 캡처되었으며, 필요에 따라 product_id와 같은 추가 메타데이터를 포함할 수 있습니다. 하지만 이 작업의 범위 내에서는 간단하게 유지하겠습니다.
구현에 대한 자세한 내용은 제공된 노트북의 코드를 참조하시기 바랍니다.
Mosaic AI Vector Search는 Databricks 데이터 인텔리전스 플랫폼에 내장된 벡터 데이터베이스로, 플랫폼의 거버넌스 및 생산성 도구와 긴밀히 통합되어 있습니다. 이 벡터 데이터베이스는 임베딩(텍스트나 이미지 데이터의 의미를 수학적으로 표현한 것)을 효율적으로 저장하고 검색하는 데 최적화되어 있습니다.
이 애플리케이션에서는 두 가지 벡터 인덱스를 생성할 예정입니다:
Mosaic AI에서 벡터 인덱스를 생성하는 과정은 다음 두 단계로 이루어집니다:
이 과정에 대한 자세한 설명과 참조 코드는 제공된 노트북에서 확인하실 수 있습니다.
온라인 테이블은 델타 테이블의 읽기 전용 복사본으로, 온라인 액세스에 최적화된 행 지향 형식으로 저장됩니다. 이는 완전한 서버리스로 운영되며, 요청 부하에 따라 처리 용량을 자동으로 조절합니다. 따라서 데이터의 규모에 관계없이 낮은 지연 시간과 높은 처리량을 제공할 수 있습니다.
온라인 테이블은 Mosaic AI 모델 서빙, 피처 서빙, 그리고 에이전트 애플리케이션과 함께 사용되도록 설계되었으며, 특히 빠른 데이터 조회가 필요한 경우에 유용합니다.
이 프로젝트에서는 member_enrolment, member_accumulators, procedure_cost 테이블에 대한 온라인 테이블을 생성할 예정입니다.
온라인 테이블 생성 과정과 필요한 코드에 대한 자세한 설명은 제공된 노트북에서 확인하실 수 있습니다.
필요한 모든 데이터가 준비되었으므로, 이제 에이전트 애플리케이션 구축을 시작할 수 있습니다. 우리는 평가 주도 개발 방법론을 채택하여 프로토타입을 신속하게 개발하고 그 품질을 지속적으로 개선해 나갈 것입니다.
이 방법론은 모자이크 연구팀이 권장하는 고품질 RAG(Retrieval-Augmented Generation) 애플리케이션 구축 및 평가에 대한 모범 사례를 기반으로 합니다.
Databricks에서 제안하는 평가 중심 워크플로우는 다음과 같습니다:
평가 주도 개발에 대한 더 자세한 내용은 Databricks AI Cookbook에서 확인하실 수 있습니다. 이 방법을 통해 우리는 효율적이고 신뢰할 수 있는 AI 애플리케이션을 개발할 수 있습니다.
에이전트 애플리케이션 개발 과정에서 우리는 특정 작업을 수행하기 위해 여러 함수를 활용할 것입니다. 애플리케이션에 필요한 주요 함수들은 다음과 같습니다:
이러한 함수들은 에이전트가 사용할 수 있는 재사용 가능한 도구로 개발되며, 자율적 또는 엄격한 에이전트 실행 방식과 함께 활용될 수 있습니다.
이 노트북에서 우리는 함수들을 LangChain 도구로 개발하여 LangChain 에이전트나 사용자 정의 PyFunc 모델에서 사용할 수 있도록 할 것입니다.
참고: 실제 환경에서는 이러한 도구들 중 많은 부분이 복잡한 함수이거나 외부 서비스에 대한 REST API 호출일 수 있습니다. 이 노트북의 주요 목적은 기능을 설명하는 것이며, 실제 구현 시에는 다양한 방식으로 확장될 수 있습니다.
평가 중심 개발 방법론에 따라, 우리는 다음과 같은 과정을 거칠 것입니다:
이는 전통적인 ML 개발에서의 하이퍼파라미터 튜닝과 유사한 과정입니다. 우리는 각 도구를 개별적으로 평가하고, 최적의 성능을 보이는 매개변수를 선택할 것입니다.
제공된 노트북에서는 이러한 평가 과정에 대한 상세한 설명과 코드를 확인할 수 있습니다. 단, 이 평가 과정은 기본적인 가이드라인을 제시하는 것이며, 필요에 따라 더 많은 매개변수를 포함하여 확장할 수 있습니다.
에이전트 조립
모든 필요한 도구를 정의했으니, 이제 이들을 하나의 에이전트 시스템으로 통합할 차례입니다.
우리가 개발한 구성 요소들을 LangChain 도구로 만들었기 때문에, AgentExecutor를 사용하여 전체 프로세스를 실행할 수 있습니다. 하지만 이는 매우 기본적인 접근 방식입니다.
응답 지연을 줄이고 정확성을 높이기 위해, 우리는 사용자 정의 PyFunc 모델을 활용하여 에이전트 애플리케이션을 구축할 것입니다. 이 방식을 통해 우리는 더욱 최적화된 성능을 얻을 수 있으며, 완성된 애플리케이션을 Databricks Model Serving에 배포할 수 있습니다.
이러한 접근 방식은 우리의 에이전트 시스템에 더 많은 유연성과 제어력을 제공하며, 실제 운영 환경에서 더 나은 성능을 발휘할 수 있도록 해줍니다.
MLflow Python 함수
MLflow의 Python 함수(PyFunc)는 어떤 종류의 Python 코드나 모델이라도 배포할 수 있는 유연성을 제공합니다. 이 기능은 다음과 같은 상황에서 특히 유용합니다:
이러한 기능을 통해 개발자들은 더욱 복잡하고 맞춤화된 AI 솔루션을 구현할 수 있습니다. Model Serving을 사용하여 Python 코드를 배포하는 방법에 대한 더 자세한 정보는 여기를 통해 확인할 수 있습니다.
CareCostCompassAgent
CareCostCompassAgent
는 우리 에이전트에 필요한 핵심 로직을 구현하는 Python 함수입니다. 이 에이전트의 완전한 구현 내용은 제공된 노트북에서 확인할 수 있습니다.
이 에이전트를 구현하기 위해 우리는 두 가지 필수 함수를 정의해야 합니다:
load_context
- 모델 운영에 필요한 모든 요소를 한 번만 로드하는 함수입니다. 이 함수에서 모든 도구를 초기화하며, 이는 예측 과정에서 로드되는 요소를 최소화하여 추론 속도를 향상시키는 데 중요한 역할을 합니다.predict
- 각 입력 요청마다 실행되는 핵심 로직을 포함하는 함수입니다. 이 함수 내에서 실제 애플리케이션의 주요 기능을 구현하게 됩니다.모델 입력 및 출력
우리의 모델은 채팅 에이전트 형태로 구축되며, 이에 따라 모델 시그니처가 결정됩니다. 요청은 ChatCompletionRequest
형식을 따르게 됩니다.
pyfunc
모델의 데이터 입력은 다양한 형태(Pandas DataFrame, Pandas Series, Numpy Array, List, Dictionary)가 가능하지만, 우리의 구현에서는 Pandas DataFrame을 입력으로 사용할 예정입니다. 채팅 에이전트의 특성상, 이 DataFrame은 mlflow.models.rag_signatures.Message
의 스키마를 따르게 됩니다.
모델의 응답은 간단히 mlflow.models.rag_signatures.StringResponse
형식을 사용할 것입니다.
이러한 입출력 구조를 통해 우리의 채팅 에이전트는 효율적으로 사용자 요청을 처리하고 적절한 응답을 생성할 수 있을 것입니다.
워크플로우
PyFunc 모델의 predict 메소드에서 다음과 같은 워크플로우를 구현할 예정입니다. 응답 지연 시간을 최소화하기 위해 아래의 세 가지 과정을 병렬로 실행할 것입니다:
이러한 병렬 I/O 작업을 효율적으로 처리하기 위해 asyncio
라이브러리를 활용할 예정입니다. 구체적인 구현 코드는 제공된 노트북에서 확인하실 수 있습니다.