이번 핼러윈에는 Milvus로 귀여운 유령을 잡아보세요
이 글의 한 버전은 DZone에 게시되어 있습니다.
저는 방금 All Things Open에서 발표를 했는데, Retrieval Augmented Generation(RAG)가 이제 우리가 수년간 해온 기법처럼 느껴진다는 것이 믿기 어렵습니다.
그럴 만한 이유가 있습니다. 지난 2년 동안 RAG의 유용성이 무한하다는 점 때문에 깊이와 폭 모두에서 폭발적으로 성장했기 때문입니다. large language models 에서 생성된 결과의 품질을 개선하는 능력은 변형, 개선, 새로운 패러다임이 발전을 이끌면서 끊임없이 향상되고 있습니다.
오늘 살펴볼 내용은 다음과 같습니다:
Multimodal RAG의 실용적 응용
- 필터를 사용한 이미지 검색
- 최고의 Halloween Ghosts 찾기
Ollama, LLava 7B 및 LLM Reranking 사용
고급 Multimodal RAG를 로컬에서 실행하기
저는 RAG의 현재 상태에서 이루어진 몇 가지 새로운 발전을 사용해 몇 가지 Halloween 문제를 해결해 보겠습니다. 문제를 살펴보겠습니다. 어떤 것이 유령인지 찾는 것과 가장 귀여운 고양이 유령이 무엇인지 찾는 것입니다.
Multimodal RAG의 실용적 응용
어떤 것이 유령인가? 필터와 clip-vit-base-patch32를 사용한 이미지 검색
우리는 무언가가 “유령”인지 판단하는 데 도움을 줌으로써 세상의 모든 유령 탐지기들을 위한 도구를 만들고자 합니다. 이를 위해 호스팅된 “ghosts” 컬렉션을 사용할 것인데, 여기에는 필터링할 수 있는 여러 필드와 멀티모달로 인코딩된 벡터를 검색할 수 있는 기능이 있습니다. 누군가가 Google form, Streamlit app, S3 upload, Jupyter notebook을 통해 유령 사진을 전달할 수 있게 합니다. 우리는 Hugging Face의 Sentence Transformer와 함께 OpenAI의 CLIP model을 활용하여 텍스트 및/또는 이미지의 조합일 수 있는 해당 쿼리를 인코딩합니다. 이를 통해 의심되는 유령 이미지를 인코딩하고, 컬렉션을 검색하여 유사도를 확인하는 데 사용할 수 있습니다. 유사도가 충분히 높다면 이를 "ghost"라고 간주할 수 있습니다.
컬렉션 설계
어떤 애플리케이션을 만들기 전에, 필요할 수 있는 모든 필드와 요구 사항에 맞는 타입 및 크기가 잘 정의되어 있는지 확인해야 합니다.
“ghosts” 컬렉션에는 최소한 다음이 필요합니다:
INT64 타입이며 primary key로 설정되고 Automatic ID generation을 갖도록 설정된 id 필드
스키마의 다음 필드는 ghostclass로, Class I, Class II, Fake, Class IV와 같은 전통적인 유령 분류를 담는 길이 20의 VARCHAR scalar string입니다.
그다음은 category로, Fake, Ghost, Deity, Unstable, Legend와 같은 분류에 해당하는 짧은 설명을 담는 길이 256의 더 큰 VARCHAR scalar string입니다.
객체 이미지에 대한 S3 Path를 담는 길이 1,024의 큰 VARCHAR scalar string으로 정의된 s3path 필드를 추가합니다.
마지막으로 가장 중요한 vector는 차원 512의 floating point vector를 담습니다.
이제 데이터 스키마가 준비되었으므로, 이를 구축하고 데이터에 대해 으스스한 분석에 사용할 수 있습니다.
Step 1: Milvus Standalone에 연결
Step 2: CLIP model 로드
3단계: 벡터와 스칼라의 스키마로 컬렉션을 정의합니다.
4단계: 쿼리에 사용할 이미지를 인코딩합니다.
5단계: Milvus standalone 데이터베이스의 ghosts 컬렉션에 대해 쿼리를 실행하고, category가 Fake가 아닌 것으로 필터링된 항목만 찾습니다. 결과는 하나로 제한합니다.
6단계: 거리를 확인하고, 0.8 이상이면 이것을 유령으로 간주합니다. 의심되는 개체를 실제 유령 사진의 대규모 데이터베이스와 비교하여 이를 수행합니다. 어떤 것이 현재 유령 클래스에 속한다면 기존 항목들과 유사해야 합니다.
7단계: 결과는 잠재적인 유령과 가장 가까운 매치와 함께 표시됩니다.
예시에서 볼 수 있듯이, Fake 카테고리에 속하지 않는 유사한 "ghost"와 충분히 가깝게 매칭되었습니다.
별도의 Halloween 애플리케이션에서는 Halloween 유령도 포함하는 별도의 사용 사례를 위해 다른 컬렉션과 다른 인코딩 모델을 살펴보겠습니다.
Visualized BGE model로 가장 귀여운 고양이 유령 찾기
우리는 상품을 받거나, 소셜 미디어 게시물에 올리거나, 기타 중요한 활동을 위해 가장 귀여운 고양이 유령과 아마도 다른 유령들도 찾고자 합니다.
컬렉션 설계
애플리케이션을 만들기 전에 어떤 필드가 필요할지 결정했는지 확인해야 합니다. 이 간단한 사용 사례에서는 자동 id 생성을 사용하는 동적 스키마를 사용할 것입니다. 이렇게 하면 필드를 정의할 필요가 없으며 id와 vector 필드가 있는 항목들이 생성됩니다.
“ghostslocal” 컬렉션의 경우, 다음이 자동으로 생성됩니다:
INT64 타입이며, 기본 키로 설정되고 자동 ID 생성이 설정된 id 필드
이 컬렉션은 동적 필드를 활성화하도록 설정했으며, 데이터 삽입 중에 중요한 필드 하나를 추가할 것입니다.
마지막으로 가장 중요한 vector는 차원 768의 부동 소수점 벡터를 보관합니다.
이제 데이터 스키마가 있으므로, 가장 귀여운 유령을 찾을 수 있습니다.
1단계: Milvus Standalone에 연결
2단계: BAAI/bge-base-en-v1.5 모델 로드
3단계: 벡터와 스칼라의 스키마로 컬렉션을 정의합니다.
4단계: 이미지 목록을 반복하면서 이미지를 인코딩하고 나중에 삽입할 수 있도록 dict에 추가합니다.
5단계: ****이미지를 삽입합니다. image_path는 이 컬렉션의 스키마에서 동적 필드로 생성됩니다.
6단계: 쿼리에 사용할 텍스트 쿼리 “Show me the cutest cat ghost”를 벡터 인코딩합니다.
5단계: 유사도 검색을 실행합니다
6단계: 결과를 반복하고 가장 귀여운 고양이와 일치하는 이미지를 표시합니다.
우리의 벡터 검색은 꽤 간단합니다. 가장 귀여운 고양이 유령(작은 Halloween 의상을 입은)을 찾기 위해 텍스트를 인코딩하기만 하면 됩니다. Milvus는 768차원 부동 소수점 벡터를 쿼리하고 가장 가까운 매치를 찾아줍니다. 데이터베이스에 있는 온갖 으스스한 구울과 유령들 속에서도, 이 결과에 이의를 제기하기는 어렵습니다.
Ollama, LLava 7B 및 LLM 재순위화 사용
로컬에서 Advanced RAG 실행
좋아요, 이것은 약간의 trick AND treat입니다. 두 가지 주제를 동시에 다룰 수 있습니다. 우리는 Milvus Lite, Ollama, LLava 7B 그리고 Jupyter Notebook.을 활용해 이 전체 고급 RAG 기법을 로컬에서 실행할 수 있습니다. 우리는 Generative Reranker를 사용한 Multimodal Search를 수행할 것입니다. 이는 LLM을 사용해 이미지를 순위화하고 최상의 결과를 설명합니다. 이전에는 매우 강력한 GPT-4o 모델로 이것을 수행했습니다. 저는 Ollama로 로컬 호스팅한 LLava 7B에서 좋은 결과를 얻고 있습니다. 이것을 오픈, 로컬, 무료로 실행하는 모습을 보여드리겠습니다!
우리는 기존 예제 코드를 재사용하여 “computer monitor with ghost”라는 텍스트와 유령이 있는 사무실 사진에 대한 hybrid search에서 반환된 이미지들로 파노라마 사진을 만들 것입니다. 그런 다음 그 사진을 Ollama에서 호스팅되는 LLaVA7B 모델로 보내고, 결과 순위를 매기는 방법에 대한 지시를 제공합니다. 그러면 순위, 설명, 이미지가 반환됩니다.
우리의 검색 이미지와 아홉 개의 결과
LLM이 반환한 순위 목록 순서 결과.
LLM에 제공할 결과를 얻기 위한 간단하고 빠른 Milvus 쿼리.
전체 코드는 우리의 example github에서 확인할 수 있으며, 예제에서 보여주듯 원하는 어떤 이미지든 사용할 수 있습니다. 또한 직접 실험해볼 수 있는 StreamLit 애플리케이션을 포함해 몇 가지 참고 자료와 문서화된 코드도 있습니다.
결론
보시다시피 multimodal RAG는 무섭지 않을 뿐만 아니라, 재미있고 많은 애플리케이션에 유용합니다.
더 고급 AI 애플리케이션을 구축하는 데 관심이 있다면 Milvus와 Multimodal RAG를 함께 사용하는 것은 애플리케이션 구축을 위한 훌륭한 조합입니다. 이제 텍스트에만 머무르지 않고 이미지와 그 이상을 추가할 수 있습니다. Multimodal RAG는 LLM 생성, 검색, 그리고 전반적인 AI 애플리케이션에 많은 새로운 길을 열어줍니다.
여러분의 의견을 듣고 싶습니다!
이 글이 마음에 드셨다면 GitHub에서 star를 주시면 정말 감사하겠습니다! 또한 Discord의 Milvus 커뮤니티에 참여해 여러분의 경험을 공유하셔도 좋습니다. 현지 오프라인 커뮤니티와 코드를 위해 저희 meetup 중 하나 또는 모두에 참여해주시고, 녹화된 meetup 발표, 데모, 심층 분석이 담긴 Youtube 라이브러리에도 접근해보세요.
더 알아보는 데 관심이 있다면 GitHub의 Bootcamp repository를 확인하여 Milvus로 Multimodal RAG 앱을 구축하는 방법의 예제를 살펴보세요.
추가 자료
계속 읽기

Zilliz Cloud Now Available in AWS Asia Pacific (Seoul)
Zilliz Cloud is now available in AWS Seoul — low-latency vector search, in-country data residency, and one-step migration for Korean AI teams. 31 regions across 5 clouds.

Creating Collections in Zilliz Cloud Just Got Way Easier
We've enhanced the entire collection creation experience to bring advanced capabilities directly into the interface, making it faster and easier to build production-ready schemas without switching tools.

AI Agents Are Quietly Transforming E-Commerce — Here’s How
Discover how AI agents transform e-commerce with autonomous decision-making, enhanced product discovery, and vector search capabilities for today's retailers.



