Cốc Cốc impulsa la búsqueda de IA a escala nacional de Vietnam con Milvus
700M
Vectors in production, escalando hacia 1.5B
19.8 ms
P90 de latencia de búsqueda semántica en picos de tráfico
32,1 ms
Latencia P90 de búsqueda híbrida en tráfico pico
99–100%
Recall en producción con HNSW
Respondemos en menos de 20 milisegundos entre cientos de millones de vectores, y todos los productos de IA que hemos construido — búsqueda, publicidad, RAG — se ejecutan en el mismo despliegue de Milvus. Eso es lo que nos permite seguir lanzando sin añadir infraestructura.
Nam Doan Ngoc Giang
Acerca de Cốc Cốc
Cốc Cốc es el principal motor de búsqueda y navegador de origen vietnamita. Más de 30 millones de personas lo usan — aproximadamente uno de cada tres internautas vietnamitas — realizando más de 600 millones de búsquedas al mes, lo que convierte a Cốc Cốc en el segundo motor de búsqueda y el segundo navegador del país, solo por detrás de Google. Su ventaja es lo que los motores globales encuentran más difícil de copiar: el propio vietnamita, hasta los modelos de lenguaje que el propio equipo de Cốc Cốc ajustó para ello.
Desde 2023, Cốc Cốc ha estado integrando IA en esa experiencia con AI Chat y AI Search, y extendiendo la misma inteligencia a Cốc Cốc Ads. Ese cambio transformó el problema subyacente: ahora los resultados deben recuperarse por significado y no solo por palabras clave, entre cientos de millones de elementos, en milisegundos. Milvus es la capa semántica que Cốc Cốc eligió para hacerlo — hoy contiene 700 millones de vectores en cinco de sus sistemas de producción.
El desafío
Llevar la recuperación semántica a un motor de búsqueda y una plataforma publicitaria a escala nacional implicaba resolver tres problemas a la vez.
- La búsqueda por palabras clave no puede responder a las consultas que los usuarios realmente escriben. Cada día aparecen nuevas consultas y tendencias — un teléfono lanzado esta mañana, una noticia de hace una hora, una frase en vietnamita que ninguna página web usa. La búsqueda por palabras clave solo coincide con las palabras reales del usuario, por lo que para estos casos devuelve poco valor.
- Las bibliotecas de vectores no pueden contener cientos de millones de vectores. FAISS y USearch funcionaban bien en los proyectos de menor escala de Cốc Cốc, pero ofrecen un índice, no un sistema — nada que reparta cientos de millones de vectores entre varias máquinas, los mantenga consultables mientras se escriben nuevos datos y funcione de manera confiable en producción. Lo que los reemplazara también tenía que ejecutarse en los propios servidores de Cốc Cốc, para que los datos de búsqueda y publicidad permanecieran dentro de su infraestructura.
- La coincidencia de anuncios requiere dos rutas de recuperación, pero el presupuesto de latencia solo admite una. Los anunciantes que pujan por las palabras exactas de un comprador deben ser emparejados, pero un comprador que describe lo mismo de otra manera debería seguir viéndolos. Ejecutar ambas rutas y fusionarlas en una única lista clasificada — en la carga de trabajo vectorial de mayor volumen de Cốc Cốc, dentro de un presupuesto compartido de tiempo de carga de página — es donde se pone difícil.
Por qué Milvus
Cốc Cốc validó Milvus con una prueba de concepto sobre aproximadamente 30 millones de embeddings de consultas antes de comprometerse. Los resultados superaron las expectativas del equipo, y desde entonces Milvus ha sido su base de datos vectorial. Cinco factores lo mantuvieron en su lugar a medida que la carga de trabajo crecía.
- Baja latencia que se mantuvo a medida que el conjunto de datos crecía. Este fue el criterio principal. Milvus ofreció una búsqueda vectorial constantemente rápida mientras el corpus de Cốc Cốc escalaba de los 30 millones de vectores de la prueba de concepto a 700 millones en producción, y siguió manteniéndose cuando el equipo se expandió a la búsqueda híbrida para la plataforma publicitaria, un patrón de consulta más pesado y con mayor volumen.
- Autogestionado, de modo que los datos y la infraestructura permanecen con Cốc Cốc. Milvus es de código abierto y se ejecuta en el propio entorno de Cốc Cốc. Los datos de los usuarios nunca salen de su infraestructura, y el equipo controla la topología de implementación, la configuración de los índices, la asignación de recursos y el momento de las actualizaciones.
- Búsqueda híbrida nativa, en lugar de un segundo sistema que operar. Milvus genera vectores dispersos con una función BM25 integrada y los combina con resultados ANN densos dentro de una sola consulta. El motor de anuncios de Cốc Cốc obtiene recuperación léxica y semántica desde una sola base de datos, con una única superficie operativa, en lugar de ejecutar un clúster separado de búsqueda por palabras clave y unir dos conjuntos de resultados en el código de la aplicación.
- Un arsenal completo de índices, para que cada carga de trabajo tenga el equilibrio adecuado. Las cargas de trabajo de Cốc Cốc no requieren lo mismo. La búsqueda en línea busca la menor latencia con alta precisión; los pipelines por lotes fuera de línea quieren resultados exactos y no les importa cuánto tarden. Milvus admite HNSW, la familia IVF, FLAT y muchos más en la misma implementación, por lo que el equipo eligió por carga de trabajo en lugar de hacer concesiones entre todas.
- Sencillo de implementar, operar y aprender. Milvus fue fácil de poner en marcha, gestionar y escalar en producción, lo que mantuvo bajos los costos operativos para el equipo de ingeniería. La arquitectura modular de Milvus Distributed, con paneles de control detallados para cada componente, permite al equipo ver exactamente qué parte del sistema está bajo presión y dimensionar el hardware según el cuello de botella real. Además, la documentación fue completa y fácil de seguir, lo que aceleró la implementación inicial y simplificó la integración con los sistemas existentes de Cốc Cốc.
La solución
Milvus se encuentra en la parte más alta de los pipelines de Cốc Cốc: es el paso de recuperación, antes del filtrado y la reordenación. La relevancia de la búsqueda web principal de Cốc Cốc sigue una arquitectura de recuperar y reordenar, donde Milvus maneja el recuerdo de primera etapa y los modelos posteriores refinan los resultados.
Cinco sistemas de producción funcionan sobre esa única implementación de Milvus, cada uno con su propia colección, su propia definición de lo que significa un vector y su propia configuración de índice, pero sin infraestructura separada:
- Relevancia de la búsqueda web principal — recuperación semántica que muestra resultados relevantes para consultas no vistas y de cola larga.
- Anuncios de búsqueda y compras impulsados por IA — recuperación semántica e híbrida que hace coincidir la intención del usuario con anuncios relevantes.
- Sugerencias de búsqueda relacionadas — similitud vectorial que muestra consultas de seguimiento contextualmente relevantes.
- Segmentación de audiencias similares — historial de navegación incrustado como vectores, utilizado para encontrar usuarios con intereses similares para publicidad display.
- Un chatbot RAG interno — Milvus como capa de recuperación que fundamenta las respuestas del LLM en los propios documentos de Cốc Cốc.
Lo que representa un vector depende del sistema: una página web, una consulta de búsqueda, un anuncio, un perfil de usuario o un pasaje de texto. La mayoría de las incrustaciones provienen de modelos de doble codificador que el equipo ajustó a partir de PhoBERT, optimizados para la comprensión del idioma vietnamita — la experiencia de dominio que hace que los resultados de Cốc Cốc sean vietnamitas y no simplemente traducidos.
Para cumplir con los requisitos de latencia y memoria en producción, Cốc Cốc aplica optimización de modelos para reducir sus incrustaciones de producción a 128 dimensiones, manteniendo a la vez la calidad de la recuperación. Los vectores más compactos significan menos memoria por vector y un cálculo de distancia más rápido, lo que ayuda a mantener la memoria por nodo manejable a esta escala. Eso le dio al equipo un vector compacto y de alta calidad sobre el cual construir. La siguiente pregunta fue qué índice construir sobre él.
Milvus admite múltiples tipos de índice con un índice diferente para cada carga de trabajo
Las cargas de trabajo de Cốc Cốc tiran en direcciones opuestas. La búsqueda orientada al usuario quiere la menor latencia posible con una alta recuperación; los pipelines por lotes fuera de línea quieren resultados exactos y no les importa cuánto tarden. Milvus admite HNSW, la familia IVF, FLAT y más en el mismo despliegue — así que en lugar de elegir un índice y usarlo en todas partes, el equipo pudo comparar las opciones con sus propios datos y luego ejecutar diferentes índices en paralelo.
Para los servicios en línea, compararon las opciones en cuanto a recuperación, tamaño del índice y rendimiento:
- IVF-SQ8 — una huella de memoria pequeña, pero menor recuperación y mayor latencia.
- IVF-PQ — una huella aún más pequeña que IVF-SQ8, con menor recuperación otra vez.
- HNSW — la mejor recuperación, con un 99%–100%, y la menor latencia, a un mayor costo de memoria.
Debido a que la latencia es la restricción determinante para los servicios orientados al usuario y la memoria no es actualmente el factor limitante en su despliegue, eligieron HNSW y aceptaron la compensación de memoria. Para las cargas de trabajo por lotes fuera de línea — pipelines diarios de inferencia y procesamiento de datos — usan el índice FLAT en su lugar, logrando una búsqueda exacta del vecino más cercano con 100% de recuperación, de modo que el procesamiento posterior trabaja a partir de la verdad fundamental. Ninguna carga de trabajo se conforma con el compromiso de la otra, y ninguna necesita su propia base de datos.
Recuperación híbrida para la coincidencia de anuncios, integrada en Milvus
Hacer coincidir anuncios tanto por redacción exacta como por intención generalmente implica ejecutar un clúster de búsqueda por palabras clave junto a una base de datos vectorial y unir los dos conjuntos de resultados en el código de la aplicación. Milvus elimina esa división: la recuperación léxica y semántica son nativas de la misma consulta.
Para cada consulta de usuario en el sistema de anuncios de búsqueda con IA de Cốc Cốc, dos rutas de recuperación se ejecutan en paralelo:
- Una búsqueda semántica ANN sobre el campo de embeddings densos, usando el índice HNSW.
- Una búsqueda de texto completo sobre un campo de vectores dispersos que Milvus genera por sí mismo, a través de su función integrada BM25 — así que no hay un segundo índice léxico que el equipo deba construir, ejecutar o mantener sincronizado.
Milvus luego fusiona los dos conjuntos de resultados usando WeightedRanker, su primitiva de fusión integrada, con pesos controlados por Cốc Cốc. El equipo se decidió por 0.6 hacia denso y 0.4 hacia disperso — apoyándose ligeramente en la comprensión semántica mientras se mantiene un peso real en la coincidencia exacta de palabras clave. Eso produce una recuperación de anuncios de mayor calidad: el lado denso capta la intención que el anunciante nunca expresó, y el lado disperso protege los casos de coincidencia exacta que importan comercialmente. Cuando el equilibrio necesita cambiar, es un único número ajustable en lugar de una re-arquitectura.
Llevando la búsqueda híbrida de Milvus dentro del presupuesto de latencia
Cuando Cốc Cốc enrutó por primera vez todo el tráfico de producción a través de la búsqueda híbrida, con un pico de aproximadamente 166 solicitudes por segundo, la latencia de recuperación híbrida alcanzó unos 120 ms en P90 — por encima de su objetivo.
La respuesta del equipo fue arquitectónica en lugar de un retroceso en la calidad. Introdujeron una caché TTL a nivel de aplicación de 24 horas frente a la capa de recuperación. Con una tasa de aciertos de caché de aproximadamente 60%, la carga efectiva sobre Milvus durante el tráfico pico cayó a unos 67 RPS, y la latencia volvió a estar dentro de los requisitos de producción. Nada en la recuperación en sí cambió: Milvus siguió devolviendo los mismos resultados híbridos con la misma calidad, y Cốc Cốc simplemente cambió cuánto tráfico tenía que manejar.
Manteniendo la latencia estable bajo ingesta continua
Las colecciones de Cốc Cốc no son estáticas; las inserciones, upserts, la construcción de índices y la compactación se ejecutan contra un sistema en vivo. Milvus maneja estas operaciones como operaciones en segundo plano, de modo que las colecciones permanecen buscables mientras se escriben y se reindexan. Para que la latencia no solo esté disponible sino que sea predecible, el equipo programa ese trabajo en segundo plano en una ventana de baja actividad — de 2 a 4 A.M. — para que el mantenimiento y el tráfico de usuarios nunca compitan por los mismos recursos.
Resultados y beneficios
- 700 millones de vectores en producción, con margen planificado hasta ~1.500 millones. El despliegue de Cốc Cốc actualmente contiene aproximadamente 700 millones de vectores en múltiples casos de uso de producción, y el equipo ha diseñado su infraestructura para escalar cómodamente más allá de 1.000 millones — con capacidad planificada para aproximadamente 1.500 millones — sin rediseñar la capa de recuperación.
- Latencia de búsqueda semántica P90 de 19,8 ms en hora punta. Para la búsqueda semántica normal en hora punta (34 RPS), Cốc Cốc mantiene un P50 de 11,1 ms, P90 de 19,8 ms, P95 de 26,7 ms y P99 de 88,3 ms.
- P90 de búsqueda híbrida reducido a 32,1 ms, lo que lleva a producción una mejora de la calidad de recuperación que estaba bloqueada por la latencia. En hora punta (166 RPS, ~67 RPS efectivos con una tasa de acierto de caché del 60%), Cốc Cốc mantiene un P50 de 17,1 ms, P90 de 32,1 ms, P95 de 41,6 ms y P99 de 126 ms.
- 99–100% de recall en línea, 100% de recall fuera de línea. HNSW ofrece a los servicios orientados al usuario un recall casi exhaustivo con la latencia más baja entre los índices probados, mientras que FLAT proporciona a los pipelines fuera de línea resultados exactos de vecino más cercano, de modo que los resultados por lotes se basan en la verdad fundamental (ground truth) y no en aproximaciones.
- El 30% de las solicitudes de búsqueda ahora son atendidas por la recuperación semántica impulsada por Milvus, lo que amplía la cobertura de AI Search (del 63% al 92%) con mejores resultados que la búsqueda por palabras clave por sí sola.
- La búsqueda vectorial sobre cientos de millones de vectores con un pico de 166 RPS es ahora una carga de trabajo sobre la que el equipo de Cốc Cốc puede construir: una clase de aplicación, bajo estrictas restricciones de baja latencia y alto rendimiento, que estaba fuera de su alcance en su pila anterior.
El beneficio estratégico es que la recuperación ya no es la limitación de lo que Cốc Cốc puede lanzar. Cinco sistemas distintos — búsqueda web, anuncios, sugerencias, segmentación y RAG interno — ahora se ejecutan sobre una única base de recuperación que el equipo controla de punta a punta.
Consejos de Cốc Cốc para equipos que construyen búsqueda de IA a gran escala
El equipo de Cốc Cốc ha recorrido toda la curva desde la prueba de concepto hasta la producción a escala nacional. Sus consejos para colegas que siguen el mismo camino:
- Empieza pequeño, pero empieza en producción. Construye una prueba de concepto con unos pocos millones de vectores — por ejemplo, tres meses de datos — y pon ese servicio a pequeña escala frente a tráfico real de producción antes de escalar a uno o dos años de datos. Supervisa la utilización de CPU y RAM de forma continua mientras creces, y dimensiona el hardware según lo que realmente observes.
- Haz pruebas comparativas de los tipos de índice y configuraciones contra tu propia carga de trabajo. No te quedes con la opción predeterminada. Evalúa diferentes tipos de índice y diferentes configuraciones dentro de cada tipo, luego ejecuta pruebas de carga y mide la latencia P50, P90 y P95. Así es como encuentras la configuración que se ajusta a tu carga de trabajo, y la respuesta rara vez es la misma para los caminos en línea y fuera de línea.
- Dale a la base de datos vectorial su propio hardware. Invierte en nodos de servidor dedicados para la base de datos vectorial distribuida, en hardware moderno. Compartir infraestructura con otros servicios crea problemas operativos que empeoran a medida que creces; los nodos dedicados proporcionan una base más escalable y mantenible.
Próximos pasos
El despliegue de Milvus de Cốc Cốc actualmente ejecuta la versión 2.5.21, y el siguiente paso del equipo es migrar a una versión más reciente para evaluar las mejoras — particularmente en latencia de búsqueda y eficiencia de hardware — y probar nuevas funciones y configuraciones. Más allá de la actualización, el equipo sigue buscando oportunidades para aplicar la búsqueda vectorial en los productos actuales y futuros de Cốc Cốc.
Primeros pasos con Milvus
Milvus es la base de datos vectorial de código abierto más adoptada del mundo, diseñada específicamente para la búsqueda vectorial a escala masiva — con búsqueda híbrida nativa, una gama completa de tipos de índice y una arquitectura distribuida que se ejecuta en cualquier lugar, desde una laptop hasta un clúster de Kubernetes de producción. Ha superado las 45,000 estrellas de GitHub y 100 millones de descargas de Docker, y respalda a más de 10,000 empresas y compañías nativas de IA en todo el mundo. La última versión, Milvus 3.0, añade una arquitectura nativa de lago que indexa y recupera datos directamente desde el almacenamiento de objetos.
Ya sea que estés construyendo búsqueda de IA, recuperación de anuncios o RAG, Milvus te brinda la misma base de recuperación que impulsa a Cốc Cốc. Comienza en GitHub de Milvus, lee la documentación de Milvus, o únete a la comunidad en Discord.
Zilliz Cloud es una Vector Lakebase totalmente administrada construida por el equipo detrás de Milvus. Totalmente compatible con la API de Milvus, ofrece hasta 10 veces mejor rendimiento por precio con su motor de indexación patentado Cardinal, además de seguridad de grado empresarial, confiabilidad, escalabilidad y un SLA de hasta el 99.99%.
- Acerca de Cốc Cốc
- El desafío
- Por qué Milvus
- La solución
- Resultados y beneficios
- Consejos de Cốc Cốc para equipos que construyen búsqueda de IA a gran escala
- Próximos pasos
- Primeros pasos con Milvus
Contenido
Caso de uso
Industria
Servicios de Internet


