Как Milvus обеспечивает AI-поиск BitAuto, который действительно понимает своих 142 млн покупателей автомобилей

95% точность извлечения
по сравнению с 45% при использовании FAISS
10+ ИИ-сервисов
работает на базе одного развертывания Milvus
99% точность извлечения
Для обслуживания клиентов, рост с 40%
142 млн активных пользователей в месяц
в потребительских, бизнес- и внутренних сценариях использования
Этот пост основан на материалах, предоставленных Zheng Li и командой BitAuto AI Platform. В нем рассказывается об их миграции с FAISS на Milvus, конвейере поиска, который повысил точность с 45% до 95%, и уроках, извлеченных при масштабировании Milvus на 10+ AI-сервисов для 142 миллионов пользователей в месяц. Отредактировано и повторно опубликовано с разрешения команды BitAuto.
О BitAuto
BitAuto, основанная в 2000 году, — один из самых посещаемых автомобильных сайтов Азии с 142 миллионами активных пользователей в месяц. Потребители используют его, чтобы сравнивать характеристики автомобилей, читать отзывы владельцев, смотреть тест-драйвы и проверять актуальные цены более чем от 20 000 дилерских центров. Компания продает рекламу и услуги цифрового маркетинга автопроизводителям и дилерам, а также предлагает SaaS-платформу для управления дилерскими центрами.
Задача
Проблемы поиска BitAuto проявились в два этапа. Поиск по ключевым словам не справлялся с тем, как реальные пользователи задают вопросы. FAISS мог, но не выдерживал производственных масштабов.
Покупатели автомобилей ищут на естественном языке — поиск по ключевым словам не справлялся
142 миллиона пользователей BitAuto не ищут по ключевым словам. Они вводят требования, такие как "Просторный SUV для семьи из трех человек, до $30K, с меньшим расходом топлива, чем у CR-V." Инфраструктура поиска на основе ключевых слов не могла обрабатывать синонимы ("spacious" как "roomy" или "family-friendly”). Она также не могла объединять несколько условий в одном запросе.
Пользователи по-прежнему могли находить полезную информацию, но результаты не всегда были точными — а для многоусловных запросов или запросов на естественном языке система часто полностью упускала лучшие совпадения. Та же проблема проявлялась в службе поддержки клиентов, где агенты иногда не могли найти правильный ответ на вопросы о конкретных комплектациях.
FAISS доказал работоспособность семантического поиска, но не смог масштабироваться
В 2022 году команда построила прототип на FAISS, чтобы протестировать векторный поиск. В небольшом пилотном проекте с менее чем 100 000 пользователей он работал. "Spacious MPV" сопоставлялся с объявлениями "large-space SUV". Точность достигла ~45% на тестовом наборе, размеченном людьми.
Но FAISS — это библиотека алгоритмов, а не база данных. У нее нет персистентности, горизонтального масштабирования и восстановления после сбоев. Все это пришлось бы создавать с нуля. Инженеры тратили бы половину своего времени на поддержание системы в рабочем состоянии, а не на улучшение поиска. А рабочая система должна была бы обрабатывать десятки миллионов записей со 100M+ ежедневных обновлений. FAISS не подошел бы.
Почему BitAuto выбрала Milvus
Команда оценила несколько вариантов по шести измерениям. Вот как они сравнивались:
| Измерение | Facebook FAISS | Qdrant | Milvus | Другие (Chroma, Weaviate) |
|---|---|---|---|---|
| Развертывание | Встроен в приложение | Автономный/кластер | Автономный/кластер/lite (AI-native распределенная архитектура) | Автономный/простой кластер |
| Масштабируемость | Нужно создавать с нуля | Поддерживается горизонтальное масштабирование | И вертикальное, и горизонтальное масштабирование; легко масштабируется для обработки векторного поиска на уровне миллиардов | Ограниченная |
| Управление данными | Нет персистентности; требуется пользовательская разработка | Персистентность, CRUD | Полный CRUD, динамические данные, шардинг | Базовый CRUD |
| Гибридный поиск | Не поддерживается | Поддерживается | Поддерживается (скалярный фильтр + векторный поиск,+ полнотекстовый поиск) | Ограниченный |
| Сообщество | Сильное в исследованиях; требует обвязки для production | Более новое, быстро растет | Большое сообщество, богатая документация (на сегодняшний день 43K+ звезд на GitHub) | Более новые, быстро растут |
| Кривая обучения | Высокая (требуется глубокое интеграционное кодирование) | Средняя | Низкая | Низкая |
Три вещи сделали Milvus очевидным выбором для BitAuto:
Распределенная архитектура AI Native. Вычисления и хранение разделены. Добавление Query Nodes масштабирует пропускную способность чтения; добавление Data Nodes позволяет справляться с ростом данных. Переработка приложения не требуется.
Готовое к production управление данными. Полный CRUD, несколько типов индексов, партиционирование и гибридный поиск встроены изначально. Нет необходимости в дополнительной разработке системы поверх библиотеки ANN.
Активная экосистема. Milvus поддерживает мультивекторный поиск и гибридный поиск по разреженным и плотным векторам — именно то, что было нужно BitAuto.
Решение
BitAuto заменила FAISS на Milvus, open-source векторную базу данных, и построила поверх нее свои системы AI-поиска и клиентского сервиса.
Milvus обеспечивает более производительный векторный поиск и постоянное хранение данных, поддерживает полные CRUD-операции и автоматически управляет индексированием. Больше никакого кастомного хранилища, самописной логики резервного копирования или DIY-восстановления после сбоев.
Milvus также обеспечил масштабирование благодаря своей архитектуре. Он отделяет вычисления от хранения, используя выделенные Query Nodes для поиска, Data Nodes для загрузки данных и Index Nodes для построения индексов. Поскольку каждый уровень масштабируется независимо, команда может запустить дополнительные Query Nodes, чтобы увеличить пропускную способность во время запуска продукта, или добавить Data Nodes по мере роста набора данных — без необходимости переработки.
После решения обеих проблем команда перешла в production. Они развернули open-source Milvus и мигрировали поиск по конфигурациям автомобилей (10M+ записей), поиск по отзывам пользователей и сопоставление FAQ.
Как Milvus решил проблемы масштабирования в production
Поиск по конфигурациям автомобилей был самым требовательным из трех — 10M+ записей с частыми пакетными обновлениями. Именно там впервые проявились проблемы масштабирования.
Milvus устранил узкие места записи в наборе данных конфигураций автомобилей с помощью обновления версии. Набор данных конфигураций — крупнейший из трех, с 10M+ записей — требовал частых пакетных обновлений. Когда объем данных превысил десять миллионов, эти обновления начали перегружать кластер и замедлять запросы. Обновление Milvus (ноябрь 2023 г.) оптимизировало логику удаления и компакции и устранило узкое место.
Мультивекторный поиск Milvus 2.4 превратил составные пользовательские поисковые запросы в единичные запросы. Запрос пользователя "Audi A6 base trim + speaker brand + fuel consumption" раньше запускал три отдельных поиска, которые прикладная логика должна была сшивать вместе. Результаты часто не совпадали. После обновления команды до Milvus 2.4 (июнь 2024 г.) такие составные запросы выполняются как единый мультивекторный запрос — без разбиения и сшивания.
Несколько типов индексов Milvus позволили команде подобрать правильную стратегию для каждого масштаба данных. Команда настроила IVF_FLAT для 10M+ записей конфигураций автомобилей (с nprobe, настроенным на 5–10% от nlist), HNSW для 500K–5M записей новостей и отзывов и FLAT для небольших наборов данных FAQ.
Нативная поддержка разреженных векторов в Milvus заменила Elasticsearch как зависимость. Не каждый запрос выигрывает от семантического поиска. Когда пользователь вводит "BMW 5 Series 2025 price," ему нужно точное совпадение по этим конкретным словам, а не результаты о похожих автомобилях с похожими ценами. Плотные векторы хорошо работают со смыслом, но плохо — с точными ключевыми словами: они могут вернуть обзор BMW 3 Series 2024 года, хотя это не точное совпадение. Для таких случаев BitAuto приходилось запускать Elasticsearch параллельно с Milvus — одну систему для ключевых запросов, другую для семантических, плюс дополнительную логику для объединения результатов из обеих.
В апреле 2025 года команда перешла на нативную поддержку разреженных векторов в 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 assistant | ~45% | ~95% |
| Точность извлечения customer service | ~40% | ~99% |
| Задержка синхронизации данных | T+1 (на следующий день) | Секунды |
| Инженерное время на инфраструктуру | ~50% | ~10% |
| Архитектура | ES + FAISS (фрагментированная) | Milvus (сходится к единой системе) |
Какие сервисы Milvus поддерживает в BitAuto сегодня
Milvus начинался как замена прототипа одного поискового сервиса. Два года спустя он стал слоем извлечения для 10+ AI-сервисов, покрывающих 90%+ AI-сценариев BitAuto:
AI car shopping assistant. Продукт для конечных пользователей. Пользователи задают вопросы о автомобилях на естественном языке — характеристики, сравнения, обзоры — и получают ответы благодаря семантическому поиску Milvus по миллионам записей о транспортных средствах.
Интеллектуальная служба поддержки клиентов. Работает в приложениях, мини-программах, WeChat и в интернете. Система направляет вопросы пользователей через распознавание намерений и сопоставление сценариев, затем за миллисекунды извлекает ответы из базы знаний на базе Milvus. Обрабатывает как полностью автоматизированные, так и поддерживаемые человеком ответы — напрямую повышая конверсию дилерских лидов.
Интеллектуальный поиск. Семантическое извлечение по тексту, изображениям и видео на платформе.
ChatBI и внутренние инструменты. Запросы на естественном языке к бизнес-данным для аналитиков, а также ассистенты для операционной деятельности, HR и генерации контента — все на одном и том же слое Milvus.
Во всех этих сервисах Milvus обрабатывает сотни миллионов ежедневных обновлений данных, удерживая задержку в миллисекундном диапазоне и поддерживая стабильную производительность кластера.
Что дальше
Сократить затраты и упростить стек. Сейчас BitAuto использует отдельные системы для пакетной обработки данных и потоковой передачи в реальном времени, соединённые внешними очередями сообщений. Команда планирует объединить их в меньшее число компонентов, чтобы снизить накладные расходы. Они также внедрят разделение данных на горячие и холодные — хранение редко используемых данных на более дешёвых носителях, чтобы вдвое сократить затраты на хранение.
Сделать результаты поиска более точными. Команда добавит взвешенное гибридное ранжирование по разреженным и плотным векторам, чтобы можно было настраивать, насколько каждый запрос опирается на сопоставление по ключевым словам по сравнению с семантическим пониманием.
Создать автоматизированный цикл обратной связи. BitAuto развернёт ИИ-агентов, которые будут отслеживать качество поиска в реальном времени, автоматически отмечать плохие результаты и передавать эти случаи обратно в построение индекса и правила ранжирования — чтобы система улучшала сама себя, а не ждала ручной настройки.
Для BitAuto Milvus превратился из «поискового компонента» в базовую ИИ-инфраструктуру. Новые ассистенты, сценарии обслуживания клиентов и внутренние инструменты — всё это построено поверх него.


