EventoObtenha 50% de desconto no seu ingresso para MongoDB.local Londres em outubro 2. Use o código WEB50Saiba mais >>
Desenvolvedor MongoDB
Central de desenvolvedor do MongoDBchevron-right
Produtoschevron-right
Atlaschevron-right

Criação de aplicativos de IA generativa usando o MongoDB: aproveitando o poder do Atlas Vector Search e dos modelos de código aberto

Prakul Agarwal10 min read • Published Jul 25, 2023 • Updated Jan 12, 2024
IAPesquisaPythonAtlas
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
A inteligência artificial está no centro do que está sendo apresentado como a quarta revolução industrial. Há uma mudança fundamental acontecendo na forma como vivemos e na maneira como trabalhamos, e isso está acontecendo agora. Embora a IA e suas aplicações em todas as empresas não sejam novos, recentemente a IA generativa tornou-se um tema popular em todo o mundo com o incrível sucesso do ChatGPT, o popular chatbot da OpenAI. Ele atingiu os 100 milhões de usuários ativos mensais em dois meses, tornando-se a aplicação para consumidores que mais cresce.
Neste blog, abordaremos como você pode aproveitar o poder dos grandes modelos de linguagem (LLMs), a tecnologia transformadora que impulsiona o ChatGPT, em seus dados privados para criar aplicativos transformadores baseados em IA com o MongoDB e o Atlas Vector Search. Veremos também um exemplo de como criar uma pesquisa semântica utilizando o Python, modelos de aprendizado de máquina e o Atlas Vector Search para encontrar filmes por meio de queries de linguagem natural. Por exemplo, encontrar “Funny movies with lead characters that are not human” envolveria realizar uma pesquisa semântica que entendesse o significado e a intenção por trás da query para recuperar recomendações de filmes relevantes, e não apenas as palavras-chave presentes no conjunto de dados.
Utilizando a incorporação de vetores, você pode aproveitar o poder dos LLMs para casos de uso como pesquisa semântica, um sistema de recomendação, detecção de anomalias e um chatbot de suporte ao cliente baseados em seus dados privados.

O que são incorporações vetoriais?

Um vetor é uma lista de números de ponto flutuante (representando um ponto em um espaço de incorporação n-dimensional) e captura informações semânticas sobre o texto que representa. Por exemplo, uma incorporação da string "MongoDB is awesome" com um modelo LLM de código aberto chamado all-MiniLM-L6-v2 consistiria em 384 números de ponto flutuante e teria a seguinte aparência:
Observação: mais adiante no tutorial, abordaremos as etapas para obter incorporações vetoriais como essa.

O que é pesquisa vetorial?

A pesquisa vetorial é um recurso que permite encontrar objetos relacionados com semelhanças semânticas. Isso significa pesquisar dados com base no significado e não nas palavras-chave presentes no conjunto de dados.
A pesquisa vetorial utiliza modelos de aprendizado de máquina para transformar dados não estruturados (como texto, áudio e imagens) em uma representação numérica (chamada de incorporação vetorial) que captura a intenção e o significado desses dados. Em seguida, localiza conteúdo relacionado comparando as distâncias entre essas incorporações de vetores, usando algoritmos de k vizinhos mais próximos (KNN aproximado). O método mais comumente utilizado para encontrar a distância entre esses vetores envolve o cálculo da semelhança de cosseno entre dois vetores.

O que é o Atlas Vector Search?

O Atlas Vector Search é um serviço totalmente gerenciado que simplifica o processo de indexação eficaz de dados vetoriais de alta dimensão no MongoDB e a capacidade de realizar pesquisas rápidas de similaridade vetorial. Com o Atlas Vector Search, você pode usar o MongoDB como um banco de dados vetorial autônomo para um novo projeto ou aumentar suas coleções existentes do MongoDB com a funcionalidade de pesquisa vetorial.
Ter uma solução única capaz de cuidar dos dados da sua aplicação operacional, bem como dos dados vetoriais, elimina as complexidades do uso de um sistema autônomo somente para ter o recurso de pesquisa vetorial, como transferência de dados e sobrecarga de gerenciamento de infraestrutura. Com o Atlas Vector Search, você pode usar os poderosos recursos de pesquisa vetorial em qualquer nuvem pública de grande porte (AWS, Azure, GCP) e alcançar escalabilidade maciça e segurança de dados prontos para uso, além de estar pronto para o uso corporativo com disposições como conformidade com SoC2.

Pesquisa semântica para recomendações de filmes

Neste tutorial, usaremos um conjunto de dados de filmes contendo mais de 23.000 documentos no MongoDB. Usaremos o modelo all-MiniLM-L6-v2 do HuggingFace para gerar a incorporação do vetor durante o tempo de índice e o tempo de consulta. Mas você também pode aplicar os mesmos conceitos usando um conjunto de dados e um modelo de sua escolha. Você precisará de um notebook ou IDE Python, uma conta do MongoDB Atlas e uma conta do HuggingFace para uma experiência prática.
Para um banco de dados de filmes, vários tipos de conteúdo, como a descrição do filme, a trama, o gênero, os atores, os comentários do usuário e o pôster do filme podem ser facilmente convertidos em incorporações vetoriais. Da mesma forma, a consulta do usuário pode ser convertida em incorporação vetorial e assim a pesquisa vetorial poderá encontrar os resultados mais relevantes encontrando os vizinhos mais próximos no espaço de incorporação.

Etapa 1: Conecte-se à sua instância do MongoDB

Para criar um cluster do MongoDB Atlas, primeiro é preciso criar uma conta do MongoDB Atlas se você ainda não tiver uma. Acesse o site do MongoDB Atlas e clique em "Register.".
Para este tutorial, usaremos os dados de amostra referentes a filmes. O banco de dados "sample_mflix" contém uma coleção "movies" onde cada documento contém campos como título, enredo, gêneros, elenco, diretores etc.
Você pode também conectar à sua própria coleção se tiver seus próprios dados e quiser utilizá-los.
Você pode usar um IDE de sua escolha ou um notebook Python para acompanhar o processo. Você precisará instalar o pacote pymongo antes de executar este código, o que pode ser feito via pip install pymongo.
Observação: em ambientes de produção, não é recomendável codificar a string de conexão do banco de dados da maneira mostrada, mas, para fins de demonstração pessoal, não há problema.
Você pode verificar seu conjunto de dados na UI do Atlas.

Etapa 2: Configure a função de criação de embedding

Há muitas opções para criar incorporações, como chamar uma API gerenciada, hospedar seu próprio modelo ou executar o modelo no local.
Neste exemplo, usaremos a API de inferência HuggingFace para usar um modelo chamado all-MiniLM-L6-v2. O HuggingFace é uma plataforma de código aberto que fornece ferramentas para criar, treinar e implantar modelos de aprendizado de máquina. Usamos essa plataforma porque ela facilita o uso de modelos de aprendizado de máquina por meio de APIs e SDKs.
Para usar modelos de código aberto no Hugging Face, acesse https://huggingface.co/. Crie uma nova conta se ainda não tiver uma. Em seguida, para recuperar o token de acesso, vá para Configurações > "Access Tokens.". Uma vez na seção "Access Tokens", crie um novo token clicando em "New Token" e dê a ele a permissão de "read". Em seguida, você poderá obter o token para se autenticar na API de inferência do Hugging Face:
Página principal do Hugging Face com foco em Configurações no menu da conta
Página Tokens de Acesso dentro das configurações com foco no link Tokens de Acesso e no campo Token de Acesso
Agora você pode definir a função que será capaz de gerar incorporações. Observe que esta é apenas uma configuração e ainda não estamos executando nada.
Agora você pode testar a geração de incorporações usando a função que definimos acima.
A saída desta função ficará assim:
Verifique a saída da função generate_embedding
Verifique o comprimento do vetor gerado pela função de incorporação
Observação: a API de inferência do HuggingFace é gratuita (para começar) e destina-se à criação rápida de protótipos com limites de taxa rigorosos. Você pode considerar configurar um "HuggingFace Inference Endpoints" pago usando as etapas descritas nas Sugestões de bônus. Isso criará uma implantação privada do modelo para você.

Etapa 3: Crie e armazene incorporações

Agora, executaremos uma operação para criar uma incorporação de vetor para os dados no campo "plot" em nossos documentos de filme e armazená-los no banco de dados. Conforme descrito na introdução, a criação de incorporações vetoriais por meio de um modelo de aprendizado de máquina é necessária para fazer uma pesquisa de semelhança com base na intenção.
No trecho de código abaixo, criamos incorporações vetoriais para 50 documentos em nosso conjunto de dados, que têm o campo “plot.”. Armazenaremos as incorporações vetoriais recém-criadas em um campo chamado "plot_embedding_hf", mas você pode nomear como quiser.
Quando tudo estiver pronto, execute o código abaixo.
Nota: neste caso, estamos armazenando a incorporação vetorial na collection original (ou seja, junto com os dados da aplicação). Isso também pode ser feito em uma collection separada.
Quando esta etapa for concluída, você poderá verificar em seu banco de dados que um novo campo "plot_embedding_hf" foi criado para algumas das coleções.
Observação: restringimos a apenas 50 documentos para evitar limites de taxa na API de inferência do HuggingFace. Se você quiser fazer isso em todo o conjunto de dados de 23.000 documentos em nosso banco de dados sample_mflix, levará algum tempo e talvez seja necessário criar um documento pago “Inference Endpoint, conforme descrito na configuração opcional acima.

Etapa 4: Crie um índice de pesquisa vetorial

Agora vamos para o Atlas Search e criaremos um índice. Primeiro, clique na aba "search" no seu cluster e clique em "Create Search Index."
Aba de pesquisa na página Cluster com foco em “Create Search Index”
Isso levará à página de configuração "Create a Search Index". Selecione “JSON Editor” e clique em “Next.”.
Experiência da aba de pesquisa "Create Search Index" com foco no "JSON Editor"
Agora, execute as três etapas a seguir na página "JSON Editor":
  1. Selecione o banco de dados e a coleção na esquerda. Para este tutorial, deve ser sample_mflix/movies.
  2. Insira o nome do índice. Para este tutorial, optamos por chamá-lo de PlotSemanticSearch.
  3. Insira o JSON de configuração (fornecido abaixo) no editor de texto. O nome do campo deve corresponder ao nome do campo de incorporação criado na Etapa 3 (para este tutorial, deve ser plot_embedding_hf), e as dimensões devem corresponder às do modelo escolhido (para este tutorial, deve ser 384). O valor escolhido para o campo "similarity" (de "dotProduct") representa a similaridade de cosseno, no nosso caso.
Para obter uma descrição dos outros campos dessa configuração, consulte a documentação do Vector Search.
Em seguida, clique no botão “Next” e clique no botão “Create Search Index” na página de revisão.
Editor JSON de configuração do índice de pesquisa com setas apontando para o banco de dados e o nome da coleção, bem como o editor JSON

Etapa 5: Consulte seus dados

Depois que o índice for criado, você poderá fazer uma query usando o estágio "$vectorSearch" no fluxo de trabalho do MQL.
O suporte para a fase de pipeline de agregação '$VectorSearch' está disponível com o MongoDB Atlas 6.0.11 e 7.0.2.
Na query abaixo, pesquisaremos quatro recomendações de filmes cujas tramas correspondam à intenção por trás da query "imaginary characters from outer space at war".
Execute o bloco de código Python descrito abaixo, no IDE ou no notebook escolhido.
O resultado será:
A saída da consulta Vector Search
Nota: para saber mais sobre os vários parâmetros (como '$vectorSearch', 'numCandidates' e 'k'), consulte a documentação do Atlas Vector Search .
Isso retornará os filmes cujos enredos mais se aproximarem da intenção por trás da query "imaginary characters from outer space at war.".
Observação: como você pode ver, os resultados acima precisam ser mais precisos, pois incorporamos apenas 50 documentos de filmes. Se todo o conjunto de dados de filmes de 23.000+ documentos fosse incorporado, a query "imaginary characters from outer space at war" resultaria no apresentado abaixo. Os resultados formatados abaixo mostram o título, o enredo e a renderização da imagem do pôster do filme.
Saída formatada de uma consulta do Vector Search

Conclusão

Neste tutorial, demonstramos como utilizar as APIs do HuggingFace Inference, como gerar incorporações e como utilizar a Atlas Vector Search. Aprendemos também como criar uma aplicação de pesquisa semântica para encontrar filmes cujos gráficos correspondam mais de perto à intenção por trás de uma consulta em linguagem natural, em vez de uma pesquisa baseada nas palavras-chave existentes no conjunto de dados. Demonstramos também a eficiência de trazer o poder dos modelos de aprendizado de máquina para seus dados por meio da plataforma de dados para desenvolvedores do Atlas.
Se você prefere aprender assistindo, confira a versão em vídeo deste artigo!

Sugestões de bônus

Endpoints de inferência da HuggingFace

"HuggingFace Inference Endpoints" é a maneira recomendada para criar com facilidade uma implantação privada do modelo e utilizá-la para o caso de uso em produção. Como discutimos antes, a "API de inferência da HuggingFace" destina-se à prototipagem rápida e tem limites de taxa rígidos.
Para criar um "Endpoint de inferência" para um modelo no HuggingFace, siga estas etapas:
  1. Na página do modelo, clique em "Deploy" e, no menu suspenso, escolha "Inference Endpoints."
Configurando “Inference Endpoints” no HuggingFace
  1. Selecione fornecedor de nuvem de sua escolha e o tipo de instância na página "Criar novo endpoint". Para este tutorial, você pode escolher o padrão da AWS e o tipo de instância da CPU [pequeno]. Isso custaria cerca de US$0,06/hora. Criar um novo endpoint
  2. Agora clique em "Advanced configuration" e escolha o tipo de tarefa para "Sentence Embedding". Essa configuração é necessária para garantir que o endpoint retorne a resposta do modelo adequado para a tarefa de criação de incorporação.
[Opcional] você pode definir a opção "Automatic Scale-to-Zero" como "After 15 minutes with no activity" para garantir que seu ponto de extremidade seja interrompido após um período de inatividade e que você não seja cobrado. No entanto, a definição dessa configuração significa que o ponto de extremidade deixará de responder depois de pausado. Levará algum tempo para que ele volte a ficar online depois que você enviar solicitações a ele novamente.
Seleção de tarefas compatíveis
  1. Depois disso, clique em "Create endpoint" e você verá o status como "Initializing".
O status está sendo inicializado
  1. Use a seguinte função do Python para gerar incorporações. Observe a diferença no formato de resposta em relação ao uso anterior de “HuggingFace Inference API.”

Incorporações da OpenAI

Para usar o OpenAI na geração de incorporação, você pode usar o pacote (instale usando pip install openai).
Você precisará da sua chave de API da OpenAI, que você pode criar em seu website. Clique no ícone da conta no canto superior direito e selecione "View API keys" no menu suspenso. Em seguida, nas chaves de API, clique em "Criar nova chave secreta".
Página da plataforma OpenAI com foco em "Exibir chaves de API" no menu
Página de chaves de API da OpenAI com foco em "Create new secret key"
Para gerar as incorporações no Python, instale o pacote openAI (pip install openai) e use o código a seguir.

Endpoints de incorporação da OpenAI do Azure

Você pode usar os endpoints da OpenAI do Azure criando uma implementação em sua conta Azure e usando:

Limitações no tamanho de entrada do modelo

Os modelos têm uma limitação quanto ao número de tokens de entrada que podem manipular. A limitação do modelo text-embedding-ada-002 da OpenAI é de 8.192 tokens. Dividir o texto original em partes menores torna-se necessário ao criar incorporações para os dados que excedem o limite do modelo.

Comece hoje mesmo

Comece criando uma conta no MongoDB Atlas se ainda não tiver uma. Basta clicar em "Register." O MongoDB oferece um cluster do Atlas gratuito para sempre no serviço de nuvem pública de sua escolha.
Para saber mais sobre o Atlas Vector Search, acesse a página do produto ou a documentação para criar um índice de pesquisa vetorial ou executar consultas de pesquisa vetorial.

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Exemplo de código

Comece a usar o MongoDB Atlas e o AWS CloudFormation


Jan 23, 2024 | 3 min read
Tutorial

Building a Knowledge Base and Visualization Graphs for RAG With MongoDB


Sep 02, 2024 | 12 min read
Tutorial

Avaliação RAG: detectando alucinações com Patronus AI e MongoDB


Aug 15, 2024 | 11 min read
Tutorial

Como construir uma REST API sem servidor com o MongoDB Atlas


Aug 30, 2024 | 5 min read
Sumário