Milvus가 1억 4,200만 명의 자동차 구매자를 실제로 이해하는 BitAuto의 AI 검색을 지원하는 방법

95% 검색 정확도
FAISS 사용 시 45%에서 증가
10개 이상의 AI 서비스
하나의 Milvus 배포로 구동됨
99% 검색 정확도
고객 서비스의 경우, 40%에서 증가
월간 활성 사용자 1억 4,200만 명
소비자, 비즈니스 및 내부 사용 사례 전반에 걸쳐
이 게시물은 Zheng Li와 BitAuto AI Platform 팀이 공유한 자료를 바탕으로 작성되었습니다. FAISS에서 Milvus로의 마이그레이션, 정확도를 45%에서 95%로 끌어올린 검색 파이프라인, 그리고 월간 사용자 1억 4,200만 명을 위한 10개 이상의 AI 서비스 전반에서 Milvus를 확장하며 얻은 교훈을 다룹니다. BitAuto 팀의 허가를 받아 편집 및 재게시되었습니다.
BitAuto 소개
2000년에 설립된 BitAuto는 월간 활성 사용자 1억 4,200만 명을 보유한 아시아에서 가장 많이 방문되는 자동차 웹사이트 중 하나입니다. 소비자들은 이 사이트를 이용해 자동차 사양을 비교하고, 오너 리뷰를 읽고, 시승 영상을 시청하며, 20,000개 이상의 딜러십에서 제공하는 실시간 가격을 확인합니다. 이 회사는 자동차 제조사와 딜러에게 광고 및 디지털 마케팅을 판매하고, 딜러십 관리를 위한 SaaS 플랫폼을 제공합니다.
과제
BitAuto의 검색 문제는 두 단계로 나타났습니다. 키워드 검색은 실제 사용자가 질문하는 방식을 처리하지 못했습니다. FAISS는 이를 처리할 수 있었지만, 프로덕션 규모를 견디지 못했습니다.
자동차 구매자는 자연어로 검색합니다 — 키워드 검색은 따라가지 못했습니다
BitAuto의 1억 4,200만 사용자는 키워드로 검색하지 않습니다. 이들은 "3인 가족을 위한 넓은 SUV, 3만 달러 미만, CR-V보다 연비가 낮은 차"와 같은 요구 사항을 입력합니다. 키워드 기반 검색 인프라는 동의어("spacious"를 "roomy" 또는 "family-friendly"로)를 처리하지 못했습니다. 또한 하나의 쿼리에서 여러 조건을 결합할 수도 없었습니다.
사용자들은 여전히 유용한 정보를 찾을 수 있었지만, 결과가 항상 정확하지는 않았습니다 — 그리고 다중 조건 또는 자연어 쿼리의 경우, 시스템은 종종 최적의 매칭을 완전히 놓쳤습니다. 동일한 문제가 고객 서비스에서도 나타났는데, 상담원들이 특정 구성에 대한 질문에 적합한 답변을 검색하지 못하는 경우가 있었습니다.
FAISS는 시맨틱 검색이 효과가 있음을 입증했지만, 확장할 수 없었습니다
2022년에 팀은 벡터 검색을 테스트하기 위해 FAISS 기반 프로토타입을 구축했습니다. 100,000명 미만의 사용자를 대상으로 한 소규모 파일럿에서는 잘 작동했습니다. "Spacious MPV"는 "large-space SUV" 매물과 매칭되었습니다. 사람이 라벨링한 테스트 세트에서 정확도는 약 45%에 도달했습니다.
하지만 FAISS는 데이터베이스가 아니라 알고리즘 라이브러리입니다. 영속성도, 수평 확장도, 장애 복구도 없습니다. 이 모든 것을 처음부터 구축해야 했습니다. 엔지니어들은 검색을 개선하기보다 시스템을 운영 상태로 유지하는 데 시간의 절반을 써야 했을 것입니다. 그리고 실시간 시스템은 수천만 건의 레코드와 1억 건 이상의 일일 업데이트를 처리해야 했습니다. FAISS로는 불가능했습니다.
BitAuto가 Milvus를 선택한 이유
팀은 여섯 가지 차원에서 여러 옵션을 평가했습니다. 다음은 비교 결과입니다:
| 차원 | Facebook FAISS | Qdrant | Milvus | 기타(Chroma, Weaviate) |
|---|---|---|---|---|
| 배포 | 애플리케이션에 임베디드 | 독립형/클러스터 | 독립형/클러스터/lite(AI 네이티브 분산 아키텍처) | 독립형/단순 클러스터 |
| 확장성 | 처음부터 구축해야 함 | 수평 확장 지원 | 수직 및 수평 확장 모두 지원; 10억 규모 벡터 검색을 처리하도록 쉽게 확장 가능 | 제한적 |
| 데이터 관리 | 영속성 없음; 커스텀 개발 필요 | 영속성, CRUD | 전체 CRUD, 동적 데이터, 샤딩 | 기본 CRUD |
| 하이브리드 검색 | 지원되지 않음 | 지원됨 | 지원됨(스칼라 필터 + 벡터 검색,+ 전문 검색) | 제한적 |
| 커뮤니티 | 연구 분야에서 강함; 프로덕션용 래핑 필요 | 더 새롭고 빠르게 성장 중 | 대규모 커뮤니티, 풍부한 문서(현재 기준 GitHub 스타 43K+개) | 더 새롭고 빠르게 성장 중 |
| 학습 곡선 | 높음(깊은 통합 코딩 필요) | 중간 | 낮음 | 낮음 |
세 가지가 Milvus를 BitAuto의 명확한 선택으로 만들었습니다:
AI Native 분산 아키텍처. 컴퓨팅과 스토리지가 분리되어 있습니다. Query Node를 추가하면 읽기 용량이 확장되고, Data Node를 추가하면 데이터 증가에 대응할 수 있습니다. 애플리케이션 재설계가 필요 없습니다.
프로덕션 준비가 완료된 데이터 관리. 전체 CRUD, 여러 인덱스 유형, 파티셔닝, 하이브리드 검색이 모두 내장되어 있습니다. ANN 라이브러리 위에 추가 시스템을 개발할 필요가 없습니다.
활발한 생태계. Milvus는 BitAuto가 필요로 했던 바로 그 기능인 멀티 벡터 검색과 희소 및 밀집 벡터 하이브리드 검색을 지원합니다.
솔루션
BitAuto는 FAISS를 오픈 소스 벡터 데이터베이스인 Milvus로 대체하고, 그 위에 AI 검색 및 고객 서비스 시스템을 구축했습니다.
Milvus는 더 높은 성능의 벡터 검색을 제공하고 데이터를 영구적으로 저장하며, 전체 CRUD 작업을 지원하고 인덱싱을 자동으로 관리합니다. 더 이상 커스텀 스토리지, 직접 만든 백업 로직, DIY 장애 복구가 필요 없습니다.
Milvus는 또한 아키텍처를 통해 확장을 가능하게 했습니다. 검색을 위한 전용 Query Node, 수집을 위한 Data Node, 인덱스 구축을 위한 Index Node로 컴퓨팅과 스토리지를 분리합니다. 각 계층이 독립적으로 확장되므로, 팀은 제품 출시 기간에 처리량을 높이기 위해 더 많은 Query Node를 띄우거나 데이터셋이 커짐에 따라 Data Node를 추가할 수 있습니다 — 재설계는 필요 없습니다.
두 가지 문제가 모두 해결되자 팀은 프로덕션으로 이동했습니다. 오픈 소스 Milvus를 배포하고 차량 구성 검색(1,000만+ 레코드), 사용자 리뷰 검색, FAQ 매칭을 마이그레이션했습니다.
Milvus가 프로덕션에서 확장 문제를 해결한 방법
차량 구성 검색은 세 가지 중 가장 까다로웠습니다 — 잦은 배치 업데이트가 있는 1,000만+ 레코드였기 때문입니다. 또한 첫 번째 확장 문제가 나타난 곳이기도 합니다.
Milvus는 버전 업그레이드로 차량 구성 데이터셋의 쓰기 병목을 해결했습니다. 구성 데이터셋 — 세 가지 중 가장 큰 1,000만+ 레코드 — 은 잦은 배치 업데이트가 필요했습니다. 데이터 볼륨이 1,000만을 넘어서자 이러한 업데이트가 클러스터에 과부하를 일으키고 쿼리를 느리게 만들기 시작했습니다. Milvus 업그레이드(2023년 11월)는 삭제 및 컴팩션 로직을 최적화하고 병목을 해결했습니다.
Milvus 2.4의 멀티 벡터 검색은 복합 사용자 검색 쿼리를 단일 요청으로 전환했습니다. 사용자가 "Audi A6 base trim + speaker brand + fuel consumption"이라고 물으면 이전에는 애플리케이션 로직이 서로 이어 붙여야 하는 세 개의 별도 검색이 트리거되었습니다. 결과는 종종 맞아떨어지지 않았습니다. 팀이 Milvus 2.4(2024년 6월)로 업그레이드한 후에는 이와 같은 복합 쿼리가 단일 멀티 벡터 요청으로 실행됩니다 — 분할도, 이어 붙이기도 없습니다.
Milvus의 여러 인덱스 유형을 통해 팀은 각 데이터 규모에 맞는 전략을 선택할 수 있었습니다. 팀은 1,000만+ 차량 구성 레코드에는 IVF_FLAT(nprobe를 nlist의 5~10%로 조정), 50만~500만 뉴스 및 리뷰 레코드에는 HNSW, 소규모 FAQ 데이터셋에는 FLAT을 설정했습니다.
Milvus의 네이티브 희소 벡터 지원은 Elasticsearch를 의존성에서 대체했습니다. 모든 쿼리가 의미 검색의 이점을 얻는 것은 아닙니다. 사용자가 "BMW 5 Series 2025 price"를 입력하면, 비슷한 가격의 비슷한 자동차에 대한 결과가 아니라 해당 특정 단어와 정확히 일치하는 결과를 원합니다. 밀집 벡터는 의미를 파악하는 데는 뛰어나지만 정확한 키워드에는 약합니다. 정확히 일치하지 않는데도 2024 BMW 3 Series 리뷰를 반환할 수 있습니다. 이러한 경우 BitAuto는 Milvus와 함께 Elasticsearch를 실행해야 했습니다 — 하나는 키워드 쿼리용 시스템, 다른 하나는 의미 쿼리용 시스템, 그리고 양쪽의 결과를 병합하기 위한 추가 로직이 필요했습니다.
2025년 4월, 팀은 Milvus의 네이티브 희소 벡터 지원으로 전환했으며, 이를 통해 하나의 시스템에서 두 가지를 모두 처리할 수 있게 되었습니다. 희소 벡터는 키워드 매칭의 더 스마트한 버전처럼 작동합니다 — 텍스트가 포함한 특정 단어로 텍스트를 표현하므로, "BMW 5 Series 2025"는 해당 정확한 용어들과 매칭됩니다. 밀집 벡터는 여전히 의미론적 측면을 처리합니다. Milvus는 단일 쿼리에서 두 가지를 모두 실행하여 Elasticsearch 의존성을 완전히 대체합니다.
Milvus를 중심으로 구축된 다단계 검색 파이프라인이 정확도 향상을 이끌었습니다. 사용자가 "Audi A6 lowest trim what config"라고 입력한다고 해봅시다. 이 쿼리는 정돈되어 있지 않습니다 — 브랜드("Audi A6"), 모호한 의도("lowest trim"), 축약 표현("what config")이 포함되어 있습니다. 검색 전에 파이프라인은 이를 정리합니다. 엔터티 인식은 "Audi A6"를 추출하고, 커스텀 7B 모델은 이 단편을 적절한 질문("What is the configuration of the Audi A6 base trim?")으로 재작성하며, 키워드 추출은 "config," "base trim," "A6" 같은 핵심 용어를 가져옵니다.
정리된 쿼리는 그런 다음 세 개의 병렬 검색 경로로 확장됩니다: 추출된 용어를 사용하는 키워드 검색, 그리고 두 개의 별도 Milvus 벡터 검색 — 하나는 재작성된 질문을 사용하고, 다른 하나는 사용자 프로필 데이터를 추출된 엔터티와 결합합니다. 세 결과 집합은 모두 BGE-Reranker로 전달되며, 이 모델은 모든 후보에 점수를 매기고 순위를 매겨 최적의 답변을 선택합니다.
결과
전후 비교: FAISS + Elasticsearch vs. Milvus
| 지표 | 이전 (FAISS + ES) | 이후 (Milvus) |
|---|---|---|
| AI 어시스턴트 검색 정확도 | ~45% | ~95% |
| 고객 서비스 검색 정확도 | ~40% | ~99% |
| 데이터 동기화 지연 시간 | T+1 (다음 날) | 초 단위 |
| 인프라에 소요되는 엔지니어링 시간 | ~50% | ~10% |
| 아키텍처 | ES + FAISS (분산됨) | Milvus (단일 시스템으로 수렴 중) |
현재 BitAuto에서 Milvus가 지원하는 서비스
Milvus는 하나의 검색 서비스 프로토타입을 대체하는 것으로 시작했습니다. 2년 후, Milvus는 BitAuto AI 사용 사례의 90% 이상을 포괄하는 10개 이상의 AI 서비스 뒤에서 검색 계층 역할을 하고 있습니다:
AI 자동차 쇼핑 어시스턴트. 소비자 대상 제품입니다. 사용자는 자동차에 대해 사양, 비교, 리뷰 등 자연어 질문을 하고, 수백만 건의 차량 레코드 전반에 걸친 Milvus의 의미론적 검색을 통해 답변을 받습니다.
지능형 고객 서비스. 앱, 미니 프로그램, WeChat, 웹 전반에서 실행됩니다. 시스템은 사용자 질문을 의도 인식과 시나리오 매칭을 통해 라우팅한 다음, Milvus 기반 지식 베이스에서 밀리초 단위로 답변을 검색합니다. 완전 자동 응답과 상담원 지원 응답을 모두 처리하여 — 딜러 리드 전환을 직접적으로 개선합니다.
지능형 검색. 플랫폼 전반의 텍스트, 이미지, 동영상에 대한 의미론적 검색입니다.
ChatBI 및 내부 도구. 분석가를 위한 비즈니스 데이터에 대한 자연어 쿼리와 운영, HR, 콘텐츠 생성을 위한 어시스턴트 — 모두 동일한 Milvus 계층 위에서 실행됩니다.
이러한 서비스 전반에서 Milvus는 지연 시간을 밀리초 범위로 유지하고 안정적인 클러스터 성능을 유지하면서 매일 수억 건의 데이터 업데이트를 처리합니다.
다음 단계
비용을 절감하고 스택을 단순화합니다. 현재 BitAuto는 배치 데이터 처리와 실시간 스트리밍을 위해 별도의 시스템을 운영하며, 외부 메시지 큐가 이를 연결하고 있습니다. 팀은 오버헤드를 줄이기 위해 이를 더 적은 수의 구성 요소로 통합할 계획입니다. 또한 핫-콜드 데이터 분리도 도입할 예정입니다. 즉, 접근 빈도가 낮은 데이터를 더 저렴한 매체에 저장해 스토리지 비용을 절반으로 줄이는 방식입니다.
검색 결과를 더 정밀하게 만듭니다. 팀은 희소 벡터와 밀집 벡터 전반에 가중치가 적용된 하이브리드 랭킹을 추가하여, 각 쿼리가 키워드 매칭과 의미적 이해 중 어느 쪽에 얼마나 의존할지 조정할 수 있도록 할 것입니다.
자동화된 피드백 루프를 구축합니다. BitAuto는 실시간 검색 품질을 모니터링하고, 나쁜 결과를 자동으로 표시하며, 이러한 사례를 인덱스 구축 및 랭킹 규칙에 다시 반영하는 AI 에이전트를 배포할 예정입니다. 이를 통해 시스템은 수동 튜닝을 기다리는 대신 스스로 개선됩니다.
BitAuto에게 Milvus는 "검색 구성 요소"에서 핵심 AI 인프라로 변화했습니다. 새로운 어시스턴트, 고객 서비스 플로, 내부 도구가 모두 그 위에 구축되어 있습니다.


