Construindo uma aplicação RAG com Milvus e Databricks DBRX
Introdução
Grandes Modelos de Linguagem (LLMs) continuam se desenvolvendo rapidamente, e novos modelos são lançados regularmente com capacidades aprimoradas em comparação com as versões anteriores. Em março de 2024, a Databricks, uma plataforma de dados líder, lançou seu primeiro modelo de código aberto, DBRX, um novo modelo de última geração com uma arquitetura mixture-of-experts (MoE) refinada. Este modelo somente decodificador baseado em transformer superou vários benchmarks como MMLU, Programação (HumanEval) e Matemática (GSM8K).
Integrar o DBRX a aplicações do mundo real abriu novos caminhos para a criação de aplicativos de GenAI poderosos, como sistemas de Geração Aumentada por Recuperação (RAG). Esses sistemas combinam a compreensão contextual dos LLMs com mecanismos eficientes de recuperação de informações para fornecer respostas altamente precisas e contextualmente relevantes, mesmo para consultas complexas.
Neste tutorial, exploraremos como criar uma aplicação RAG robusta combinando as capacidades do Milvus, um banco de dados vetorial escalável otimizado para busca por similaridade, e do DBRX. O Milvus permite o manuseio e a consulta eficientes de embeddings em larga escala, enquanto o DBRX fornece capacidades de processamento de linguagem natural (NLP) de ponta. Juntos, eles criam uma sinergia ideal para aplicações como gestão do conhecimento, suporte ao cliente e recomendações personalizadas.
Vá direto para o que você achar mais interessante:
Entendendo RAG
Apresentando o Milvus
Apresentando o Databricks DBRX
Apresentando a arquitetura MoE
Criar RAG com Milvus e DBRX: um guia passo a passo
Entendendo a Geração Aumentada por Recuperação (RAG)
Geração Aumentada por Recuperação (RAG) é uma abordagem híbrida que melhora o desempenho dos LLMs ao integrar sistemas externos de recuperação de informações. LLMs tradicionais dependem exclusivamente de seu conhecimento pré-treinado e do ajuste fino para gerar respostas, o que pode limitar sua eficácia diante de consultas que exigem informações atualizadas ou específicas de um domínio. RAG aborda essa limitação incorporando um mecanismo de recuperação que busca contexto ou dados relevantes de uma fonte externa, como um banco de dados vetorial ou um repositório de documentos, durante a inferência.
Um sistema RAG normalmente consiste em dois componentes principais:
Recuperador: Este componente é responsável por buscar informações relevantes em um grande corpus ou banco de dados com base na consulta ou entrada. Ao converter dados textuais em embeddings, o recuperador possibilita a busca semântica, aproveitando bancos de dados vetoriais, como Milvus ou Zilliz, como sistemas de armazenamento de base de conhecimento e identifica com eficiência as informações mais relevantes.
Gerador: Usando o contexto recuperado como entrada, o LLM gera uma resposta que é tanto informada pelos dados externos quanto coerente com a consulta de entrada. Isso garante que as respostas não sejam apenas precisas, mas também fundamentadas nas informações mais relevantes e atualizadas.
arquitetura RAG
Figura 1: Arquitetura RAG
Ao combinar recuperação e geração, os sistemas RAG podem produzir respostas mais precisas, contextualmente conscientes e fundamentadas em fatos, tornando-os altamente valiosos em casos de uso como:
Consulta a Bases de Conhecimento: Fornecer respostas detalhadas e precisas a partir de grandes conjuntos de dados não estruturados.
Suporte ao Cliente: Entregar respostas personalizadas e precisas ao consultar bases de conhecimento específicas.
Criação de Conteúdo: Auxiliar na escrita criativa ou técnica ao obter informações contextualmente relevantes.
Pesquisa Científica: Resumir descobertas de pesquisa ou responder a consultas específicas de domínio extraindo informações de artigos acadêmicos ou bancos de dados.
Banco de Dados Vetorial Milvus
Milvus é um banco de dados vetorial de código aberto projetado para gerenciar, armazenar e consultar embeddings vetoriais em larga escala de forma eficiente. Ele é amplamente usado em aplicações que exigem busca por similaridade e recuperação semântica, como pipelines de Geração Aumentada por Recuperação (RAG), sistemas de recomendação, chatbots, mecanismos de busca semântica etc.
Por que o Milvus é ideal para sistemas RAG?
Em sistemas RAG, um banco de dados vetorial como Milvus atua como a espinha dorsal do componente recuperador. Veja como ele se encaixa na arquitetura:
Armazenamento Eficiente: O Milvus pode armazenar embeddings de alta dimensionalidade em escala de bilhões, gerados a partir de dados textuais ou multimodais, possibilitando uma representação compacta e eficiente de vastas bases de conhecimento.
Recuperação Rápida: Quando uma consulta é inserida no sistema, o Milvus realiza uma busca semântica para recuperar os embeddings mais relevantes, que são então usados para fornecer contexto ao modelo gerador.
Escalabilidade: Milvus garante que, mesmo à medida que o tamanho da base de conhecimento cresce, o processo de recuperação permaneça performático, permitindo que sistemas RAG escalem para demandas empresariais.
Apresentando o DBRX
DBRX é o novo LLM da Databricks lançado em março de 2024, como a primeira contribuição de código aberto da empresa para o crescente ecossistema de tecnologias avançadas de IA. Ele vem em duas versões: o modelo base (DBRX Base) e o modelo ajustado por fine-tuning (DBRX Instruct). Construído sobre uma arquitetura baseada em transformer e apenas com decoder, o DBRX emprega um design de mistura de especialistas (MoE) de granularidade fina que o diferencia de muitos modelos existentes. Essa arquitetura inovadora permite que o DBRX aloque dinamicamente recursos computacionais para diferentes tarefas ou consultas, tornando-o altamente eficiente e adaptável a vários casos de uso. Antes de nos aprofundarmos no DBRX, vamos aprender alguns conceitos básicos da arquitetura Mixture of Expert (MoE) .
Arquitetura de Mistura de Especialistas (MoE)
A mistura de especialistas é uma arquitetura de rede neural que divide cargas de trabalho computacionais entre vários submodelos especializados, ou "especialistas." Diferentemente dos modelos tradicionais, que ativam todas as camadas e parâmetros uniformemente durante a inferência, a MoE seleciona e ativa dinamicamente apenas um subconjunto de especialistas mais relevante para uma determinada entrada. Essa ativação seletiva introduz tanto eficiência quanto especialização.
A arquitetura MoE vem com os seguintes componentes principais:
Redes de Especialistas: Múltiplos módulos de rede neural, cada um treinado para se especializar em diferentes tipos de entradas ou tarefas. Esses especialistas desenvolvem capacidades únicas para processar domínios de dados específicos ou resolver tipos particulares de problemas.
Mecanismo de Roteador: Um mecanismo sofisticado de gating seleciona e ativa dinamicamente os especialistas mais apropriados para uma determinada entrada. Esse sistema de roteamento usa parâmetros aprendíveis para determinar quais especialistas são mais relevantes para uma determinada tarefa.
Ativação Esparsa: Ativa apenas um subconjunto de especialistas para cada entrada, reduzindo drasticamente a complexidade computacional enquanto mantém alto desempenho. Essa abordagem garante que nem todos os parâmetros do modelo sejam envolvidos simultaneamente.
Figure 2: Camada Mixture of Experts (MoE)
Figura 2: Camada Mixture of Experts (MoE) | Fonte
A arquitetura MoE tem várias vantagens, incluindo:
Eficiência Computacional: Ativa apenas um subconjunto de especialistas para cada entrada, reduzindo os requisitos computacionais gerais.
Especialização Profunda: Permite que redes de especialistas individuais desenvolvam capacidades altamente focadas.
Arquitetura Escalável: Permite uma expansão mais fácil das capacidades do modelo ao adicionar mais especialistas.
Alocação Dinâmica de Recursos: Encaminha entradas de forma inteligente para os recursos computacionais mais apropriados.
Principais benefícios do DBRX
DBRX alcançou ótimos resultados em benchmarks-chave:
MMLU (Massive Multitask Language Understanding): Demonstra seu amplo conhecimento geral e suas habilidades de raciocínio.
Tarefas de Programação (HumanEval): Destaca-se na geração e compreensão de código, tornando-o ideal para suporte ao desenvolvimento de software.
Tarefas de Matemática (GSM8K): Mostra forte aptidão na resolução de problemas matemáticos complexos.
Figure 3: Benchmarks do DBRX
Figura 3: Benchmarks do DBRX (Fonte)
Escalabilidade e Eficiência:
DBRX é otimizado tanto para implantações em larga escala quanto para ambientes com recursos limitados, graças ao seu design MoE, que garante alta velocidade em termos de tokens processados por segundo.
Sua escalabilidade garante adequação para uma ampla gama de aplicações, desde sistemas de nível empresarial até configurações menores e específicas de domínio.
Figure 4: Inferência do DBRX
Figura 4: Inferência do DBRX (Fonte)
Acessibilidade Open-Source:
Como um modelo open-source, DBRX capacita desenvolvedores e organizações a experimentar, adaptar e inovar sem ficarem presos a ecossistemas proprietários.
A transparência de seu desenvolvimento incentiva uma abordagem orientada pela comunidade para a melhoria e integração do modelo.
DBRX em Sistemas RAG
DBRX é bem adequado para sistemas de Retrieval-Augmented Generation (RAG) devido à sua capacidade de gerar respostas contextualmente precisas e coerentes com base em informações recuperadas. As principais vantagens incluem:
Adaptabilidade Contextual: DBRX integra perfeitamente o contexto recuperado às suas saídas generativas, garantindo que as respostas sejam altamente relevantes e específicas para a consulta.
Ajuste Fino Específico de Domínio: Embora DBRX tenha desempenho excepcional imediatamente, ele também pode ser ajustado com dados específicos de domínio para aprimorar ainda mais sua precisão e relevância para aplicações especializadas.
Eficiência em Tarefas Complexas:.Com sua arquitetura MoE, DBRX pode lidar com consultas complexas e multifacetadas ao aproveitar eficientemente seus especialistas especializados, tornando-o ideal para sistemas RAG exigentes.
Aplicação RAG com Milvus e DBRX
Este tutorial em notebook demonstra como implementar um pipeline de Retrieval-Augmented Generation (RAG) usando Milvus como armazenamento vetorial, DBRX como modelo de linguagem e LangChain como framework. Dado o tamanho do modelo, esta implementação aproveita um endpoint de serviço de um workspace Databricks. Alternativamente, o modelo pode ser baixado via Ollama ou pela biblioteca Hugging Face Transformers, embora isso exija uma GPU de alto desempenho.
Etapa 1: Carregar os Dados
A fonte de dados para este tutorial é o blog oficial de lançamento do Databricks DBRX. O documento é carregado e dividido em partes gerenciáveis usando um método recursivo de divisão 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)
Etapa 2: Carregar Embeddings
Em seguida, utilizamos embeddings de código aberto da Hugging Face para codificar o conteúdo do documento para fins de recuperação.
# Load embeddings
embeddings = HuggingFaceBgeEmbeddings(
model_name = "BAAI/bge-small-en-v1.5")
Etapa 3: Criar o Recuperador Milvus
Milvus é configurado como o armazenamento vetorial, possibilitando buscas por similaridade eficientes. Uma vez configurado, o recuperador é testado com uma consulta de exemplo.
# 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
```
Etapa 4: Implementar o Pipeline RAG
O pipeline RAG integra o modelo Databricks DBRX para tarefas de perguntas e respostas. Para usar o modelo fora de um workspace Databricks, você precisa definir a URL do Databricks Host e o Token. O pipeline também inclui um template de prompt para respostas concisas e específicas ao 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)
Por fim, a cadeia RAG é construída para lidar com o processo de recuperação e geração. A cadeia processa consultas usando o recuperador, formata os resultados e gera respostas usando o 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 é um modelo de linguagem grande (LLM) somente decodificador baseado em transformer que foi treinado usando previsão do próximo token. Ele usa uma arquitetura de mistura de especialistas (MoE) refinada com um total de 132B parâmetros, dos quais 36B parâmetros estão ativos para qualquer entrada dada. DBRX foi pré-treinado em 12T tokens de dados de texto e código, e usa codificações de posição rotativas (RoPE), unidades lineares com portas (GLU) e atenção de consulta agrupada (GQA). Ele também usa o tokenizer do GPT-4. DBRX é conhecido por sua eficiência, com inferência até 2x mais rápida que o LLaMA2-70B, e tem cerca de 40% do tamanho do Grok-1 em termos de contagens de parâmetros totais e ativos. Ele supera o GPT-3.5 e é competitivo com o Gemini 1.0 Pro, sendo especialmente capaz como modelo de código, superando modelos especializados como CodeLLaMA-70B em tarefas de programação.'
```
Este tutorial pode ser encontrado no seguinte notebook.
Conclusão
A combinação da arquitetura inovadora de Mistura de Especialistas (MoE) do DBRX e do banco de dados vetorial escalável do Milvus estabelece uma base robusta para construir sistemas de IA inteligentes e sensíveis ao contexto. O design MoE refinado do DBRX permite que ele se adapte dinamicamente a tarefas diversas, garantindo eficiência computacional e desempenho excepcional em uma variedade de casos de uso. Essa capacidade é especialmente vital em sistemas de Geração Aumentada por Recuperação (RAG), nos quais a capacidade de gerar respostas contextualmente precisas e específicas de domínio é fundamental.
O Milvus complementa essa arquitetura ao permitir que sistemas RAG lidem facilmente com bases de conhecimento massivas. Essa combinação potencializa aplicações em áreas como gestão do conhecimento, suporte ao cliente, criação de conteúdo e pesquisa científica, entregando resultados relevantes fundamentados nas informações mais precisas e atualizadas. Para desenvolvedores e organizações, isso representa um avanço tecnológico e uma oportunidade de construir sistemas mais inteligentes, responsivos e sensíveis ao contexto.
Recursos Relacionados
Continue lendo

What Is a Vector Lakebase?
A Vector Lakebase is a unified, lake-native data architecture for AI that combines vector-database-grade serving with open lake storage, reusable lake-level indexes, and a shared semantic layer.

Migrating from S3 Vectors to Zilliz Cloud: Unlocking the Power of Tiered Storage
Learn how Zilliz Cloud bridges cost and performance with tiered storage and enterprise-grade features, and how to migrate data from AWS S3 Vectors to Zilliz Cloud.

Zilliz Cloud Update: Smarter Autoscaling for Cost Savings, Stronger Compliance with Audit Logs, and More
What's new in Zilliz Cloud? Smarter autoscaling with scale-down, audit logs GA, enhanced SSO, and Milvus 2.6 in Private Preview.



