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
Atlaschevron-right

Usando o SuperDuperDB para acelerar o desenvolvimento de IA no MongoDB Atlas Vector Search

Duncan Blythe6 min read • Published Sep 18, 2024 • Updated Sep 18, 2024
AtlasPesquisa vetorialPython
SNIPPET
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Artigo
star-empty
star-empty
star-empty
star-empty
star-empty

Introdução

Você está interessado em começar a usar pesquisa vetorial e AI no MongoDB Atlas, mas não sabe por onde começar? A jornada pode ser assustadora; os desenvolvedores são confrontados com questões como:
  • Qual modelo devo usar?
  • Devo usar uma fonte aberta ou fechada?
  • Como aplico corretamente meu modelo aos meus dados no Atlas para criar incorporações vetoriais?
  • Como faço para configurar corretamente o índice do Atlas Vector Search?
  • Devo dividir meu texto ou aplicar um modelo de vetorização diretamente ao texto?
  • Como e onde posso servir meu modelo de forma robusta para estar pronto para novas pesquisas, com base nas consultas de texto recebidas?
O SuperDuperDB é um projeto Python de código aberto projetado para acelerar o desenvolvimento de AI com o banco de dados e ajudar a responder a essas perguntas, permitindo que os desenvolvedores se concentrem no que desejam construir, sem se atolarem nos detalhes de exatamente como a pesquisa vetorial e AI de forma mais geral são implementadas.
O SuperDuperDB inclui computação de saídas de modelos e treinamento de modelos, que trabalham diretamente com dados em seu banco de dados, bem como suporte de primeira classe para pesquisa vetorial. Em particular, o SuperDuperDB oferece suporte à MongoDB Community e a Atlas.
Você pode acompanhar o código abaixo, mas, se preferir, todo o código está disponível no repositório SuperDuperDB do GitHub.

Introdução ao SuperDuperDB

SuperDuperDB é super fácil de instalar usando pip:
1python -m pip install -U superduperdb[apis]
Depois de instalar o SuperDuperDB, você está pronto para se conectar ao seu sistema do MongoDB Atlas:
1from superduperdb import superduper
2
3db = superduper("mongodb+srv://<user>:<password>@...mongodb.net/documents")
Os caracteres finais após o último "/ " denotam o banco de dados ao qual você deseja se conectar. Nesse caso, o banco de dados é chamado de "documentos". Você deve certificar-se de que o usuário está autorizado a acessar esse banco de dados.
A variável db é um connector que é simultâneo:
  • Um cliente de banco de dados.
  • Um armazenamento de artefatos para modelos de AI (armazena objetos de arquivo grandes).
  • Um armazenamento de metadados, armazenando informações importantes sobre seus modelos conforme eles se relacionam com o banco de dados.
  • Uma interface de query permite que você execute query facilmente, incluindo pesquisa vetorial, sem precisar lidar explicitamente com a lógica de converter as queries em vetores.

Conectando o SuperDuperDB com modelos de AI

Vamos ver isso em ação.
Com o SuperDuperDB, os desenvolvedores podem importar wrappers de modelo que oferecem suporte a uma variedade de projetos de código aberto, bem como fornecedores de API de AI, como o OpenAI. Os desenvolvedores podem até definir e programar seus próprios modelos.
Por exemplo, para criar um modelo de vetorização utilizando a API OpenAI, primeiro defina seu OPENAI_API_KEY como uma variável de ambiente:
1export OPENAI_API_KEY="sk-..."
Agora, basta importar o wrapper do modelo OpenAI:
1from superduperdb.ext.openai.model import OpenAIEmbedding
2
3model = OpenAIEmbedding(
4    identifier='text-embedding-ada-002', model='text-embedding-ada-002')
Para verificar se isso está funcionando, você pode aplicar esse modelo a um único trecho de texto usando o predict
método, especificando que este é um único ponto de dados com one=True.
1>>> model.predict('This is a test', one=True)
2[-0.008146246895194054,
3 -0.0036965329200029373,
4 -0.0006024622125551105,
5 -0.005724836140871048,
6 -0.02455105632543564,
7 0.01614714227616787,
8...]
Como alternativa, também podemos usar um modelo de código aberto (não atrás de uma API), usando, por exemplo, a sentence-transformers biblioteca :
1import sentence_transformers
2from superduperdb.components.model import Model
1from superduperdb import vector
1model = Model(
2    identifier='all-MiniLM-L6-v2',
3    object=sentence_transformers.SentenceTransformer('all-MiniLM-L6-v2'),
4    encoder=vector(shape=(384,)),
5    predict_method='encode',
6    postprocess=lambda x: x.tolist(),
7    batch_predict=True,
8)
Este trecho de código usa o wrapper de base Model, que oferece suporte a instâncias de classe de modelo arbitrárias, usando código aberto e interno. Basta fornecer a instância da classe para o parâmetro objeto, especificando opcionalmente as funçõespreprocess e/ou postprocess. O argumentoencoder informa ao Atlas Vector Search o tamanho dos resultados do modelo, e a opçãobatch_predict=True torna a computação mais rápida.
Como antes, podemos testar o modelo:
1>>> model.predict('This is a test', one=True)
2[-0.008146246895194054,
3 -0.0036965329200029373,
4 -0.0006024622125551105,
5 -0.005724836140871048,
6 -0.02455105632543564,
7 0.01614714227616787,
8...]

Inserindo e consultando dados via SuperDuperDB

Vamos adicionar alguns dados ao MongoDB usando a conexãodb. Preparamos alguns dados da API do PyMongo para adicionar uma reviravolta meta a este passo a passo. Você pode baixar esses dados com este comando:
1curl -O https://superduperdb-public.s3.eu-west-1.amazonaws.com/pymongo.json
1import json
2from superduperdb.backends.mongodb.query import Collection
3from superduperdb.base.document import Document as D
4
5with open('pymongo.json') as f:
6    data = json.load(f)
7
8db.execute(
9    Collection('documents').insert_many([D(r) for r in data])
10)
Você verá nesse comando que, em contraste com pymongo, superduperdb
inclui objetos de query (Collection(...)...). Isso permite que superduperdb passe as queries para modelos, cálculos e execuções de treinamento, bem como salve as queries para uso futuro.
Além desse fato, osuperduperdb suporta todos os comandos que são suportados pelo núcleo da  APIpymongo .
Aqui está um exemplo de busca de alguns dados com o SuperDuperDB:
1>>> r = db.execute(Collection('documents').find_one())
2>>> r
3Document({
4    'key': 'pymongo.mongo_client.MongoClient',
5    'parent': None,
6    'value': '\nClient for a MongoDB instance, a replica set, or a set of mongoses.\n\n',
7    'document': 'mongo_client.md',
8    'res': 'pymongo.mongo_client.MongoClient',
9    '_fold': 'train',
10    '_id': ObjectId('652e460f6cc2a5f9cc21db4f')
11})
Você pode ver que os dados normais do MongoDB são agrupados com a  classeDocument .
Você pode recuperar o documento desembrulhado com unpack:
1>>> r.unpack()
2{'key': 'pymongo.mongo_client.MongoClient',
3 'parent': None,
4 'value': '\nClient for a MongoDB instance, a replica set, or a set of mongoses.\n\n',
5 'document': 'mongo_client.md',
6 'res': 'pymongo.mongo_client.MongoClient',
7 '_fold': 'train',
8 '_id': ObjectId('652e460f6cc2a5f9cc21db4f')}
O motivo pelo qual superduperdb usa a abstraçãoDocument é que, no SuperDuperDB, você mesmo não precisa gerenciar a conversão de dados em bytes. Temos um sistema de tipos configuráveis e controlados pelo usuário, ou "Codificadores", que permitem aos usuários inserir, por exemplo, imagens diretamente. (Este é o tópico de um próximo tutorial! )

Configurando modelos para trabalhar com pesquisa vetorial no MongoDB Atlas utilizando SuperDuperDB

Agora que você escolheu e testou um modelo e inseriu alguns dados, você pode configurar a pesquisa vetorial no MongoDB Atlas usando o SuperDuperDB. Para fazer isso, execute este comando:
1from superduperdb import VectorIndex
2from superduperdb import Listener
3
4db.add(
5    VectorIndex(
6        identifier='pymongo-docs',
7        indexing_listener=Listener(
8            model=model,
9            key='value',
10            select=Collection('documents').find(),
11            predict_kwargs={'max_chunk_size': 1000},
12        ),
13    )
14)
Esse comando diz a superduperdb para fazer várias coisas:
  • Pesquise a coleção "documentos"
  • Configurar um índice vetorial em nosso cluster Atlas, usando o texto no campo "valor" (Listener)
  • Use a variável do modelo para criar incorporações vetoriais
Após receber este comando, SuperDuperDB:
  • O Atlas do MongoDB configura um índice knn na coleção "documents".
  • Salva o objeto de modelo no armazenamento de modelos SuperDuperDB hospedado no Gridfs.
  • Aplica o modelo a todos os dados na collection "documents" e salva os vetores nos documentos.
  • Salva o fato de que o modelo está conectado ao índice vetorial "pymongo-docs".
Se quiser "reload" seu modelo em uma sessão posterior, você pode fazer isso com o  comandoload:
1>>> db.load("model", 'all-MiniLM-L6-v2')
Para ver o que aconteceu durante a criação do VectorIndex, podemos ver que os documentos individuais agora contêm vetores:
1>>> db.execute(Collection('documents').find_one()).unpack()
2{'key': 'pymongo.mongo_client.MongoClient',
3 'parent': None,
4 'value': '\nClient for a MongoDB instance, a replica set, or a set of mongoses.\n\n',
5 'document': 'mongo_client.md',
6 'res': 'pymongo.mongo_client.MongoClient',
7 '_fold': 'train',
8 '_id': ObjectId('652e460f6cc2a5f9cc21db4f'),
9 '_outputs': {'value': {'text-embedding-ada-002': [-0.024740776047110558,
10    0.013489063829183578,
11    0.021334229037165642,
12    -0.03423869237303734,
13    ...]}}}
As saídas dos modelos são sempre salvas no caminho"_outputs.<key>.<model>" dos documentos. Isto permite que o MongoDB Atlas Vector Search saiba onde procurar para criar o índice de pesquisa vetorial rápida.
Você também pode verificar se o MongoDB Atlas criou um  índice de pesquisa vetorialknnfazendo login na sua conta do Atlas e navegando até a guia de pesquisa. Ela terá a seguinte aparência:
A UI do MongoDB Atlas, mostrando uma lista de índices anexados à coleção de documentos.
O verde
Ativo
 O status indica que o MongoDB Atlas terminou de compreender e “organizing” os vetores para que eles possam ser pesquisados rapidamente.
Se você navegar até o sinal de ..." " em Ações e clicar em Editar com o editor JSON*,* então você poderá inspecionar a definição de índice explícita que foi configurada automaticamente por superduperdb:
A UI do cluster do MongoDB Atlas mostrando os detalhes do índice de pesquisa vetorial.
Você pode confirmar a partir desta definição que o índice analisa o caminho"_outputs.<key>.<model>" dos documentos em nossa coleção.

Consultando pesquisa vetorial com uma API de alto nível com SuperDuperDB

Agora que nosso índice está pronto, podemos realizar algumas queries "search-by-meaning " usando a conexãodb:
1>>> query = 'Query the database'
2>>> result = db.execute(
3...    Collection('documents')
4...        .like(D({'value': query}), vector_index='pymongo-docs', n=5)
5...        .find({}, {'value': 1, 'key': 1})
6... )
7>>> for r in result:
8...    print(r.unpack())
9
10{'key': 'find', 'value': '\nQuery the database.\n\nThe filter argument is a query document that all results\nmust match. For example:\n\n`pycon\n>>> db'}
11{'key': 'database_name', 'value': '\nThe name of the database this command was run against.\n\n'}
12{'key': 'aggregate', 'value': '\nPerform a database-level aggregation.\n\nSee the [aggregation pipeline](https://mongodb.com/pt-br/docs/manual/reference/operato'}
13{'key': 'alive', 'value': '\nDoes this cursor have the potential to return more data?\n\n'}
14{'key': 'pymongo.cursor.CursorType', 'value': '\n'}
🚀 Então é isso! 🚀
Você agora consultou um índice de pesquisa vetorial no MongoDB Atlas Vector Search usando um modelo e uma configuração instalados com o SuperDuperDB. Isso exigiu apenas alguns comandos principais em Python, utilizando bibliotecas de modelo e clientes de API do ecossistema de código aberto Python!
superduperdb tem muito mais a oferecer:
  • Os desenvolvedores podem trazer seu próprio modelo ou instalar modelos arbitrários do ecossistema de código aberto.
  • As API coere e antróficas também são suportadas, além de openai.
  • Os desenvolvedores também podem pesquisar por imagens e vídeos.
  • Outros casos de uso, além da pesquisa vetorial básica, são suportados:
    • Bate-papo com seus Docs
    • aprendizado de máquina clássico
    • Transferir aprendizagem
    • Vector Search com tipos de dados arbitrários
    • Muito, muito mais...

Contribuidores são bem-vindos!

O SuperDuperDB é de código aberto e permissivo sob a Apache 2.0 licença. Gostaríamos de encorajar os desenvolvedores interessados no desenvolvimento de código aberto a contribuir para nossos fóruns de discussão e painéis de questões e fazer suas próprias solicitações pull. Nos vemos no GitHub!

Torne-se um parceiro de design!​

Estamos em busca de organizações visionárias que possamos ajudar a identificar e implementar aplicativos de AI transformativos para seus negócios e produtos. Estamos oferecendo isso totalmente de grátis. Se você quiser saber mais sobre esta oportunidade, entre em contato conosco pelo e-mail: Parcerias@superduperdb.com.
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 Artigo
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

Influencie a classificação dos resultados de pesquisa com pontuações de funções no Atlas Search


Feb 03, 2023 | 5 min read
Tutorial

Criar um backend de gerenciamento de mídia escalável: integrando Node.js, Armazenamento de blobs Azure e MongoDB


Nov 05, 2024 | 10 min read
Tutorial

Criação de um agente de AI aprimorado para memória com o laudo do Aconnection no Amazon Cama do MongoDB Atlas


Oct 29, 2024 | 8 min read
Tutorial

RAG interativo com MongoDB Atlas + API de chamada de função


Sep 18, 2024 | 16 min read
Sumário