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

Criando gráficos de AI com Rivet e MongoDB Atlas Vector Search para potencializar aplicativos de AI

Cai GoGwilt, Andrew Rothwell, Pavel Duchovny10 min read • Published Sep 18, 2024 • Updated Sep 18, 2024
IANode.jsPesquisa vetorialJavaScriptAtlas
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty

Introdução

No domínio da tecnologia de banco de dados e da AI, que avança rapidamente, a convergência de interfaces gráficas intuitivas e ferramentas avançadas de processamento de dados criou um novo horizonte para desenvolvedores e Cientistas de Dados. O MongoDB Compass, com seus recursos avançados e design amigável, se destaca como uma ferramenta de gerenciamento de banco de dados principal. A integração de recursos de AI, como os fornecidos pelo construtor de gráficosRivet AI , força ainda mais, oferecendo facilidade e eficiência sem precedentes no gerenciamento e análise de dados. Este artigo analisa a sinergia entre o MongoDB Atlas, um banco de dados como serviço, e o construtor de gráficos Rivet AI, explorando como essa integração facilita a visualização e a manipulação de dados. O Rivet é uma ferramenta poderosa desenvolvida pela Trigger, um parceiro que, junto com o MongoDB, deseja tornar os fluxos de AI o mais fácil e intuitivo possível.
Vamos dissecar a arquitetura de alto nível que permite aos usuários interagir com seu banco de dados de uma maneira mais dinâmica e perspicaz, aumentando assim sua capacidade de tomar decisões orientadas por dados com rapidez.
Certifique-se de visitar nosso repositório Github para obter códigos de exemplo e um teste desta solução.

Arquitetura de alto nível

A arquitetura de alto nível da integração do MongoDB Atlas e do Rivet AI Graph Builder é centrada em um fluxo de trabalho contínuo que atende tanto à extração de dados quanto à análise subsequente usando insights orientados por IA.
Extração e estruturação de dados: no centro do fluxo de trabalho está a capacidade de extrair e estruturar dados no banco de dados MongoDB Atlas. Os usuários podem definir e manipular documentos e collection, aproveitando o modelo de esquema flexível do MongoDB. A interface MongoDB Compass permite consultas e indexações em tempo real, tornando a recuperação de subconjuntos de dados específicos intuitiva e eficiente.
Análise aprimorada por IA: Depois que os dados são estruturados, o construtor de gráficos do Rivet AI entra em ação. Ele fornece uma representação visual de operações como extração de caminho de objeto, o que é crucial para entender as relações dentro dos dados. O construtor de grafos permite a construção de consultas complexas e transformações de dados sem a necessidade de escrever código extenso.
Vetorização e indexação: Um recurso de destaque é a capacidade de transformar dados textuais ou categóricos em forma vetorial usando AI, comumente chamada de incorporação. Essas incorporações capturam as relações semânticas entre os pontos de dados e são armazenadas no MongoDB. Esse processo de vetorização é fundamental para executar operações de pesquisa avançadas, como pesquisas de similaridade e previsões baseadas em aprendizado de máquina.
Visualização interativa: Todo o processo é visualizado interativamente por meio da interface do construtor de gráficos. Cada operação, desde a correspondência até a incorporação, extração e armazenamento, é representada como nós em um gráfico, tornando o fluxo de dados e as etapas de transformação transparentes e fáceis de modificar.
Pesquisa e recuperação: com vetores gerados por IA armazenados no MongoDB, os usuários podem realizar consultas de pesquisa sofisticadas. Usando técnicas como os k vizinhos mais próximos (k-NN), o sistema pode recuperar documentos semanticamente próximos a uma determinada query, o que é inestimável para sistemas de recomendações, mecanismos de pesquisa e outros aplicativos orientados por IA.
Ações do plug-in do MongoDB
Basic Vector Query do Airbnb via incorporações

Etapas de instalação

Instalar o Rivet: para começar a usar o Rivet, visite a página oficial de instalaçãodo Rivet e siga as instruções para baixar e instalar o aplicativo Rivet em seu sistema.
Obter uma chave de API OpenAI: o Rivet exige uma chave de API OpenAI para acessar determinados recursos de AI . Registre-se para uma conta OpenAI, se ainda não o fez, e navegue até a seção API para gerar sua chave.
Configurar o Rivet com OpenAI: Depois de instalar o Rivet, abra o aplicativo e navegue até as configurações. Insira sua chave de API OpenAI na seção de configurações do OpenAI. Isso permitirá que você use os recursos do OpenAI no Rivet. Abra a configuração da IA.
Instale o plugin MongoDB no Rivet: No Rivet, vá para a seção de plugins e procure o plugin MongoDB. Instale o plugin para habilitar a funcionalidade do MongoDB no Rivet. Isso envolverá inserir sua string de conexão do MongoDB Atlas para conectar-se ao seu banco de dados.
Plugin Page
Plug-in instalado
Conectar o Rivet ao MongoDB Atlas: depois que o Atlas Search estiver configurado, retorne ao Rivet e use o plug-in do MongoDB para se conectar ao MongoDB Atlas cluster fornecendo a connection string e as credenciais necessárias. Obtenha sua connection string do MongoDB Atlas cluster e coloque em "Settings" => "Plugins": Configurar o plugin com connection string

Etapas de configuração

MongoDB Atlas Search: Faça login em sua conta MongoDB Atlas e selecione o cluster onde sua collection reside. Use o MongoDB Compass para conectar-se ao seu cluster e navegar até a collection que deseja indexar.
Crie um índice de pesquisa no Compass: No Compass, clique na aba "Índices" na visualização da collection. Crie um novo índice de pesquisa selecionando a opção "Criar índice". Escolha os campos que deseja indexar e configure as opções de índice de acordo com seus requisitos de pesquisa.
Exemplo:
1{
2 "name": "default",
3 "type": "vectorSearch",
4 "fields":[
5 {
6 "type": "vector",
7 "path": "embedding",
8 "numDimensions": 1536,
9 "similarity": "dotProduct"
10 }]
11}
Construa e execute queries: com a configuração concluída, agora você pode criar queries no Rivet para recuperar e manipular dados em sua collection do MongoDB Atlas usando o índice de pesquisa criado.
Seguindo estas etapas, você poderá aproveitar o poder do MongoDB Atlas Search com os recursos avançados de AI fornecidos pelo Rivet. Não deixe de consultar a documentação oficial para obter instruções detalhadas e dicas de solução de problemas.

Exemplo simples de armazenamento e recuperação de dados de gráfico

Armazenando dados

Neste exemplo, temos um gráfico básico do Rivet que processa dados a serem armazenados em um banco de MongoDB database usando o rivet-plugin-mongodb. O gráfico segue estas etapas:
Armazene incorporação e documentos usando Rivet
Caminho do objeto de extração: o gráfico começa com um objeto que contém informações do produto — por exemplo, { "product": "shirt", "color": "green" }. Esses dados são então passados para um nó que extrai informações específicas com base no caminho do objeto, como $.color, para serem usadas em processamento posterior.
Obter incorporação: o próximo nó no gráfico, denominado "OBTER EMBEDDING", usa o serviço OpenAI para gerar um vetor de incorporação a partir dos dados de entrada. Essa incorporação representa a funcionalidade extraída (neste caso, o atributo de cor) em uma forma numérica que pode ser usada para aprendizado de máquina ou pesquisas de similaridade.
Armazenar vetor no MongoDB: O vetor de incorporação resultante é então enviado para o nó 'STORE VECTOR IN MONGODB'. Esse nó é configurado com o nome do banco de dados de pesquisa e collection de produtos, onde armazena a incorporação em um campo chamado incorporação. A operação é concluída com êxito, conforme indicado pelo status 'CONCLUÍDO'.
No MongoDB Compass, vemos as seguintes ações e configurações:
Criação de índice: No índice search.products, um novo índice é criado para o campo de incorporação. Esse índice é configurado para pesquisas de vetores, com 1536 dimensões e usando a medida de similaridadeDotProduct. Esse índice é do tipo "knnVector,", que é adequado para pesquisas k-nearest neighbors.
Índice do Atlas Search: o canto inferior direito da captura de tela mostra a interface do MongoDB Compass para editar o índice “default. A configuração JSON fornecida define o índice para o Atlas Search, com mapeamentos de campo dinâmicos.
Com esse gráfico e o MongoDB configurado, o aplicativo Rivet é capaz de armazenar dados vetoriais no MongoDB e executar pesquisas vetoriais eficientes usando o recurso Atlas Search do MongoDB. Isso permite que os usuários recuperem rapidamente documentos com base na similaridade dos dados vetoriais, como encontrar produtos com características semelhantes.

Retrieving data

Nesta configuração de gráfico do Rivet, vemos o processo de criar uma incorporação a partir da entrada de texto e usá-la para executar uma pesquisa vetorial em um MongoDB database: Pesquisa de recuperação de vetores do Atlas
Entrada de texto: o gráfico começa com um nó de texto contendo a palavra "floresta". Essa entrada pode representar um termo de pesquisa ou um recurso de interesse.
Obter incorporação: O nó "GET EMBEDDING" usa o serviço da OpenAI para converter a entrada de texto em um vetor numérico. Esse vetor tem um comprimento de 1536, indicando a dimensionalidade do espaço de incorporação.
Pesquisar no MongoDB os vetores mais próximos com KNN: Com o vetor de incorporação obtido, o gráfico usa um nó rotulado como "SEARCH MONGODB FOR CLOSEST VECTORS WITH KNN." Esse nó é configurado com os seguintes parâmetros:
1Database: search
2Collection: products
3Path: embedding
4K: 1
Essa configuração indica que o nó executará uma pesquisa de k-vizinhos mais próximos para encontrar o vetor mais próximo na coleção de produtos do banco de dados de pesquisa, comparando com o campo de incorporação dos documentos armazenados lá.
Cores diferentes e suas incorporações associadas. Cada documento contém uma matriz de incorporação, que é comparada com o vetor de entrada para encontrar a correspondência mais próxima com base na medida de similaridade escolhida (não mostrada na imagem).

Fluxo de trabalho de gráfico complexo para uma experiência de compra aprimorada usando MongoDB e incorporações

Esta seção examina um fluxo de trabalho sofisticado que aproveita os recursos de processamento de gráficos do Rivet, os recursos robustos de pesquisa do MongoDB e o poder das incorporações de machine learning. Para facilitar isso, usamos um fluxo de trabalho demonstrado em outro tutorial: AI Shop com o MongoDB Atlas. Por meio desse fluxo de trabalho, pretendemos transformar a lista de compras de um usuário em uma seleção cuidadosamente escolhida de produtos, otimizada por relevância e preferências pessoais. Esse fluxo de trabalho gráfico complexo não apenas melhora o engajamento do usuário, mas também simplifica o caminho da descoberta do produto até a compra, oferecendo assim uma experiência aprimorada de compra de supermercado.
Visão geral completa do gráfico

Visão geral do fluxo de alto nível

Entrada do gráfico: o usuário fornece entrada, presumivelmente uma lista de itens ou receitas que deseja comprar.
Pesquisar collection do MongoDB: o gráfico recupera as categorias disponíveis como uma caixa delimitadora para o prompt projetado.
Criação de prompt: um prompt é gerado com base na entrada do usuário, possivelmente para refinar a pesquisa ou interagir com o usuário para obter mais detalhes.
Interação de bate-papo: o gráfico acessa os recursos de bate-papo do OpenAI para produzir uma lista baseada em IA de um JSONestruturado.
Extração JSON e extração de caminho do objeto: os dados relevantes são extraídos da resposta JSON do OpenAI chat.
Geração de incorporação: os dados são então processados para criar incorporações, que são representações em alta dimensão dos itens.
União de pesquisas: essas incorporações são usadas para criar uma união de consultas $search no MongoDB, o que permite um mecanismo de pesquisa mais sofisticado que pode considerar vários aspectos dos itens, como similaridade no sabor, faixa de preço ou preferência de marca.
Saída do gráfico: a consulta criada é gerada de volta do gráfico.

Detalhamento detalhado

Parte 1: Entrada para Pesquisa MongoDB Entrada e Pesquisa A entrada do usuário é coletada e usada para consultar a coleta MongoDB diretamente. Um sistema de chat pode estar envolvido para refinar esta query ou para interagir com o usuário. O resultado da query é então processado para extrair informações relevantes usando métodos de extração JSON e caminho do objeto.
Parte 2: Incorporação na união de pesquisas Passe para incorporar e construir Union Search
O objeto extraído da Parte 1 é obtido e uma incorporação é gerada usando o serviço da OpenAI. Esta incorporação é usada para criar uma query MongoDB $search mais complexa. O nó de código provavelmente contém a lógica para executar uma query de agregação no MongoDB que usa as incorporações geradas para encontrar as melhores correspondências. A saída é então formatada, possivelmente como uma lista de itens de mercearia que correspondem à entrada inicial do usuário, enriquecida pelos embeddings.
Este gráfico demonstra uma integração sofisticada de técnicas de processamento de linguagem natural, consulta a banco de dados e incorporação de aprendizado de máquina para fornecer ao usuário um conjunto avançado de resultados do Atlas Search. Ele recebe uma simples entrada de texto e a transforma em uma query detalhada que entende as nuances das preferências do usuário e dos produtos disponíveis. O resultado final seria um conjunto abrangente e relevante de itens de mercearia personalizados para as necessidades do usuário.

Conecte seu aplicativo à lógica do gráfico

Este snippet de código define uma rota Express.js que trata de POST solicitações para o endpoint /aiRivetSearch. O objetivo da rota é fornecer uma funcionalidade de pesquisa aprimorada por IA para um aplicativo de compras de supermercado, utilizando Rivet para operações gráficas e MongoDB para recuperação de dados.
1// Define a new POST endpoint for handling AI-enhanced search with Rivet
2app.post('/aiRivetSearch', async (req, res) => {
3
4 // Connect to MongoDB using a custom function that handles the connection logic
5 db = await connectToDb();
6
7 // Extract the search query sent in the POST request body
8 const { query } = req.body;
9
10 // Logging the query and environment variables for debugging purposes
11 console.log(query);
12 console.log(process.env.GRAPH_ID);
13 console.log("Before running graph");
14
15 // Load the Rivet project graph from the filesystem to use for the search
16 const project = await loadProjectFromFile('./server/ai_shop.graph.rivet-project');
17
18 // Execute the loaded graph with the provided inputs and plugin settings
19 const response = await runGraph(project, {
20 graph: process.env.GRAPH_ID,
21 openAiKey: process.env.OPEN_AI_KEY,
22 inputs: {
23 input: {
24 type: "string",
25 value: query
26 }
27 },
28 pluginSettings: {
29 rivetPluginMongodb: {
30 mongoDBConnectionString: process.env.RIVET_MONGODB_CONNECTION_STRING,
31 }
32 }
33 });
34
35
36 // Parse the MongoDB aggregation pipeline from the graph response
37 const pipeline = JSON.parse(response.result.value);
38
39 // Connect to the 'products' collection in MongoDB and run the aggregation pipeline
40 const collection = db.collection('products');
41 const result = await collection.aggregate(pipeline).toArray();
42
43 // Send the search results back to the client along with additional context
44 res.json({
45 "result": result,
46 "searchList": response.list.value,
47 prompt: query,
48 pipeline: pipeline
49 });
50
51});
Aqui está uma explicação passo a passo:
Inicialização do endpoint:
  • Uma rota POST assíncrona /aiRivetSearch é configurada para lidar com as queries de pesquisa recebidas. Conexão do MongoDB:
  • O servidor estabelece uma conexão com o MongoDB usando uma função personalizada connectToDb. Essa função presumivelmente é definida em outro lugar na base de código e lida com as especificidades da conexão com a instância do MongoDB. Tratamento de solicitação:
  • O servidor extrai a variável de query do corpo da solicitação. Essa query é a entrada de texto do usuário, que será usada para executar o Atlas Search. Registro para depuração:
  • A query e as variáveis de ambiente relevantes, como Graph_ID (que provavelmente identifica o gráfico específico a ser usado no Rivet), são registradas no console. Isso é útil para fins de depuração, garantindo que o servidor esteja recebendo as entradas corretas. Carregamento e execução do gráfico:
  • O servidor carrega um gráfico de projeto do Rivet de um arquivo no sistema de arquivos do servidor.
  • Usando a função runGraph do Rivet, o gráfico carregado é executado com as entradas fornecidas (a query do usuário) e as configurações do plugin -in. As configurações incluem a connection string openAiKey e MongoDB de variáveis de ambiente. Processamento de resposta:
  • O resultado da execução do gráfico é registrado e o servidor analisa o aggregation pipeline do MongoDB a partir do resultado. O pipeline define uma sequência de operações de agregação de dados a serem executadas na coleção MongoDB. Agregação do MongoDB:
  • O servidor se conecta à collection dos "produtos" no MongoDB.
  • Em seguida, ele executa o pipeline de agregação em relação à collection e aguarda os resultados, convertendo o cursor retornado pela função agregada em uma array com toArray(). Geração de resposta:
  • Finalmente, o servidor responde à solicitação POST do cliente com um objeto JSON. Esse objeto inclui os resultados da agregação, a lista de pesquisa original do usuário, o prompt usado para a pesquisa e o próprio pipeline de agregação. A inclusão do prompt e do pipeline na resposta pode ser particularmente útil para aplicativos front-end exibirem o contexto da consulta ou para depuração.
Esse código combina AI e consulta de banco de dados para criar uma ferramenta de pesquisa avançada em um aplicativo, fornecendo ao usuário resultados relevantes e personalizados com base em suas entradas.
Este e outros códigos de amostra podem ser testados em nosso repositório do Github.

Encerrar: sinergizando o MongoDB com o Rivet para obter soluções de pesquisa Inovadoras

A integração do MongoDB com o Rivet apresenta uma oportunidade única para criar soluções de pesquisa sofisticadas que são poderosas e centralizadas no usuário. O modelo de dados flexível do MongoDB e o pipeline de agregação eficiente, combinados com a capacidade do Rivet de processar e interpretar estruturas de dados complexas por meio de operações de gráficos, abrem o caminho para a criação de aplicativos dinâmicos e inteligentes.
Ao aproveitar os pontos fortes do MongoDB e do Rivet, os desenvolvedores podem criar recursos avançados de pesquisa que não apenas entendam a intenção por trás das queries dos usuários, mas também forneçam resultados personalizados de forma eficiente. Essa sinergia permite a criação de experiências perfeitas que podem se adaptar às necessidades em evolução dos usuários, aproveitando todo o espectro de interações de dados, desde a entrada até o insight.
Como concluímos, fica claro que essa fusão de tecnologia de banco de dados e processamento de gráficos pode servir como uma base para o desenvolvimento futuro de software - permitindo a criação de aplicativos mais intuitivos, responsivos e escaláveis. O potencial de inovação nesse espaço é vasto e a exploração contínua dessa integração, sem dúvida, produzirá novas metodologias para gerenciamento de dados e engajamento de usuários.
Perguntas? comentários? Participe do fórum da comunidade de desenvolvedores do MongoDB.
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
Vídeo

A cena do Atlas Search: Temporada 1


Sep 11, 2024 | 2 min
Tutorial

Como otimizar aplicativos LLM com compactação de prompts usando LLMLingua e LangChain


Jun 18, 2024 | 13 min read
Artigo

Como pausar e retomar clusters do Atlas de maneira fácil


Sep 11, 2024 | 5 min read
Início rápido

MongoDB com agente Bedrock: tutorial rápido


Jul 01, 2024 | 6 min read
Sumário