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

Parte #3: pesquise seus dados semanticamente com o Atlas Vector Search do MongoDB

Dominic Frei6 min read • Published Feb 09, 2024 • Updated Jul 11, 2024
IAAWSSem servidorAtlasPesquisaPython
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Esta parte final da série mostrará como usar o endpoint Amazon SageMaker criado no parte anterior e executar uma pesquisa semântica em seus dados usando o MongoDB Atlas Vector Search.
Este artigo é parte de uma série de três partes:
As duas partes mostradas neste tutorial serão:
  • Criação e atualização de embeddings/vetores para seus dados.
  • Criar vetores para uma consulta de pesquisa e enviá-los via Atlas Vector Search.

Criando um cluster MongoDB e carregando os dados de amostra

Se ainda não tiver feito isso, crie um novo cluster em sua conta do MongoDB Atlas. Certifique-se de marcar [Add sample dataset](https://www.mongodb.com/developer/products/atlas/atlas-sample-datasets/) para obter os dados de amostra com os quais trabalharemos imediatamente em seu cluster.
Criando um novo cluster
Se você estiver usando um cluster que já tenha sido configurado, clique nos três pontos do cluster e, em seguida, em Load Sample Dataset.
Carregar conjunto de dados de amostra

Criando um índice de pesquisa vetorial

Há mais uma etapa que precisamos dar no Atlas, que é criar um índice de pesquisa, especificamente para o Vector Search.
Na visão geral do seu banco de dados, clique em Create Index.
Criando um índice, parte 1
A página Search será exibida. Clique em Create Search Index aqui.
Criando um índice, parte 2
Em seguida, escolha Atlas Vector Search- > JSON Editor.
Editor JSON para Pesquisa Vetorial
Abra o banco de dadossample_mflixe escolha a coleçãoembedded_movies (não movies). Dê um nome ao seu índice (aqui, VectorSearchIndex).
Nome do banco de dados, coleção e índice
A configuração do índice precisa indicar o número de dimensões. Isso depende do modelo e, no nosso caso, é 384. O caminho informa ao índice qual campo será usado para armazenar os vetores. Vamos chamá-lo de embedding aqui. A similaridade do texto geralmente é feita com a funçãocosine.
Pressione Create e você está pronto para Go.
Se quiser, você pode testar seu novo índice antes de continuar.

Preparando incorporações

Você está pronto para a parte final?
Vamos dar uma olhada no código (aqui, em Python)!
Você pode encontrar o repositório completo no GitHub.
Na seção a seguir, examinaremos os três arquivos relevantes que mostram como você pode implementar um aplicativo de servidor que usa o endpoint do Amazon SageMaker.

Acessando o endpoint: sageMaker.py

O módulosagemaker.py é o invólucro em torno do endpoint Lambda/Gatevia que criamos no exemplo anterior.
Certifique-se de criar um arquivo .envcom o URL salvo emEMBDDING_SERVICE.
Deve ficar assim:
A função a seguir anexará a consulta para a qual queremos fazer o Atlas Search à URL e a executará.
Como resultado, esperamos encontrar o vetor em um campo JSON chamado embedding.

Acessar e pesquisar os dados: atlas.py

O módulo atlas.py é o invólucro em torno de tudo o que é MongoDB Atlas.
Semelhante a sagemaker.py, primeiro capturamos o MONGODB_CONNECTION_STRING que você pode recuperar no Atlas clicando em Connect em seu cluster. É a URL autenticada para o seu cluster. Também precisamos salvar MONGODB_CONNECTION_STRING em nosso arquivo .env.
Em seguida, Go em frente e definimos um conjunto de variáveis que definimos nas partes anteriores, como VectorSearchIndex e embedding, juntamente com os sample_mflix dados de demonstração criados automaticamente .
Usando o driver Atlas para Python (chamado PyMongo), criamos então um MongoClient que mantém a conexão com o cluster Atlas.
A primeira etapa será preparar de fato os dados já existentes com embeddings.
Esse é o único objetivo da funçãoadd_missing_embeddings.
Criaremos um filtro para os documentos com incorporações ausentes e os recuperaremos do banco de dados, mostrando apenas seu gráfico, que é o único campo em que estamos interessados por enquanto.
Supondo que encontraremos apenas alguns por vez, podemos examiná-los e chamar o endpointcreate_embeddingpara cada um, criando uma incorporação para o enredo do filme.
Em seguida, adicionaremos essas novas incorporações à arraymovies_to_update para que, a longo prazo, precisemos apenas de um bulk_write para o banco de dados, o que torna a chamada mais eficiente.
Observe que, para criar grandes conjuntos de dados com muitas incorporações, convém ajustar a função lambda para receber uma matriz de consultas em vez de apenas uma única consulta. Para este exemplo simples, servirá.
Agora que os dados estão preparados, adicionamos mais duas funções de que precisamos para oferecer um bom serviço REST para nosso aplicativo cliente.
Primeiro, queremos poder atualizar o gráfico, o que significa que precisamos atualizar os embeddings novamente.
O update_plot é semelhante à função inicial do add_missing_embeddings, mas um pouco mais simples, pois só precisamos atualizar um documento.
A outra função que precisamos oferecer é o vetor real do Atlas Search. Isso pode ser feito usando a aggregation pipeline doMongoDB Atlas , que pode ser acessada por meio do driver doAtlas .
O estágio$vectorSearch precisa incluir o nome do índice que queremos usar, o caminho para a incorporação e as informações sobre quantos resultados queremos obter. Desta vez, queremos apenas recuperar o título, por isso adicionamos um estágio$project ao pipeline. Certifique-se de usar list para transformar o cursor que a pesquisa retorna em uma lista de python.

Juntando tudo: main.py

Agora, podemos colocar tudo junto. Vamos usar o Flusk para expor um serviço REST para nosso aplicativo cliente.
Uma rota que queremos expor é /movies/<title> que pode ser executada com uma operaçãoPUT para atualizar o enredo de um filme dado o título. O título será um parâmetro de consulta enquanto o gráfico é passado por meio do corpo. Esta função está usando o update_plot que criamos antes em atlas.py e retorna o filme com seu novo enredo em caso de sucesso.
O outro endpoint, finalmente, é a pesquisa vetorial: /movies/search.
Um query é POST'ed para esse ponto de extremidade que, em seguida, usará create_embedding primeiro para criar um vetor a partir dessa consulta. Observe que também precisamos criar vetores para a consulta, pois é disso que a pesquisa de vetores precisa para compará-la com os dados reais (ou melhor, com seus embeddings).
Em seguida, chamamos execute_vector_search com esse embedding para recuperar os resultados, que serão retornados em caso de sucesso.
E isso é tudo que você precisa fazer. Foi fácil, não foi?
Go em frente e execute o aplicativo Pipeline (main.py) e, quando estiver pronto, envie um cURL para ver o Atlas Vector Search em ação. Aqui está um exemplo ao executá-lo localmente:
Isso deve levar ao seguinte resultado:
Guerra dos Mundos - um filme sobre a Terra, Marte e uma invasão. E que ótimo, não é?

Isso é um envoltório!

É claro que esta é apenas uma visão geral rápida de como usar o Amazon SageMaker para criar vetores e, em seguida, pesquisar por meio do MongoDB Atlas Vector Search.
Temos um curso completo para você aprender sobre todas essas partes em detalhes. Visite a página do Search Laboratório no GitHub para saber mais.
✅ Já tem uma conta AWS? O Atlas aceita pagamentos por uso por meio do AWS Marketplace (AWS MP) sem nenhum compromisso inicial — basta se inscrever no MongoDB Atlas por meio do AWS Marketplace.
✅ Obtenha ajuda em nossos fóruns da comunidade.
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
{Parte de uma série
Pesquisa de vetores com o MongoDB Atlas e o Amazon SageMaker
Mais nesta série
Relacionado
Tutorial

Criando de um pipeline de entrega contínua em vários ambientes para o MongoDB Atlas


Jan 23, 2024 | 8 min read
Tutorial

Como escrever testes de unidade para MongoDB Atlas Functions


Sep 09, 2024 | 10 min read
Tutorial

MongoDB Atlas com Terraform: usuários do banco de dados e Vault


Apr 15, 2024 | 9 min read
Tutorial

Construir um elemento de formulário de preenchimento automático com Atlas Search e JavaScript


Sep 09, 2024 | 8 min read
Sumário