Explore o novo chatbot do Developer Center! O MongoDB AI chatbot pode ser acessado na parte superior da sua navegação para responder a todas as suas perguntas sobre o MongoDB .

Junte-se a nós no Amazon Web Services re:Invent 2024! Saiba como usar o MongoDB para casos de uso de AI .
Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Produtoschevron-right
MongoDBchevron-right

Revolucionando a interação de IA: integrando Mistral AI e MongoDB para um aplicativo LLM GenAI personalizado

Han Heloir11 min read • Published Feb 08, 2024 • Updated Feb 13, 2024
MongoDB
Ícone do FacebookÍcone do Twitterícone do linkedin
Arquivo de data lake pronto para a Web
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
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.

O Mistral AI: um divisor de águas

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.

Um farol de abertura: a filosofia da Mistral AI

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.

Desempenho sem precedentes com Miscal 8x7B

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.

Alta performance com arquiteturas esparsas

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.

Desempenho superior, versatilidade e otimização do custo-desempenho

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.

Mister “La plateforme "

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.

Por que o MongoDB Atlas como um armazenamento de vetores?

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.
Principais bancos de dados vetoriais do Retool.ai
  • 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.

Visão geral e implementação de seu aplicativo LLM GenAI personalizado

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:
Visão geral e implementação de seu aplicativo LLM GenAI personalizado

1. Aquisição de dados e chunk

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.

2.1 Gerando incorporações

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.

2.2 Armazenar incorporações no armazenamento de vetores MongoDB

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.

2.3 Consultando seus dados

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.

3. & 4. Incorporando perguntas e recuperando blocos semelhantes

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.

5. Criação de prompt contextualizada

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.

6. & 7. Geração de resposta personalizada a partir da AIdo Miscal

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.

Implementando um aplicativo LLM GenAI personalizado com Miscal AI e MongoDB Atlas

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

0. Pré-requisitos

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.
Mistral AI La plateforme console
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.
Mistral AI La plateforme subscription
Mistral AI La plateforme API key
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.

1. Importe as bibliotecas necessárias

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.
1mistralai 0.0.8
2pymongo 4.3.3
3gradio 4.10.0
4gradio_client 0.7.3
5langchain 0.0.348
6langchain-core 0.0.12
7pandas 2.0.3
Isso inclui bibliotecas para processamento de dados, raspagem da Web, modelos de AI e interações de banco de dados.
1import gradio as gr
2import os
3import pymongo
4import pandas as pd
5from mistralai.client import MistralClient
6from mistralai.models.chat_completion import ChatMessage
7from langchain.document_loaders import PyPDFLoader
8from langchain.text_splitter import RecursiveCharacterTextSplitter

2. Preparação de dados

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.
Processo de preparação de dados
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.
1def 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."

Conectando ao servidor MongoDB

A funçãoconnect_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.
Conecte-se ao seu cluster
Obtenha sua string de conexão
1def 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.
1export MONGO_URI="Your_cluster_connection_string"

Obtendo a incorporação

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.
1def 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

3. Função de perguntas e respostas

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.
Processo de perguntas e respostas
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.
1def 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

A última configuração no índice de pesquisa vetorial do MongoDB

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}

Encontrar documentos semelhantes

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.
1def 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

4. Interface do usuário do Gradio

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
2pdf_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
10chatbot_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
21iface = gr.TabbedInterface(
22 [pdf_upload_interface, chatbot_interface],
23 ["Upload PDF", "Chatbot"]
24)
25
26# Launch the Gradio app
27iface.launch()
Interface do usuário do Gradio do autor para fazer upload de PDF
UI do autor do Gradio para conversar com o chatbot

Conclusão

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.

Saiba mais

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.
Principais comentários nos fóruns
Ainda não há comentários sobre este artigo.
Iniciar a conversa

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Artigo

De iniciante a especialista com MrQ


Jun 13, 2023 | 3 min read
Tutorial

Integração do MongoDB com o Amazon Managed Streaming for Apache Kafka (MSK)


Sep 17, 2024 | 7 min read
Tutorial

Dados em tempo real em um front-end do React JavaScript com Change Streams


Sep 09, 2024 | 6 min read
Tutorial

Criar um microsserviço de preços dinâmicos com Vertex AI e MongoDB Atlas


Oct 09, 2024 | 18 min read
Sumário