FiftyOne, LlamaIndex, Milvus로 더 나은 멀티모달 RAG 파이프라인 구축하기
소개
최근 Zilliz가 주최한 Unstructured Data Meetup에서 Voxel51의 머신러닝 엔지니어이자 개발자 에반젤리스트인 Jacob Marks는 FiftyOne, LlamaIndex, Milvus를 사용해 견고한 멀티모달 RAG 파이프라인을 구축하는 복잡한 과정에 대해 논의했습니다.
이 발표는 데이터를 활용해 더 나은 멀티모달 RAG 파이프라인을 구축하는 방법에 초점을 맞췄습니다. 특히 데이터 관리와 시각화를 위한 FiftyOne, 벡터 저장소로서의 Milvus, 대규모 언어 모델(LLMs)을 오케스트레이션하기 위한 LlamaIndex를 활용하는 등 무료 오픈 소스 도구 사용을 강조했습니다.
멀티모달 RAG를 살펴보기 전에, 먼저 일반적인 RAG의 개요를 살펴보겠습니다.
텍스트 기반 맥락에서의 RAG 개요
Jacob은 텍스트 기반 Retrieval Augmented Generation(RAG)과 그 작동 방식을 설명하며 시작합니다. 텍스트 기반 RAG 시스템은 이미 이 4부작 RAG 핸드북에서 자세히 다뤘으므로 여기서는 간단히 살펴보겠습니다.
RAG는 관련 외부 데이터로 지식을 보강하여 대규모 언어 모델(LLMs)의 역량을 향상시킵니다. LLM은 방대한 데이터셋으로 학습되었음에도 불구하고 지식 기준 시점 제한과 환각 같은 한계를 종종 갖습니다. RAG는 Milvus나 Zilliz Cloud와 같은 외부 벡터 데이터베이스에서 관련 문서를 검색하고 통합함으로써 이러한 문제를 완화하고, 사용자에게 더 정확하고 맥락적으로 관련성 높은 응답을 제공합니다.
텍스트 기반 RAG 시스템의 아키텍처는 간단합니다. RAG 프로세스를 살펴보겠습니다.
Retrieval Augmented Generation (RAG)
그림 1: LLM과 벡터 데이터베이스를 통합하는 RAG 프로세스
위 다이어그램에서 문서는 더 작은 텍스트 세그먼트로 청킹된 다음, vector embeddings라고 알려진 수치 표현으로 변환됩니다. 이러한 임베딩은 Milvus와 같은 벡터 데이터베이스에 저장됩니다.
사용자가 프롬프트를 제공하면, 이 역시 벡터 임베딩으로 변환되어 가장 관련성 높은 텍스트 구절을 찾기 위해 벡터 데이터베이스를 쿼리하는 데 사용됩니다. 이러한 관련 구절은 원래 프롬프트와 결합되어 LLM을 위한 맥락이 풍부한 입력을 형성합니다. 마지막으로 LLM은 이 입력을 처리해 더 정확하고 맥락적으로 관련성 높은 응답을 생성합니다.
이 접근 방식은 텍스트에만 의존하는 시스템에 매우 효과적입니다. 그러나 정보에 기반한 결정을 내리기 위해 여러 데이터 유형이 필요한 시스템에는 텍스트 기반 RAG 시스템만으로는 충분하지 않습니다. 예를 들어 전자상거래 상점을 생각해 보세요. 사용자에게 가장 관련성 높은 제품을 제시하기 위해 텍스트에만 의존할 수는 없습니다. 제품 이미지, 설명 등 더 많은 요소가 필요합니다. 바로 여기서 Multimodal RAG가 매우 유용해지며, 최신 멀티모달 LLM을 활용해 다양한 데이터 모달리티를 통합합니다.
멀티모달 LLM과 그 응용 분야란 무엇인가
GPT-4o 및 Qwen-VL과 같은 멀티모달 LLM은 텍스트, 이미지, 오디오, 비디오 등 여러 데이터 유형을 처리하고 이해할 수 있는 인공지능 시스템입니다. 이들은 다양한 모달리티의 정보를 통합하고 해석하여 이미지에 대한 설명 캡션을 생성하고, 비디오에 관한 질문에 답하며, 텍스트와 시각적 요소를 결합한 콘텐츠를 만들 수 있습니다. 이러한 역량을 통해 다양한 입력 데이터 유형을 바탕으로 맥락적으로 더욱 풍부한 응답을 더 잘 이해하고 생성할 수 있습니다.
이들은 의료 서비스, 리테일 등 다양한 도메인에 적용됩니다.
의료 서비스 산업에는 의료 도메인의 시각적 의료 이미지, 텍스트 기반 임상 노트, 의료 보고서가 있습니다. 멀티모달 LLM은 이러한 멀티모달 정보를 종합하여 의사들의 업무를 돕습니다. 예로 Med-PaLM LLM이 있는데, 이는 텍스트 및 시각 데이터를 모두 활용하여 의료 의사결정을 향상시키고 환자 치료 결과를 개선합니다.
리테일에서는 멀티모달 LLM이 맞춤형 광고를 만들고 제품 검색 기능을 향상시킵니다. 이들은 텍스트 설명, 제품 이미지, 고객 상호작용 데이터(예: 리뷰 및 검색 쿼리)와 같은 다양한 유형의 데이터를 처리하고 통합합니다. 이러한 멀티모달 정보를 분석함으로써, 이 LLM들은 개인의 선호도와 탐색 기록에 맞춘 개인화된 광고를 생성할 수 있습니다.
이러한 고급 기능에도 불구하고, 멀티모달 LLM은 텍스트 기반 LLM과 동일한 한계를 가지고 있습니다. 지식 컷오프와 환각 문제가 발생합니다. 이러한 문제를 완화하려면 멀티모달 RAG가 필요합니다.
멀티모달 RAG 이해하기
멀티모달 RAG는 정보 검색과 생성 모델링을 결합하여 멀티모달 LLM의 역량을 향상시키는 고급 AI 기법입니다. 멀티모달 RAG가 어떻게 작동하는지 이해하기 위해, 다음 멀티모달 RAG 검색 파이프라인을 살펴보겠습니다.
그림 2- 멀티모달 RAG 검색 파이프라인
그림 2: 멀티모달 RAG 검색 파이프라인
사용자가 질문을 하면, 임베딩 모델이 먼저 쿼리를 임베딩으로 변환합니다. 그런 다음 이 임베딩은 텍스트와 이미지를 포함한 관련 문서의 임베딩을 저장하는 Milvus와 같은 멀티모달 벡터 데이터베이스를 쿼리하는 데 사용됩니다. 벡터 데이터베이스는 질문과 가장 가까운 이웃, 즉 본질적으로 가장 관련성 높은 문서를 검색합니다. 검색된 문서는 원래 질문과 결합되어 텍스트 및 시각적 맥락을 모두 포함하는 멀티모달 프롬프트를 형성합니다. 그런 다음 멀티모달 LLM이 이 풍부해진 프롬프트를 처리하여 다양한 데이터 유형을 통합하고, 더 정확하고 맥락적으로 관련성 높은 답변을 생성합니다.
다음 섹션에서는 FiftyOne, LLamaIndex, Milvus를 사용하여 멀티모달 RAG 파이프라인을 구현하는 방법을 직접 실습해 보겠습니다.
FiftyOne, LLamaIndex, Milvus를 사용한 멀티모달 RAG 파이프라인 구현
FiftyOne, LLamaIndex, Milvus를 사용하여 멀티모달 RAG 파이프라인을 구현하는 방법은 두 가지가 있습니다. 하나는 직접 코드를 작성하는 것으로, 더 많은 제어권을 제공하지만 시간이 더 걸립니다. 다른 하나는 FiftyOne App에 기능을 추가할 수 있게 해주는 플러그인을 사용하는 것입니다.
이 섹션에서는 Milvus 벡터 데이터베이스로 구동되는 fiftyone-multimodal-rag-plugin을 사용하여 멀티모달 RAG 파이프라인을 구현하는 방법을 살펴보겠습니다. 처음부터 코딩하고 싶다면, Milvus와 FiftyOne으로 멀티모달 벡터 임베딩 생성하기에 대한 초보자 가이드를 참고하세요.
환경 설정
Jacob은 강연에서 설치된 멀티모달 플러그인으로 데모를 진행합니다. 데모나 GitHub의 플러그인 설치 가이드 어느 쪽에서도 중요한 설치 단계가 명시적으로 언급되지 않았으므로, 이를 좀 더 천천히 살펴보겠습니다. 바로 Milvus 설치 단계입니다.
플러그인을 사용하려면 컴퓨터에서 Milvus 인스턴스가 이미 실행 중이어야 합니다. Fiftyone 플러그인은 멀티모달 임베딩을 저장하고 검색하기 위해 Milvus에 의존합니다. 플러그인은 Milvus가 http://localhost:19530에서 실행 중이라고 가정합니다. Milvus가 설치되어 있지 않다면, Milvus 문서에 따라 설치하고 실행하세요.
Milvus를 설치하고 실행한 후, 이 설치 가이드라인에 따라 fiftyone-multimodal-rag-plugin을 설치하고 구성하세요. 설정이 완료되면 FiftyOne 앱을 실행하고 사용 가능한 작업을 살펴보며 플러그인이 제공하는 기능을 확인하세요.
그림 3- FiftyOne 사용 가능한 작업 선택 페이지
그림 3: FiftyOne 사용 가능한 작업 선택 페이지
이제 RAG 파이프라인을 만들어 보겠습니다.
1단계: LLamaIndex 문서에서 데이터셋 생성
이 단계에서는 컴퓨터에서 이미지와 텍스트 파일이 포함된 폴더를 선택합니다. 이 멀티모달 데이터를 임베딩하고 멀티모달 임베딩을 Milvus에 저장합니다. 데이터셋 폴더를 로드하려면 Create a Dataset from the LLamaIndex Documents 작업을 선택하세요. 그런 다음 데이터셋의 이름을 지정하고 해당 디렉터리를 선택하세요.
그림 4- LLamaIndex 문서에서 데이터셋 생성
그림 4: LLamaIndex 문서에서 데이터셋 생성
데이터셋을 로드하고 시각화하려면 Execute를 클릭하세요.
그림 5- FiftyOne에서 멀티모달 데이터셋 시각화
그림 5: FiftyOne에서 멀티모달 데이터셋 시각화
시각화에서 데이터셋이 이미지와 텍스트로 구성되어 있어 멀티모달임을 확인할 수 있습니다. 다음 단계는 위 데이터셋의 멀티모달 RAG 인덱스를 생성하는 것입니다.
2단계: LlamaIndex와 Milvus를 통합하여 멀티모달 RAG 인덱스 생성
LlamaIndex와 Milvus를 사용하여 멀티모달 RAG 인덱스를 생성하려면, 멀티모달 데이터를 효율적으로 관리하고 검색할 수 있도록 두 라이브러리를 통합해야 합니다. LlamaIndex는 멀티모달 데이터의 수집과 벡터 표현으로의 임베딩을 처리합니다. 그런 다음 이러한 임베딩은 쿼리 시 나중에 검색할 수 있도록 Milvus에 저장됩니다.
FiftyOne 작업 선택 페이지에서 Create Multimodal RAG Index 작업을 선택하세요. 그런 다음 인덱스 이름을 지정하고 execute를 클릭하세요.
그림 6- LLamaIndex와 Milvus를 사용한 멀티모달 RAG 인덱스 생성
그림 6: LLamaIndex와 Milvus를 사용한 멀티모달 RAG 인덱스 생성
실행에는 데이터셋 크기에 따라 시간이 다소 걸릴 수 있으니 기다려 주세요. 이 과정에서 데이터셋은 벡터 임베딩으로 변환되어 Milvus에 저장됩니다. 데이터셋이 클수록 인덱스를 생성하는 데 더 많은 시간이 걸립니다. RAG 인덱스가 생성되면 쿼리를 진행할 수 있습니다.
3단계: 멀티모달 RAG 인덱스 쿼리
이 쿼리 단계는 RAG 파이프라인에서 실행 시간이 가장 오래 걸립니다. 모두 알다시피 느린 애플리케이션을 좋아하는 사람은 없습니다. 이것이 바로 쿼리 대상 벡터 데이터베이스가 검색 과정에서 정확하면서도 빨라야 하는 이유입니다. 바로 여기서 가장 널리 채택된 오픈 소스 벡터 데이터베이스인 Milvus가 강점을 발휘합니다.
Jacobs는 강연에서 Milvus에 대해 이야기하지만, 플러그인이 내부에서 일어나는 대부분의 과정을 추상화하므로 멀티모달 RAG 파이프라인에서 Milvus의 이점을 완전히 보지 못할 수도 있습니다. 하지만 fiftyone-multimodal-rag-plugin 개발자를 포함한 대부분의 멀티모달 RAG 개발자가 Milvus를 선택한 이유를 살펴보겠습니다:
십억 규모 벡터 저장 및 검색: Milvus는 십억 규모의 벡터 데이터를 효율적으로 관리하여 밀리초 수준의 지연 시간으로 빠른 접근을 보장합니다.
수평 확장성: Milvus는 확장성이 뛰어나며 비즈니스가 성장함에 따라 변화하는 요구 사항에 맞게 적응합니다.
RAG에 이상적: Milvus는 다양한 GenAI 애플리케이션, 특히 검색 증강 생성(RAG)을 구축하기 위한 필수 인프라입니다.
고속 검색: 최적화된 검색 알고리즘을 통해 Milvus는 관련 벡터를 빠르고 정확하게 검색할 수 있으며, 이는 인터랙티브 AI 시스템 및 추천 엔진과 같은 실시간 애플리케이션에 필수적입니다.
멀티모달 데이터 처리: Milvus는 다양한 데이터 유형을 지원하며 하이브리드 검색을 수행할 수 있습니다. 이 기능을 통해 멀티모달 검색, 하이브리드 희소 및 밀집 검색, 하이브리드 밀집 및 전체 텍스트 검색을 결합할 수 있어 다재다능하고 유연한 검색 기능을 제공합니다.
멀티모달 RAG 인덱스를 쿼리하려면 Operations 선택 페이지로 이동하여 Query Multimodal RAG Index 작업을 선택하세요. 그런 다음 쿼리를 입력하고, 사용할 인덱스, 응답을 생성할 LLM, 텍스트 결과 수, 마지막으로 포함할 이미지 결과 수를 선택하세요.
Fig 7- Milvus로 구동되는 멀티모달 RAG 인덱스 쿼리
Fig 7: Milvus로 구동되는 멀티모달 RAG 인덱스 쿼리
그런 다음 플러그인은 Milvus를 사용하여 벡터 유사도 검색을 수행하고, 쿼리를 기반으로 가장 관련성 높은 임베딩을 검색합니다. 검색된 임베딩은 선택한 대규모 언어 모델을 사용해 응답을 생성하기 위한 컨텍스트를 제공합니다. 위 쿼리에 대한 결과는 다음과 같습니다.
Fig 8- 멀티모달 RAG 인덱스 쿼리 결과
Fig 8: 멀티모달 RAG 인덱스 쿼리 결과
결과에는 쿼리를 실행하는 동안 사용한 인덱스와 모델, 그리고 대규모 언어 모델이 생성한 응답이 표시됩니다.
지금까지 FiftyOne, LLamaIndex, Milvus를 사용하여 멀티모달 RAG 파이프라인을 생성하는 모든 단계를 완료했습니다.
결론
Jacob의 발표는 강력한 멀티모달 RAG 파이프라인을 구축하기 위해 FiftyOne, LlamaIndex, Milvus를 통합할 수 있는 잠재력을 강조했습니다. 이러한 도구들은 향상된 데이터 검색과 풍부한 컨텍스트의 응답을 위해 텍스트 및 시각 데이터를 효율적으로 활용함으로써 멀티모달 시스템의 기능을 강화합니다. 설명된 단계를 따르면 이러한 오픈 소스 도구의 강점을 활용할 수 있으며, Milvus는 견고한 벡터 저장소와 고속 검색을 제공하여 프로젝트를 새로운 차원으로 끌어올립니다.
추가 리소스
계속 읽기

Build for the Boom: Why AI Agent Startups Should Build Scalable Infrastructure Early
Explore strategies for developing AI agents that can handle rapid growth. Don't let inadequate systems undermine your success during critical breakthrough moments.
Milvus/Zilliz + Surveillance: How Vector Databases Transform Multi-Camera Tracking
See how Milvus vector database enhances multi-camera tracking with similarity-based matching for better surveillance in retail, warehouses and transport hubs.

Introducing DeepSearcher: A Local Open Source Deep Research
In contrast to OpenAI’s Deep Research, this example ran locally, using only open-source models and tools like Milvus and LangChain.


