Creación de una aplicación RAG con Milvus y Databricks DBRX
Introducción
Los modelos de lenguaje grandes (LLMs) siguen desarrollándose rápidamente, y se lanzan nuevos modelos con regularidad con capacidades mejoradas en comparación con las versiones anteriores. En marzo de 2024, Databricks, una plataforma de datos líder, lanzó su primer modelo de código abierto, DBRX, un nuevo modelo de vanguardia con una arquitectura de mezcla de expertos (MoE) de grano fino. Este modelo basado en transformers y solo decodificador ha superado varios benchmarks como MMLU, Programación (HumanEval) y Matemáticas (GSM8K).
Integrar DBRX en aplicaciones del mundo real ha abierto nuevas vías para crear potentes aplicaciones de GenAI, como los sistemas de generación aumentada por recuperación (RAG). Estos sistemas combinan la comprensión contextual de los LLMs con mecanismos eficientes de recuperación de información para ofrecer respuestas altamente precisas y contextualmente relevantes, incluso para consultas complejas.
En este tutorial, exploraremos cómo crear una aplicación RAG robusta combinando las capacidades de Milvus, una base de datos vectorial escalable optimizada para la búsqueda por similitud, y DBRX. Milvus permite manejar y consultar eficientemente embeddings a gran escala, mientras que DBRX proporciona capacidades de procesamiento del lenguaje natural (NLP) de última generación. Juntos, crean una sinergia ideal para aplicaciones como la gestión del conocimiento, el soporte al cliente y las recomendaciones personalizadas.
Salta a lo que te resulte más interesante:
Comprender RAG
Presentación de Milvus
Presentación de Databricks DBRX
Presentación de la arquitectura MoE
Crear RAG con Milvus y DBRX: una guía paso a paso
Comprender la generación aumentada por recuperación (RAG)
La generación aumentada por recuperación (RAG) es un enfoque híbrido que mejora el rendimiento de los LLMs mediante la integración de sistemas externos de recuperación de información. Los LLMs tradicionales dependen únicamente de su conocimiento preentrenado y del ajuste fino para generar respuestas, lo que puede limitar su eficacia cuando se enfrentan a consultas que requieren información actualizada o específica de un dominio. RAG aborda esta limitación incorporando un mecanismo de recuperación que obtiene contexto o datos relevantes de una fuente externa, como una base de datos vectorial o un repositorio de documentos, durante la inferencia.
Un sistema RAG suele constar de dos componentes clave:
Recuperador: Este componente se encarga de obtener información relevante de un gran corpus o base de datos en función de la consulta o entrada. Al convertir datos textuales en embeddings, el recuperador permite la búsqueda semántica, aprovechando bases de datos vectoriales, como Milvus o Zilliz, como sistemas de almacenamiento de bases de conocimiento e identifica eficientemente las piezas de información más relevantes.
Generador: Utilizando el contexto recuperado como entrada, el LLM genera una respuesta que está tanto informada por los datos externos como coherente con la consulta de entrada. Esto garantiza que las respuestas no solo sean precisas, sino que también estén fundamentadas en la información más relevante y actualizada.
Arquitectura RAG
Figura 1: Arquitectura RAG
Al combinar recuperación y generación, los sistemas RAG pueden producir respuestas más precisas, conscientes del contexto y basadas en hechos, lo que los hace muy valiosos en casos de uso como:
Consulta de Bases de Conocimiento: Proporcionar respuestas detalladas y precisas a partir de grandes conjuntos de datos no estructurados.
Atención al Cliente: Ofrecer respuestas personalizadas y precisas haciendo referencia a bases de conocimiento específicas.
Creación de Contenido: Ayudar con la escritura creativa o técnica obteniendo información contextualmente relevante.
Investigación Científica: Resumir hallazgos de investigación o responder consultas específicas de un dominio extrayendo información de artículos académicos o bases de datos.
Base de Datos Vectorial Milvus
Milvus es una base de datos vectorial de código abierto diseñada para gestionar, almacenar y consultar embeddings vectoriales a gran escala de manera eficiente. Se utiliza ampliamente en aplicaciones que requieren búsqueda por similitud y recuperación semántica, como pipelines de Generación Aumentada por Recuperación (RAG), sistemas de recomendación, chatbots, motores de búsqueda semántica, etc.
¿Por qué es Milvus ideal para sistemas RAG?
En los sistemas RAG, una base de datos vectorial como Milvus actúa como la columna vertebral del componente de recuperación. Así es como encaja en la arquitectura:
Almacenamiento Eficiente: Milvus puede almacenar embeddings de alta dimensionalidad a escala de miles de millones generados a partir de datos textuales o multimodales, lo que permite una representación compacta y eficiente de vastas bases de conocimiento.
Recuperación Rápida: Cuando se introduce una consulta en el sistema, Milvus realiza una búsqueda semántica para recuperar los embeddings más relevantes, que luego se utilizan para proporcionar contexto al modelo generador.
Escalabilidad: Milvus garantiza que, incluso a medida que crece el tamaño de la base de conocimiento, el proceso de recuperación siga siendo eficaz, lo que permite que los sistemas RAG escalen a las demandas empresariales.
Presentamos DBRX
DBRX es el nuevo LLM de Databricks lanzado en marzo de 2024, como la primera contribución de código abierto de la empresa al creciente ecosistema de tecnologías avanzadas de IA. Viene en dos versiones: el modelo base (DBRX Base) y el modelo ajustado finamente (DBRX Instruct). Construido sobre una arquitectura basada en transformers y solo de decodificador, DBRX emplea un diseño de mezcla de expertos (MoE) de grano fino que lo distingue de muchos modelos existentes. Esta arquitectura innovadora permite a DBRX asignar dinámicamente recursos computacionales a diferentes tareas o consultas, lo que lo hace altamente eficiente y adaptable a diversos casos de uso. Antes de profundizar en DBRX, aprendamos algunos conceptos básicos de la arquitectura Mixture of Expert (MoE) .
Arquitectura de Mixture of Experts (MoE)
La mezcla de expertos es una arquitectura de red neuronal que divide las cargas de trabajo computacionales entre múltiples submodelos especializados, o "expertos". A diferencia de los modelos tradicionales que activan todas las capas y parámetros de manera uniforme durante la inferencia, MoE selecciona y activa dinámicamente solo un subconjunto de expertos más relevantes para una entrada determinada. Esta activación selectiva introduce tanto eficiencia como especialización.
La arquitectura MoE incluye los siguientes componentes clave:
Redes Expertas: Múltiples módulos de redes neuronales, cada uno entrenado para especializarse en diferentes tipos de entradas o tareas. Estos expertos desarrollan capacidades únicas para procesar dominios de datos específicos o resolver tipos particulares de problemas.
Mecanismo de Enrutamiento: Un sofisticado mecanismo de compuerta selecciona y activa dinámicamente los expertos más apropiados para una entrada determinada. Este sistema de enrutamiento utiliza parámetros aprendibles para determinar qué expertos son más relevantes para una tarea determinada.
Activación dispersa: Activa solo un subconjunto de expertos para cada entrada, reduciendo drásticamente la complejidad computacional mientras mantiene un alto rendimiento. Este enfoque garantiza que no todos los parámetros del modelo se utilicen simultáneamente.
Figura 2: Capa de Mixture of Experts (MoE)
Figura 2: Capa de Mixture of Experts (MoE) | Fuente
La arquitectura MoE tiene varias ventajas, entre ellas:
Eficiencia computacional: Activa solo un subconjunto de expertos para cada entrada, reduciendo los requisitos computacionales generales.
Especialización profunda: Permite que las redes de expertos individuales desarrollen capacidades altamente enfocadas.
Arquitectura escalable: Permite una expansión más sencilla de las capacidades del modelo al añadir más expertos.
Asignación dinámica de recursos: Dirige inteligentemente las entradas a los recursos computacionales más apropiados.
Beneficios clave de DBRX
DBRX ha logrado excelentes resultados en benchmarks clave:
MMLU (Massive Multitask Language Understanding): Demuestra su amplio conocimiento general y sus capacidades de razonamiento.
Tareas de programación (HumanEval): Destaca en la generación y comprensión de código, lo que lo hace ideal para el soporte al desarrollo de software.
Tareas matemáticas (GSM8K): Muestra una gran aptitud para resolver problemas matemáticos complejos.
Figura 3: Benchmarks de DBRX
Figura 3: Benchmarks de DBRX (Fuente)
Escalabilidad y eficiencia:
DBRX está optimizado tanto para implementaciones a gran escala como para entornos con recursos limitados, gracias a su diseño MoE, que garantiza una alta velocidad en términos de tokens procesados por segundo.
Su escalabilidad garantiza su idoneidad para una amplia gama de aplicaciones, desde sistemas de nivel empresarial hasta configuraciones más pequeñas y específicas de dominio.
Figura 4: Inferencia de DBRX
Figura 4: Inferencia de DBRX (Fuente)
Accesibilidad de código abierto:
Como modelo de código abierto, DBRX permite a desarrolladores y organizaciones experimentar, adaptar e innovar sin estar vinculados a ecosistemas propietarios.
La transparencia de su desarrollo fomenta un enfoque impulsado por la comunidad para la mejora e integración del modelo.
DBRX en sistemas RAG
DBRX es muy adecuado para sistemas de Retrieval-Augmented Generation (RAG) debido a su capacidad para generar respuestas contextualmente precisas y coherentes basadas en información recuperada. Entre sus ventajas clave se incluyen:
Adaptabilidad contextual: DBRX integra sin problemas el contexto recuperado en sus salidas generativas, garantizando que las respuestas sean altamente relevantes y específicas para la consulta.
Ajuste fino específico de dominio: Aunque DBRX funciona excepcionalmente bien desde el primer uso, también puede ajustarse con datos específicos de dominio para mejorar aún más su precisión y relevancia en aplicaciones especializadas.
Eficiencia en tareas complejas:.Con su arquitectura MoE, DBRX puede manejar consultas complejas y multifacéticas aprovechando eficientemente sus expertos especializados, lo que lo hace ideal para sistemas RAG exigentes.
Aplicación RAG con Milvus y DBRX
Este tutorial de notebook demuestra cómo implementar una canalización de Retrieval-Augmented Generation (RAG) usando Milvus como almacén vectorial, DBRX como modelo de lenguaje y LangChain como framework. Dado el tamaño del modelo, esta implementación aprovecha un endpoint de servicio de un workspace de Databricks. Alternativamente, el modelo puede descargarse mediante Ollama o la biblioteca Hugging Face Transformers, aunque esto requiere una GPU de alto rendimiento.
Paso 1: Cargar los datos
La fuente de datos para este tutorial es el blog oficial de lanzamiento de Databricks DBRX. El documento se carga y se divide en fragmentos manejables mediante un método recursivo de división de texto.
# Load and split the documents
loader = WebBaseLoader("https://www.databricks.com/blog/introducing-dbrx-new-state-art-open-llm")
documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=2000, chunk_overlap=200)
docs = text_splitter.split_documents(documents)
Paso 2: Cargar embeddings
A continuación, utilizamos embeddings de código abierto de Hugging Face para codificar el contenido del documento con fines de recuperación.
# Load embeddings
embeddings = HuggingFaceBgeEmbeddings(
model_name = "BAAI/bge-small-en-v1.5")
Paso 3: Crear el recuperador de Milvus
Milvus se configura como el almacén vectorial, lo que permite realizar búsquedas de similitud eficientes. Una vez configurado, el recuperador se prueba con una consulta de ejemplo.
# Create Milvus Retriever
vectorstore = Milvus.from_documents(documents=docs,
embedding=embeddings,
collection_name='my_collection',
connection_args={
"uri": "./milvus_demo.db"}
)
retriever = vectorstore.as_retriever()
# Test retriever
query = "What is DBRX?"
vectorstore.similarity_search(query, k=1)
```
Output:
[Document(metadata={'description': '', 'language': 'en-US', 'pk': 454492864071335939, 'source': 'https://www.databricks.com/blog/introducing-dbrx-new-state-art-open-llm', 'title': 'Introducing DBRX: A New State-of-the-Art Open LLM | Databricks Blog'}, page_content='and GPT-3.5 Turbo on RAG tasks.Training mixture-of-experts models is hard. We had to overcome a variety of scientific and performance challenges to build a pipeline robust enough
```
Paso 4: Implementar el pipeline RAG
El pipeline RAG integra el modelo Databricks DBRX para tareas de preguntas y respuestas. Para usar el modelo fuera de un espacio de trabajo de Databricks, debes configurar la URL del host de Databricks y el token. El pipeline también incluye una plantilla de prompt para respuestas concisas y específicas del contexto.
# Load environment variables
DATABRICKS_HOST = userdata.get('DATABRICKS_HOST')
DATABRICKS_TOKEN = userdata.get('DATABRICKS_TOKEN')
# Set RAG pipeline with Databricks DBRX
llm = ChatDatabricks(endpoint="dbrx-instruct",
max_tokens=200)
PROMPT_TEMPLATE = """
Human: You are an AI assistant,that provides answers to questions related to Databricks.
Use the following pieces of information to provide a concise answer to the question enclosed in <question> tags.
If you don't know the answer, just say that you don't know, don't try to make up an answer.
<context>
{context}
</context>
<question>
{question}
</question>
The response should be specific and use only reliable Databricks information.
Assistant:"""
prompt = PromptTemplate(
template=PROMPT_TEMPLATE, input_variables=["context", "question"]
)
def format_docs(docs):
return "nn".join(doc.page_content for doc in docs)
Finalmente, se construye la cadena RAG para gestionar el proceso de recuperación y generación. La cadena procesa consultas utilizando el recuperador, formatea los resultados y genera respuestas usando el modelo DBRX.
# Define the RAG (Retrieval-Augmented Generation) chain
rag_chain = (
{"context": retriever | format_docs, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
res = rag_chain.invoke(query)
res
```
Output:
'DBRX es un modelo de lenguaje grande (LLM) basado en transformadores, solo decodificador, que fue entrenado mediante predicción del siguiente token. Utiliza una arquitectura de mezcla de expertos (MoE) de grano fino con un total de 132B parámetros, de los cuales 36B parámetros están activos para cualquier entrada dada. DBRX fue preentrenado con 12T tokens de datos de texto y código, y utiliza codificaciones de posición rotatorias (RoPE), unidades lineales con compuerta (GLU) y atención de consultas agrupadas (GQA). También utiliza el tokenizador de GPT-4. DBRX es conocido por su eficiencia, con una inferencia hasta 2 veces más rápida que LLaMA2-70B, y tiene aproximadamente el 40% del tamaño de Grok-1 en términos tanto del recuento total de parámetros como de los parámetros activos. Supera a GPT-3.5 y es competitivo con Gemini 1.0 Pro, y es especialmente capaz como modelo de código, superando a modelos especializados como CodeLLaMA-70B en tareas de programación.'
```
Este tutorial se puede encontrar en el siguiente notebook.
Conclusión
La combinación de la innovadora arquitectura de Mezcla de Expertos (MoE) de DBRX y la base de datos vectorial escalable de Milvus establece una base sólida para crear sistemas de IA inteligentes y conscientes del contexto. El diseño MoE de grano fino de DBRX le permite adaptarse dinámicamente a diversas tareas, garantizando eficiencia computacional y un rendimiento excepcional en una variedad de casos de uso. Esta capacidad es especialmente vital en los sistemas de Generación Aumentada por Recuperación (RAG), donde la capacidad de generar respuestas contextualmente precisas y específicas del dominio es fundamental.
Milvus complementa esta arquitectura al permitir que los sistemas RAG manejen fácilmente bases de conocimiento masivas. Esta combinación potencia aplicaciones en áreas como la gestión del conocimiento, la atención al cliente, la creación de contenido y la investigación científica, ofreciendo resultados relevantes basados en la información más precisa y actualizada. Para desarrolladores y organizaciones, esto representa un avance tecnológico y una oportunidad para crear sistemas más inteligentes, receptivos y conscientes del contexto.
Recursos relacionados
Sigue leyendo

Introducing Functions and Model Inference on Zilliz Cloud: Automatic Embedding and Reranking with Hosted Models
Zilliz Cloud Functions auto-generate embeddings via OpenAI, Voyage AI, Cohere, or Zilliz Hosted Models. Built-in reranking — just insert text and search.

Zilliz Cloud Audit Logs Goes GA: Security, Compliance, and Transparency at Scale
Zilliz Cloud Audit Logs are now GA, giving enterprises real-time visibility, compliance-ready trails, and stronger security across AWS, GCP, and Azure.

Announcing the General Availability of Zilliz Cloud BYOC on Google Cloud Platform
Zilliz Cloud BYOC on GCP offers enterprise vector search with full data sovereignty and seamless integration.



