Revolucionando a interação de IA: integrando Mistral AI e MongoDB para um aplicativo LLM GenAI personalizado
Avalie esse Tutorial
Modelos de linguagem grandes (LLMs) são conhecidos por sua capacidade de conversar conosco de maneira quase semelhante à dos humanos. No entanto, a complexidade de seu funcionamento interno geralmente permanece coberta de mistério, gerando intrigas. Essa intriga se intensifica quando consideramos os desafios de privacidade associados às tecnologias de AI.
Além das preocupações com a privacidade, o custo é outro desafio significativo. A implantação de um modelo de linguagem grande é crucial para aplicativos de AI, e há duas opções principais: modelos auto-hospedados ou baseados em API. Com os LLMs baseados em API, o modelo é hospedado por um provedor de serviços, e os custos são acumulados com cada solicitação de API. Por outro lado, um LLM auto-hospedado é executado em sua própria infraestrutura, dando a você controle total sobre os custos. A maior parte das despesas de um LLM auto-hospedado refere-se ao hardware necessário.
Outro aspecto a considerar é a disponibilidade de modelos LLM. Com modelos baseados em API, em tempos de alta demanda, a disponibilidade do modelo pode ser comprometida. Por outro lado, gerenciar seu próprio LLM garante o controle sobre a disponibilidade. Você poderá garantir que todas as suas consultas ao seu LLM autogerenciado possam ser tratadas adequadamente e sob seu controle.
AMistral AI, uma startup francesa, introduziu soluções Inovadoras com o Mistral 7B model, o Mister Mixture ofExperts e o Mister Platform, todos representando um estado de abertura. Este artigo explora como a Mistral AI, em colaboração com o MongoDB, uma plataforma de dados para desenvolvedores que unifica serviços de dados operacionais, analíticos e de pesquisa vetorial, está redefinindo nossa interação com a IA. Analisaremos a integração da Mistral AI com o MongoDB Atlas e discutiremos seu impacto na privacidade, eficiência de custos e acessibilidade da IA.
A Mistral AI surgiu como um ator fundamental na comunidade de AI de código aberto, estabelecendo novos padrões em inovação em AI. Vamos detalhar o que torna a AI do Miscal tão transformativa.
O compromisso da Mistral AI com a abertura está no centro de sua filosofia. Esse compromisso vai além do simples fornecimento de código-fonte aberto; trata-se de defender modelos de AI transparentes e adaptáveis. Ao priorizar a Transparência, a Mistral AI habilita os usuários a realmente possuir e moldar o futuro da AI. Essa abordagem é fundamental para garantir que a AI continue sendo uma força positiva e acessível para todos.
A Mistral AI deu um salto monumental com o lançamento do Mixtral 8x7B, um modelo inovador de mistura esparsa de especialistas (SMoE) com pesos abertos. Um SMoE é uma arquitetura de rede neural que aumenta a eficiência e a escalabilidade do modelo tradicional. Ele utiliza sub-redes especializadas “expert” para lidar com diferentes segmentos de entrada. O Mixtral incorpora oito dessas sub-redes de especialistas.
Licenciado sob Apache 2.0, Mixtral define uma nova referência no cenário de AI. Veja mais de perto o que faz do Mixtral 8x7B um avanço pioneiro.
O Mixtral 8x7B se destaca pela utilização eficiente de parâmetros e desempenho de alta qualidade. Apesar de sua contagem total de parâmetros de 46.7 bilhões, opera usando apenas 12.9 bilhões de parâmetros por token. Essa arquitetura exclusiva permite que a Mixtral mantenha a velocidade e a eficiência de custos de um 12.9 modelo de bilhões de parâmetros, oferecendo os recursos de um modelo muito maior.
A Mixtral compete com modelos principais, como o Llama 2 70B e o GPT-3.5, destacando-se no tratamento de grandes contextos, processamento multilíngue, geração de código e acompanhamento de instruções. O modelo Mixtral 8x7B combina eficiência de custo com alto desempenho, usando uma mistura esparsa de rede de especialistas para uso otimizado de recursos, oferecendo resultados premium a custos mais baixos em comparação com modelos semelhantes.
A plataforma beta da Mistral AI oferece aos desenvolvedores modelos generativos com foco na simplicidade: Mistral-tiny para geração econômica de texto somente em inglês (7).6 Pontuação MT-bench), Mistral-small para suporte multilíngue, incluindo codificação (8).3 score) e Mistral-Medium para saída multilíngue de alta qualidade (8.6 pontuação). Esses modelos fáceis de usar e ajustados com precisão facilitam a implantação eficiente da AI, conforme demonstrado em nosso artigo usando o Mistral-tiny e o modelo de incorporação da plataforma.
MongoDB Atlas é uma plataforma exclusiva totalmente gerenciada que integra dados empresariais, pesquisa vetorial e análise, permitindo a criação de aplicativos de AI personalizados. Ele vai além da pesquisa vetorial padrão com um ecossistema abrangente, incluindo modelos como o Miscal, diferenciando-o em termos de unificação, escalabilidade e segurança.
O MongoDB Atlas unifica serviços de dados operacionais, analíticos e de pesquisa de vetores para simplificar a criação de aplicativos enriquecidos com IA generativa. Da prova de conceito à produção, o MongoDB Atlas capacita os desenvolvedores com escalabilidade, segurança e desempenho para seus aplicativos de produção de função crítica.
De acordo com o relatório Retool AI, o MongoDB assume a frente, garantindo seu lugar como o banco de dados vetorial mais bem classificado.
- O Vector Store funciona facilmente junto com os bancos de dados MongoDB atuais, tornando-o uma adição simples para grupos que já usam o MongoDB para gerenciar seus dados. Isso significa que eles podem começar a usar o armazenamento vetorial sem precisar fazer grandes mudanças em seus sistemas.
- O MongoDB Atlas foi criado especificamente para lidar com aplicativos críticos de grande escala e operação, demonstrando sua robustez e confiabilidade. Isso é especialmente importante em aplicativos em que é essencial ter dados precisos e acessíveis.
- Os dados no MongoDB Atlas são armazenados no formato JSON, o que o torna a opção ideal para gerenciar uma variedade de tipos de dados e estruturas. Isso é particularmente útil para aplicativos de AI, em que o tipo de dados pode variar de incorporações e texto a números inteiros, valores de ponto flutuante, GeoJSON e muito mais.
- O MongoDB Atlas foi projetado para uso empresarial, oferecendo segurança de nível superior, capacidade de operar em vários serviços de nuvem e é totalmente gerenciado. Isso garante que as organizações possam confiar nela para operações seguras, confiáveis e eficientes.
Com o MongoDB Atlas, as organizações podem armazenar e recuperar com confiança incorporações junto com seus dados existentes, liberando todo o potencial da AI para seus aplicativos.
A criação de um aplicativo LLM GenAI auto-hospedado integra o poder da AI de código aberto com a robustez de um armazenamento de vetores de nível empresarial como o MongoDB. Veja abaixo um guia passo a passo detalhado para implementar esse sistema inovador:
A primeira etapa é coletar dados relevantes para o domínio do seu aplicativo, incluindo documentos de texto, páginas da web e, o mais importante, dados operacionais já armazenados no MongoDB Atlas. Aproveitar os dados operacionais do Atlas adiciona uma camada de profundidade, garantindo que seu aplicativo de AI seja alimentado por dados abrangentes e em tempo real, o que é crucial para respostas de AI contextualmente enriquecidas.
Em seguida, dividimos os dados em partes menores e mais gerenciáveis. Essa divisão é crucial para o processamento eficiente de dados, garantindo que o modelo de AI interaja com dados precisos e que reflitam o contexto operacional da sua empresa.
Utilize o ponto de extremidade de incorporação da Mistral AI para transformar seus dados de texto segmentados em incorporações. Esses embeddings são representações numéricas que capturam a essência do seu texto, tornando-o compreensível e utilizável por modelos de AI.
Depois de fazer suas incorporações, armazene-as no armazenamento de vetores do MongoDB. O MongoDB Atlas, com seus avançados recursos de pesquisa, permite o armazenamento e o gerenciamento eficientes dessas incorporações, garantindo que elas estejam facilmente acessíveis quando necessário.
Use o recursode pesquisa vetorial do MongoDB para consultar seus dados armazenados. Você só precisa criar um índice de pesquisa vetorial no campo de incorporação em seu documento. Esse recurso avançado permite que você realize pesquisas complexas e recupere as informações mais relevantes com base nos parâmetros de consulta.
Quando um usuário fizer uma pergunta, gere uma incorporação para esta consulta. Em seguida, usando a funcionalidade de pesquisa do MongoDB, recupere os blocos de dados mais semelhantes a essa incorporação de consulta. Essa etapa é fundamental para encontrar as informações mais relevantes para responder à pergunta do usuário.
Combine os segmentos recuperados e a query original do usuário para criar um prompt abrangente. Esse prompt fornecerá um contexto para o modelo de AI, garantindo que as respostas geradas sejam relevantes e precisas.
Alimente o prompt contextualizado no Mistra AI 7B LLM. O modelo então gerará uma resposta personalizada com base no contexto fornecido. Essa etapa aproveita os recursos avançados do Mistral AI para fornecer respostas específicas, precisas e relevantes às consultas dos usuários.
Agora que temos uma compreensão abrangente da Mistral AI e do MongoDB Atlas e da visão geral do seu próximo aplicativo GenAI personalizado, vamos nos envolver na implementação de um aplicativo GenAI personalizado de modelo de linguagem grande. Este aplicativo permitirá que você tenha seu próprio assistente de AI personalizado, alimentada pela AI do Mistra e suportada pelo gerenciamento eficiente de dados do MongoDB Atlas.
Nesta seção, explicaremos os pré-requisitos e quatro partes do código:
- Bibliotecas necessárias
- Processo de preparação de dados
- Processo de perguntas e respostas
- Interface do usuário por meio do Gradio
Conforme explicado acima, neste artigo vamos aproveitar o modelo Mistral AI por meio do Mistral “La plateforme.” Para obter acesso, você deve primeiro criar uma conta no Mistral AI. Pode ser necessário esperar algumas horas (ou um dia) antes que sua conta seja ativada.
Depois que sua conta estiver ativada, você poderá adicionar sua assinatura. Siga as instruções passo a passo na plataforma Miscal AI.
Depois de configurar sua assinatura, você pode gerar sua chave de API para uso futuro.
Além de usar o Mistral AI “La plateforme,”, você tem outra opção para implementar o modelo Mistral AI em uma máquina com GPUs Nvidia V100, V100S ou A100 (lista não exaustiva). Se você deseja implantar um modelo de linguagem grande auto-hospedado em uma nuvem pública ou privada, consulte meu artigo anterior sobre como implantar o Mistral AI em 10 minutos.
Esta seção mostra as versões das bibliotecas necessárias. Pessoalmente, eu executo meu código no VScode. Portanto, você precisa instalar as seguintes bibliotecas com antecedência. Aqui está a versão no momento em que estou executando o seguinte código.
1 mistralai 0.0.8 2 pymongo 4.3.3 3 gradio 4.10.0 4 gradio_client 0.7.3 5 langchain 0.0.348 6 langchain-core 0.0.12 7 pandas 2.0.3
Isso inclui bibliotecas para processamento de dados, raspagem da Web, modelos de AI e interações de banco de dados.
1 import gradio as gr 2 import os 3 import pymongo 4 import pandas as pd 5 from mistralai.client import MistralClient 6 from mistralai.models.chat_completion import ChatMessage 7 from langchain.document_loaders import PyPDFLoader 8 from langchain.text_splitter import RecursiveCharacterTextSplitter
A função data_prep() carrega dados de um PDF, um documento ou uma URL especificada. Ele extrai conteúdo de texto de uma página da Web/documentação, remove elementos indesejados e, em seguida, divide os dados em blocos gerenciáveis.
Depois que os dados são fragmentados, usamos o endpoint de incorporação da Mistra AI para calcular as incorporações de cada chunk e salvá-las no documento. Depois, cada documento é adicionado a uma collection do MongoDB.
1 def data_prep(file): 2 # Set up Mistral client 3 api_key = os.environ["MISTRAL_API_KEY"] 4 client = MistralClient(api_key=api_key) 5 6 # Process the uploaded file 7 loader = PyPDFLoader(file.name) 8 pages = loader.load_and_split() 9 10 # Split data 11 text_splitter = RecursiveCharacterTextSplitter( 12 chunk_size=100, 13 chunk_overlap=20, 14 separators=["\n\n", "\n", "(?<=\. )", " ", ""], 15 length_function=len, 16 ) 17 docs = text_splitter.split_documents(pages) 18 19 # Calculate embeddings and store into MongoDB 20 text_chunks = [text.page_content for text in docs] 21 df = pd.DataFrame({'text_chunks': text_chunks}) 22 df['embedding'] = df.text_chunks.apply(lambda x: get_embedding(x, client)) 23 24 collection = connect_mongodb() 25 df_dict = df.to_dict(orient='records') 26 collection.insert_many(df_dict) 27 28 return "PDF processed and data stored in MongoDB."
A função
connect_mongodb()
estabelece uma conexão com um MongoDB Server. Retorna um collection que pode ser usado para interagir com o banco de dados. Esta função será chamada na função data_prep()
.Para obter sua string de conexão do MongoDB, você pode acessar o console MongoDB Atlas, clicar no botão “Connect” no seu cluster e escolher o driver Python.
1 def connect_mongodb(): 2 # Your MongoDB connection string 3 mongo_url = os.environ["MONGO_URI"] 4 client = pymongo.MongoClient(mongo_url) 5 db = client["mistralpdf"] 6 collection = db["pdfRAG"] 7 return collection
Você pode importar sua mongo_url executando o seguinte comando no shell.
1 export MONGO_URI="Your_cluster_connection_string"
A função get_embedding(text) gera uma incorporação para um determinado texto. Ele substitui os caracteres de nova linha e, em seguida, usa os endpoints de incorporação "La plateforme " da Mitral AI para obter a incorporação. Essa função será chamada nos processos de preparação de dados e de perguntas e respostas.
1 def get_embedding(text, client): 2 text = text.replace("\n", " ") 3 embeddings_batch_response = client.embeddings( 4 model="mistral-embed", 5 input=text, 6 ) 7 return embeddings_batch_response.data[0].embedding
Esta função é o núcleo do programa. Ele processa a pergunta de um usuário e cria uma resposta usando o contexto fornecido pela Mistral AI.
Este processo envolve várias etapas importantes. Aqui está como funciona:
- Em primeiro lugar, geramos uma representação numérica, chamada de incorporação, por meio de um ponto de extremidade de incorporação da Mistral AI, para a pergunta do usuário.
- Em seguida, executamos uma pesquisa vetorial na coleção MongoDB para identificar os documentos semelhantes à pergunta do usuário.
- Em seguida, ele constrói um plano de fundo contextual combinando pedaços de texto desses documentos semelhantes. Preparamos uma instrução auxiliar combinando todas essas informações.
- A pergunta do usuário e as instruções do assistente são preparadas em um prompt para o modelo Miscal AI.
- Finalmente, a Mistral AI gerará respostas para o usuário graças ao processo de geração aumentada de recuperação.
1 def qna(users_question): 2 # Set up Mistral client 3 api_key = os.environ["MISTRAL_API_KEY"] 4 client = MistralClient(api_key=api_key) 5 6 question_embedding = get_embedding(users_question, client) 7 print("-----Here is user question------") 8 print(users_question) 9 documents = find_similar_documents(question_embedding) 10 11 print("-----Retrieved documents------") 12 print(documents) 13 for doc in documents: 14 doc['text_chunks'] = doc['text_chunks'].replace('\n', ' ') 15 16 for document in documents: 17 print(str(document) + "\n") 18 19 context = " ".join([doc["text_chunks"] for doc in documents]) 20 template = f""" 21 You are an expert who loves to help people! Given the following context sections, answer the 22 question using only the given context. If you are unsure and the answer is not 23 explicitly written in the documentation, say "Sorry, I don't know how to help with that." 24 25 Context sections: 26 {context} 27 28 Question: 29 {users_question} 30 31 Answer: 32 """ 33 messages = [ChatMessage(role="user", content=template)] 34 chat_response = client.chat( 35 model="mistral-tiny", 36 messages=messages, 37 ) 38 formatted_documents = '\n'.join([doc['text_chunks'] for doc in documents]) 39 40 return chat_response.choices[0].message, formatted_documents
Para executar uma consulta de pesquisa vetorial, você só precisa criar um índice de pesquisa vetorial no MongoDB Atlas da seguinte maneira. (Você também pode aprender mais sobre como criar um índice de pesquisa vetorial.)
1 { 2 "type": "vectorSearch", 3 "fields": [ 4 { 5 "numDimensions": 1536, 6 "path": "'embedding'", 7 "similarity": "cosine", 8 "type": "vector" 9 } 10 ] 11 }
A função find_ similar_documents (embedding) executa a query de pesquisa vetorial em uma collection do MongoDB. Esta função será chamada quando o usuário fizer uma pergunta. Usaremos essa função para encontrar documentos semelhantes às perguntas no processo de perguntas e respostas.
1 def find_similar_documents(embedding): 2 collection = connect_mongodb() 3 documents = list( 4 collection.aggregate([ 5 { 6 "$vectorSearch": { 7 "index": "vector_index", 8 "path": "embedding", 9 "queryVector": embedding, 10 "numCandidates": 20, 11 "limit": 10 12 } 13 }, 14 {"$project": {"_id": 0, "text_chunks": 1}} 15 ])) 16 return documents
Para ter uma melhor experiência do usuário, agrupamos o upload do PDF e o chatbot em duas guias usando o Gradio. Gradio é uma biblioteca Python que permite a criação rápida de aplicativos web personalizáveis para modelos de machine learning e fluxos de trabalho de processamento de dados. Você pode colocar este código no final do seu arquivo Python. Dentro dessa função, dependendo de qual guia você está usando, seja preparação de dados ou pergunta e resposta, chamaremos a função explicada dataprep() ou a função qna().
1 # Gradio Interface for PDF Upload 2 pdf_upload_interface = gr.Interface( 3 fn=data_prep, 4 inputs=gr.File(label="Upload PDF"), 5 outputs="text", 6 allow_flagging="never" 7 ) 8 9 # Gradio Interface for Chatbot 10 chatbot_interface = gr.Interface( 11 fn=qna, 12 inputs=gr.Textbox(label="Enter Your Question"), 13 outputs=[ 14 gr.Textbox(label="Mistral Answer"), 15 gr.Textbox(label="Retrieved Documents from MongoDB Atlas") 16 ], 17 allow_flagging="never" 18 ) 19 20 # Combine interfaces into tabs 21 iface = gr.TabbedInterface( 22 [pdf_upload_interface, chatbot_interface], 23 ["Upload PDF", "Chatbot"] 24 ) 25 26 # Launch the Gradio app 27 iface.launch()
Este guia detalhado se aprofundou na combinação dinâmica da Mistral AI e do MongoDB, mostrando como desenvolver um aplicativo GenAI de modelo de linguagem grande sob medida. A integração dos recursos avançados da Mistral AI com os robustos recursos de gerenciamento de dados do MongoDB permite a criação de um assistente de AI personalizado que atenda a requisitos exclusivos.
Fornecemos uma metodologia simples e passo a passo, abrangendo tudo, desde a coleta e segmentação iniciais de dados até a geração de incorporações e a consulta eficiente de dados. Este guia serve como um plano abrangente para a implementação do sistema, complementado por exemplos práticos de código e instruções para configurar o Mistral AI em uma máquina alimentada por GPU e vinculá-la ao MongoDB.
Utilizando o Mistral AI e o MongoDB Atlas, os usuários obtêm acesso às amplas possibilidades dos aplicativos de AI, transformando nossa interação com a tecnologia e desbloqueando maneiras novas e seguras de aproveitar insights de dados enquanto mantém a privacidade.
Para saber mais sobre como o Atlas ajuda as organizações a integrar e operacionalizar dados GenAI e LLM, consulte nosso whitepaper Incorporação de IA generativa para explorar o RAG em mais detalhes.
Se quiser saber mais sobre como implantar uma AI Miscal auto-hospedada com o MongoDB, consulte meus artigos anteriores: Liberando a soberania de AI: obtendo o Miscal.ai 7Modelo B instalado e funcionando em menos de 10 minutos e Começando hoje com a Mistral AI e o MongoDB: um guia para novatos sobre um aplicativo auto-hospedado de AI generativa LLM. Combinação de especialistas explicada
Principais comentários nos fóruns
Ainda não há comentários sobre este artigo.