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
Idiomaschevron-right
Javachevron-right

Construindo um serviço de pesquisa semântica do Atlas com Spring AI e MongoDB Atlas

Tim Kelly9 min read • Published Sep 03, 2024 • Updated Sep 03, 2024
SpringIAJava
APLICATIVO COMPLETO
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Qual é a faixa que diz "Duh da, duh da, DUH da duh"? Todos nós já passamos por isso antes. Lembremo-nos de um trecho do coro, sabemos que tem algo a ver com um hotel em Chelsea, mas que letra é essa? Não me recordo do título — como faz o Atlas Search por energia?! Bem, com o poder da AI, podemos fazer o Atlas Search em nossos bancos de dados, não apenas combinando palavras, mas pesquisando o significado semântica do texto. E com o Spring AI, você pode incorporar o Atlas Search com AIem seu aplicativo Spring. Com apenas a vaga memória de uma modelo que prefere um modelo bonito, podemos localizar nosso clássico do diretor.
Spring AI é uma estrutura de aplicativo da Spring que permite combinar vários AI serviços e plug-ins de com seus aplicativos. Com suporte para muitos modelos de chat, texto para imagem e incorporação, você pode configurar AIseu Java aplicativo habilitado para configurado para uma variedade de AI casos de uso de .
Com o Spring AI, oMongoDB Atlas é suportado como um banco de dados vetorial, todos com o Atlas Vector Search para alimentar sua Atlas Search semântica e implementar seus RAG aplicativos . Para saber mais sobre RAG e outros conceitos-chave em AI, consulte os de MongoDB AI integração de Docs do .
Neste tutorial, Go o que você precisa para começar a usar o Spring AI e o MongoDB, adicionando documentos ao seu banco de dados com o conteúdo vetorizado (embeddings) e pesquisando esse conteúdo com o semântica Atlas Search. O código completo deste tutorial está disponível no repositório doGithub .

Pré-requisitos

Antes de iniciar este tutorial, você precisará ter o seguinte:
  • Uma conta MongoDB Atlas e um cluster M10+ executando MongoDB versão 6.0.11, 7.0.2 ou posterior
    • Um cluster M10+ é necessário para criar o índice programaticamente (por Spring AI).
  • Uma chave de API OpenAI com uma conta OpenAI paga e créditos disponíveis
  • Java 21 e um IDE como IntelliJ IDEA ou Eclipse
  • Maven 3.9.6+ configurado para o seu projeto

Inicialização do Spring

Navegue até o Spring Initializr e configure seu projeto com as seguintes configurações:
Captura de tela do Spring Initializr mostrando as dependências descritas abaixo
  • Projeto: Maven
  • Linguagem: Java
  • Spring Boot: versão padrão
  • Java: 21
Adicione as seguintes dependências:
  • Banco de dados vetorial do MongoDB Atlas
  • Spring Web
  • OpenAI (outros modelos de incorporação estão disponíveis, mas usamos isso para o tutorial)
Gere e baixe seu projeto e abra-o em seu IDE.

Configurando seu projeto

Abra o aplicativo no IDE de sua escolha e a primeira coisa que vamos fazer é inspecionar nosso pom.xml. Para usar a versão mais recente do Spring AI, altere a versãospring-ai.version do BOM do Spring AI para 1.0.0-SNAPSHOT. No momento em que escrevemos este artigo, ele será 1.0.0-M1 por padrão.

Configuração do aplicativo

Configure seu aplicativo Spring para configurar o armazenamento de vetores e outros feições necessárias.
Nas propriedades do aplicativo, vamos configurar nosso banco de MongoDB database, bem como tudo o que precisamos para pesquisar semanticamente nossos dados. Também adicionaremos informações como nosso modelo de incorporação OpenAI e a chave de API.
Você verá no final que estamos definindo o esquema inicializado para ser true. Isso significa que nosso aplicativo configurará nosso índice do Atlas Search (se ele não existir) para que possamos pesquisar semanticamente nossos dados. Se você já tiver um índice do Atlas Search configurado com este nome e configuração, você poderá defini-lo como false.
No seu IDE, abra seu projeto. Crie um arquivoConfig.javaem um pacoteconfig. Aqui, vamos configurar nosso modelo de incorporação OpenAI. A AI do Spring torna este um processo muito simples.
Agora podemos enviar nossos dados para serem vetorizados e receber os resultados vetorizados.

Classes de modelo

Crie um pacote chamado model, para nossa classeDocumentRequestentrar. É isso que Go armazenar em nosso banco de MongoDB database. O conteúdo será o que estamos incorporando - letras, no nosso caso. Os metadados serão qualquer coisa que quisermos armazenar junto com eles, sejam atores, discos ou gêneros. Esses metadados serão retornados junto com nosso conteúdo e também podem ser usados para filtrar nossos resultados.

Interface do repositório

Crie um pacote repositorye adicione uma interfaceLyricSearchRepository . Aqui, definiremos alguns dos métodos que implementaremos mais tarde.

Implementação do repositório

Crie uma classeLyricSearchRepositoryImpl para implementar a interface do repositório.
Estamos usando os métodos add, deletee similaritySearch, todos já definidos e implementados no Spring AI. Isso nos permitirá incorporar nossos dados ao adicioná-los ao banco de MongoDB database, e podemos pesquisar essas incorporações com o Atlas Search vetorial.

Serviço, serviço

Crie um pacote servicee, dentro dele, uma classeLyricSearchService para lidar com a lógica de negócios de nosso aplicativo lírico do Atlas Search. Implementaremos esses métodos mais tarde no tutorial:

Controlador

Crie um pacote de controlador e uma classeLyricSearchControllerpara lidar com solicitações HTTP . Vamos adicionar uma chamada para adicionar nossos dados, uma chamada para excluir quaisquer documentos de que não precisamos mais e uma chamada do Atlas Search, para semanticamente o Atlas Search nossos dados.
Eles chamarão de volta os métodos que definimos anteriormente. Vamos implementá-los nas próximas etapas:

Adicionando documentos

Em nossa classeLyricSearchService, vamos adicionar um pouco de lógica para incluir nossos documentos e adicioná-los ao banco de MongoDB database.
Esta função recebe um único parâmetro, documents, que é uma lista de DocumentRequest objetos. Eles representam os documentos que precisam ser processados e adicionados ao repositório.
A função primeiro verifica se a listadocuments é nula ou vazia.
A listadocuments é convertida em um fluxo para facilitar as operações de estilo funcional.
O filtro é um pouco de pré-processamento para ajudar a limpar nossos dados. Ele remove quaisquer objetosDocumentRequest que sejam nulos, tenham conteúdo nulo ou tenham conteúdo vazio (ou somente espaços em branco). Isso garante que somente documentos válidos sejam processados posteriormente.
Conheça seus limites! O filtro remove quaisquer objetosDocument cujo conteúdo exceda o limite máximo de token (MAX_TOKENS) para a API OpenAI. O limite de token é estimado com base na contagem de palavras, supondo que uma palavra seja um pouco mais de um token (não muito fora da verdade). Essa estimativa funciona para a demonstração, mas, para a produção, provavelmente queremos implementar uma forma de agrupamento, em que grandes corpos de texto são separados em pedaços menores e mais digeríveis.
Cada objetoDocumentRequest é transformado em um objetoDocument. O construtorDocument é chamado com o conteúdo e os metadados de DocumentRequest.
Os objetosDocumentfiltrados e transformados são coletados em uma lista e esses documentos são adicionados ao nosso armazenamento de vetores do MongoDB, junto com uma incorporação das letras.
Também adicionaremos nossa função para excluir documentos enquanto estivermos aqui:
E as importações apropriadas:
Agora que temos a lógica, vamos adicionar os endpoints ao nosso LyricSearchController.
E nossas importações:
Para testar nossa incorporação, vamos mantê-la simples com algumas cantadas por enquanto.
Construa e execute seu aplicativo. Use o seguinte comando CURL para adicionar documentos de amostra:

Pesquisando semanticamente

Vamos definir nosso método de pesquisa em nosso LyricSearchService. É assim que procuraremos semanticamente o Atlas Search nossos documentos em nosso banco de dados.
Este método aceita: - query: um String representando a query do Atlas Search ou o texto para o qual você deseja encontrar letras semanticamente semelhantes - topK: um int especificando o número dos principais resultados a serem recuperados (ou seja, , top 10) - similarityThreshold: um double indicando a pontuação mínima de similaridade que um resultado deve ter para ser incluído nos resultados
Isso retorna uma lista de Map<String, Object> objetos. Cada mapa contém o conteúdo e metadados de um documento que corresponde aos critérios de Pesquisa do Atlas.
E as importações para o nosso serviço:
Vamos adicionar um endpoint ao nosso controlador, construir e executar nosso aplicativo.
E as importações:
Use o seguinte comando CURL para o Atlas Search em suas bancos de dados letras sobre pequenos corpos celestiais:
E pronto! Temos nossa pequena estrela no topo da nossa lista.

Filtrar por metadados

Para filtrar nossos dados, precisamos ir ao nosso índice no MongoDB. Você pode fazer isso por meio da UI do Atlas , selecionando a collection onde seus dados estão armazenados e acessando os índices do Atlas Search. Você pode editar esse índice selecionando os três pontos à direita do nome do índice e adicionaremos nosso filtro para o artista.
Vamos voltar ao nosso LyricSearchService e adicionar um método com um parâmetro de artista para que possamos filtrar nossos resultados.
E as importações de que precisaremos:
E, por último, um endpoint em nosso controlador:
Agora, podemos não apenas Atlas Search como antes, mas podemos dizer que queremos restringi-la apenas a intérpretes específicos.
Use o seguinte comando CURL para tentar uma Atlas Search semântica com filtragem de metadados:
Ao contrário de antes, e mesmo solicitando os cinco principais resultados, só nos é devolvido um documento porque só temos um documento da artista Jane Swift. Viva!

Conclusão

Agora você tem um aplicativo Spring que permite a você Atlas Search através de seus dados realizando pesquisas semânticas. Esta é uma etapa importante quando você deseja implementar seus aplicativos RAG , ou apenas um recurso de Pesquisa do Atlas aprimorado por IA em seus aplicativos.
Se você quiser saber mais sobre a MongoDB AI integração da do Spring do , acompanhe o início rápido da integração do Spring e,AI se tiver alguma dúvida ou quiser nos mostrar o que está construindo, junta-se a nós na MongoDB Community Fóruns.
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
Tutorial

Projetos de coleção única no MongoDB com dados Spring (Parte 1)


Sep 09, 2024 | 10 min read
Artigo

Why Unstructured Data is a Good Fit for Java


Sep 16, 2024 | 7 min read
Artigo

Simplificando o desenvolvimento de aplicativos Java com o MongoDB: um guia abrangente para usar testcontainers


Jul 22, 2024 | 7 min read
Tutorial

Agregações avançadas do MongoDB com Spring Boot e Amazon Corretto


Jun 26, 2024 | 5 min read
Sumário