Menu Docs
Página inicial do Docs
/
MongoDB Atlas
/ /

Comece com a integração do Spring AI

Nesta página

  • Plano de fundo
  • Pré-requisitos
  • Configurar o ambiente
  • Criar o índice Atlas Vector Search Index
  • Use o Atlas como um Vector Store
  • Armazenar dados personalizados e executar uma query de pesquisa semântica
  • Próximos passos

Você pode integrar o Atlas Vector Search com Spring AI para construir aplicativos de IA generativas usando o MongoDB Java Sync Driver. Este tutorial demonstra como começar a usar o Atlas Vector Search como o armazenamento de vetores para o Spring IA e, em seguida, como executar uma pesquisa semântica em seus dados.

Especificamente, você executa as seguintes ações:

  1. Configure o ambiente.

  2. Crie um índice Atlas Vector Search.

  3. Armazene dados de incorporação de vetor no Atlas.

  4. Execute uma query de pesquisa semântica em seus dados.

Dica

Aplicativo de amostra concluído

Para baixar uma versão concluída do aplicativo que este tutorial demonstra como criar, consulte a seção Próximas etapas .

Spring AI é uma estrutura de aplicativo da Spring que permite combinar vários serviços de IA e plug-ins com seus aplicativos. Você pode usar o Spring AI para uma variedade de casos de uso de IA baseados em texto.

Você pode usar o Atlas como um banco de dados vetorial e usar o Atlas Vector Search para implementar o RAG recuperando documentos semanticamente semelhantes de seus dados. Para saber mais sobre o RAG, consulte Geração de Recuperação Aumentada (RAG) com Atlas Vector Search .

Para concluir este tutorial, você deve ter o seguinte:

  • Um Atlas cluster executando o MongoDB versão 6.0.11, 7.0.2 ou posterior. Garanta que seu endereço IP esteja incluído na lista de acessodo seu projeto Atlas.

  • Uma chave de API OpenAI. Você deve ter uma conta OpenAI paga com créditos disponíveis para solicitações de API. Para saber mais sobre como registrar uma conta OpenAI, consulte o site da API OpenAI.

  • Um ambiente para configurar e executar um aplicativo Java. Recomendamos que você use um ambiente de desenvolvimento integrado (IDE) como IntelliJ IDEA ou Eclipse IDE para configurar o Maven para construir e executar seu projeto.

Você deve primeiro configurar o ambiente para este tutorial, que inclui adicionar as dependências necessárias e definir propriedades de configuração.

1

Navegue até o Initializr do Spring e defina seu projeto com as seguintes configurações:

  • Projeto: Maven

  • Idioma: Java

  • Spring Boot: você pode usar a versão padrão selecionada.

  • Metadados do projeto:

    • Java: 21

    • Você pode usar valores padrão para todos os outros campos.

No lado direito do Spring Initializr, clique em ADD DEPENDENCIES, procure e adicione as seguintes dependências:

  • MongoDB Atlas Vector Database

  • Spring Data MongoDB

Por fim, clique em GENERATE para baixar uma versão compactada do seu projeto Spring. Descompacte o arquivo e abra-o em seu IDE.

2
  1. O Spring AI fornece configuração automática do Spring Boot para o Atlas Vector Search.

    Adicione as seguintes dependências à array dependencies no arquivo pom.xml do seu projeto. Essas dependências adicionam o Spring AI e a biblioteca de configuração automática ao seu aplicativo:

    <dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-spring-boot-autoconfigure</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
  2. Em seguida, certifique-se de que seu arquivo pom.xml contenha uma entrada dependencyManagement para o Lista de materiais (BOM) do Spring AI.

    Importante

    Configure a constante do spring-ai.version utilizada para o BOM do Spring AI como 1.0.0-SNAPSHOT para implementar os recursos mais recentes do Spring AI em seu aplicativo.

    Para saber mais sobre o BOM da IA da Spring, consulte Gerenciamento de dependência seção da documentação da IA do Spring.

  3. Por fim, adicione o repositório Spring AI Snapshot à entrada repositories no arquivo pom.xml :

    <repository>
    <id>spring-snapshots</id>
    <name>Spring Snapshots</name>
    <url>https://repo.spring.io/snapshot</url>
    <releases>
    <enabled>false</enabled>
    </releases>
    </repository>

    Para saber mais sobre esses repositórios, consulte a seção Adicionar repositórios de etapas e snapshots seção da documentação da IA do Spring.

    Depois de terminar de editar o arquivo pom.xml , recarregue seu projeto para garantir que suas dependências estejam instaladas.

3

Localize o arquivo src/main/resources/application.properties e substitua o conteúdo desse arquivo pelas seguintes propriedades. Substitua os placeholders por sua chave de API OpenAI e sua connection string do Atlas:

spring.application.name=springai-mongodb
spring.ai.openai.api-key=<OpenAI API Key>
spring.ai.openai.embedding.options.model=text-embedding-ada-002
spring.data.mongodb.uri=<connection string>
spring.data.mongodb.database=springai_test
spring.ai.vectorstore.mongodb.indexName=vector_index
spring.ai.vectorstore.mongodb.collection-name=vector_store

Observação

Sua string de conexão deve usar o seguinte formato:

mongodb+srv://<db_username>:<db_password>@<clusterName>.<hostname>.mongodb.net/?<settings>

Para saber mais sobre como recuperar sua connection string, consulte o tutorial Introdução ao Atlas .

Para habilitar consultas de pesquisa de vetor em seu armazenamento de vetor, você deve criar um índice do Atlas Vector Search na coleção springai_test.vector_store .

Observação

Acesso necessário

Para criar um Atlas Vector Search índice de pesquisa, você deve ter acesso Project Data Access Admin ou superior ao Atlas projeto.

1

Quando você configura o Atlas como o armazenamento de vetores em seu aplicativo, a IA do Spring pode inicializar o esquema de backend automaticamente. Esta inicialização inclui a criação de um índice do Atlas Vector Search na collection que contém suas incorporações vetoriais. Você pode habilitar a inicialização do esquema adicionando a seguinte configuração ao seu arquivo application.properties :

spring.ai.vectorstore.mongodb.initialize-schema=true

A especificação de initialize-schema=true faz com que a Spring AI crie programaticamente um índice do Atlas Vector Search em seu cluster. Por esse motivo, você deve conectar seu aplicativo a um cluster dedicado. Se você estiver executando um cluster de nível gratuito ou compartilhado, deverá criar separadamente o índice por meio da UI do Atlas, da Administration API do Atlas ou do Atlas CLI.

Para saber mais, consulte Criar um Índice do Atlas Vector Search.

Observação

Problema conhecido: índice existente

Se você tiver um índice existente do Atlas Vector Search chamado vector_index na collection springai_test.vector_store , a IA do Spring não criará um índice adicional. Por isso, você pode enfrentar erros mais tarde no tutorial se o índice existente tiver sido configurado com configurações incompatíveis, como um número diferente de dimensões.

Certifique-se de que seu índice tenha a seguinte configuração:

{
"fields": [
{
"numDimensions": 1536,
"path": "embedding",
"similarity": "cosine",
"type": "vector"
}
]
}

Esta seção demonstra como configurar o Atlas como um banco de dados vetorial, também conhecido como armazenamento de vetor, para que você possa armazenar as incorporações vetoriais de seus dados personalizados.

Localize o arquivo src/main/java/com/example/demo/DemoApplication.java em seu projeto. No mesmo nível deste arquivo, crie um diretório chamado config e, em seguida, crie um arquivo nesse diretório chamado Config.java para definir a configuração do aplicativo Spring.

As etapas a seguir demonstram como criar os objetos Bean necessários para preparar o armazenamento de vetores.

1

Cole o seguinte código no arquivo Config.java para importar as classes necessárias:

import org.springframework.ai.embedding.EmbeddingModel;
import org.springframework.ai.openai.OpenAiEmbeddingModel;
import org.springframework.ai.openai.api.OpenAiApi;
import org.springframework.ai.vectorstore.MongoDBAtlasVectorStore;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.MongoTemplate;
2

Cole o código abaixo no arquivo Config.java para fazer referência aos valores definidos no arquivo de propriedades do aplicativo:

@Configuration
@SpringBootConfiguration
@EnableAutoConfiguration
public class Config {
@Value("${spring.ai.openai.api-key}")
private String openAiKey;
@Value("${spring.data.mongodb.database}")
private String databaseName;
@Value("${spring.ai.vectorstore.mongodb.collection-name:vector_store}")
private String collectionName;
@Value("${spring.ai.vectorstore.mongodb.indexName:vector_index}")
private String indexName;
@Value("${spring.data.mongodb.uri}")
private String mongoUri;
@Value("${spring.ai.vectorstore.mongodb.initialize-schema}")
private Boolean initSchema;
// Add beans here...
}
3

Em seguida, cole o seguinte código para gerar a instância OpenAiEmbeddingModel que utiliza a API OpenAI para criar incorporações vetoriais:

@Bean
public EmbeddingModel embeddingModel() {
return new OpenAiEmbeddingModel(new OpenAiApi(openAiKey));
}
4

Por fim, cole o seguinte código para criar um bean que retorne uma instância VectorStore . A instância do VectorStore utiliza o MongoTemplate que corresponde ao seu sistema e o OpenAiEmbeddingModel criado na etapa anterior.

@Bean
public VectorStore mongodbVectorStore(MongoTemplate mongoTemplate, EmbeddingModel embeddingModel) {
return new MongoDBAtlasVectorStore(mongoTemplate, embeddingModel,
MongoDBAtlasVectorStore.MongoDBVectorStoreConfig.builder().build(), initSchema);
}

Nesta seção, você pode aprender como criar endpoints em seu aplicativo Java para armazenar incorporações vetoriais de dados personalizados no Atlas e, em seguida, executar uma query de pesquisa semântica nesses dados.

No mesmo nível da pasta config , crie uma pasta controller e, em seguida, crie um arquivo Controller.java para configurar seus pontos de conexão de API. As etapas a seguir demonstram como criar endpoints GET para adicionar dados ao seu armazenamento de vetores e executar uma query de pesquisa semântica usando o método similaritySearch() .

1

Cole o seguinte código no arquivo Controller.java para importar as classes necessárias:

import org.springframework.ai.document.Document;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.ai.vectorstore.SearchRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
2

Cole o código abaixo para executar as seguintes tarefas:

  • Anote a classe Controller para marcá-la como controlador de aplicativo.

  • Crie um mapeamento para mapear solicitações para o caminho /tutorial .

  • Ligue automaticamente o bean VectorStore .

@RestController
@RequestMapping("/tutorial")
public class Controller {
@Autowired
private VectorStore vectorStore;
// Add endpoints here...
}
3

Cole o código a seguir no seu controlador para criar um endpoint GET que crie documentos de amostra e os salve no seu armazenamento de vetores como incorporações vetoriais:

@GetMapping("/add")
public String addDocuments() {
List<Document> docs = List.of(
new Document("Proper tuber planting involves site selection, proper timing, and exceptional care. Choose spots with well-drained soil and adequate sun exposure. Tubers are generally planted in spring, but depending on the plant, timing varies. Always plant with the eyes facing upward at a depth two to three times the tuber's height. Ensure 4 inch spacing between small tubers, expand to 12 inches for large ones. Adequate moisture is needed, yet do not overwater. Mulching can help preserve moisture and prevent weed growth.", Map.of("author", "A", "type","post")),
new Document("Successful oil painting necessitates patience, proper equipment, and technique. Begin with a carefully prepared, primed canvas. Sketch your composition lightly before applying paint. Use high-quality brushes and oils to create vibrant, long-lasting artworks. Remember to paint 'fat over lean,' meaning each subsequent layer should contain more oil to prevent cracking. Allow each layer to dry before applying another. Clean your brushes often and avoid solvents that might damage them. Finally, always work in a well-ventilated space.", Map.of("author", "A")),
new Document("For a natural lawn, selection of the right grass type suitable for your climate is crucial. Balanced watering, generally 1 to 1.5 inches per week, is important; overwatering invites disease. Opt for organic fertilizers over synthetic versions to provide necessary nutrients and improve soil structure. Regular lawn aeration helps root growth and prevents soil compaction. Practice natural pest control and consider overseeding to maintain a dense sward, which naturally combats weeds and pest.", Map.of("author", "B", "type","post"))
);
vectorStore.add(docs);
return "Documents added successfully!\n";
}
4

Cole o código a seguir no seu controlador para criar um endpoint GET que executa uma query de pesquisa semântica para a frase "learn how to grow things" e retorna os dois resultados mais relevantes:

1@GetMapping("/search")
2public List<Map<String, Object>> searchDocuments() {
3
4 List<Document> results = vectorStore.similaritySearch(
5 SearchRequest
6 .query("learn how to grow things")
7 .withTopK(2)
8 );
9
10 return results.stream().map(doc -> Map.of(
11 "content", doc.getContent(),
12 "metadata", doc.getMetadata()
13 )).collect(Collectors.toList());
14}
5

Para executar uma pesquisa com filtragem de metadados, você pode usar a classe de construtor Filter.Expression do driver Java Sync.

Você pode usar uma expressão de correspondência MQL para pré-filtrar documentos. Este exemplo filtra documentos nos quais o valor do campo author é "A". Em seguida, ele executa uma query de pesquisa semântica para a frase "learn how to grow things".

No corpo do método searchDocuments() definido na etapa anterior, substitua o código que chama o método similaritySearch() (linhas 4-8 no bloco anterior) pelo seguinte código:

FilterExpressionBuilder b = new FilterExpressionBuilder();
List<Document> results = vectorStore.similaritySearch(
SearchRequest.defaults()
.withQuery("learn how to grow things")
.withTopK(2)
.withSimilarityThreshold(0.5)
.withFilterExpression(b.eq("author", "A").build())
);

Observação

Você deve adicionar o caminho do seu campo de metadados ao seu índice do Atlas Vector Search. Consulte a seção Sobre o tipo filter do tutorial Como indexar campos para o Vector Search para saber mais.

Para saber mais sobre a pré-filtragem de metadados, consulte Pré-filtro do Atlas Vector Search.

Depois de executar o aplicativo, você pode acessar os endpoints para primeiro adicionar documentos ao Vector Store e, em seguida, realizar uma query de pesquisa semântica.

1

Construa e execute seu aplicativo usando suas ferramentas de IDE. Se você estiver utilizando as configurações padrão, seu aplicativo será executado localmente na porta 8080.

2

Após confirmar que seu aplicativo está em execução, execute o seguinte comando no seu terminal para acessar o endpoint add , que converte os dados de amostra em incorporações vetoriais e insere as incorporações no Atlas:

curl -X GET http://localhost:8080/tutorial/add

Dica

Depois de acessar o endpoint, você pode visualizar suas incorporações vetoriais na UI do Atlas navegando até a coleção springai_test.vector_store em seu cluster.

Em seguida, execute o seguinte comando no seu terminal para acessar o endpoint search para executar a pesquisa semântica:

curl -X GET http://localhost:8080/tutorial/search

Você pode ver e baixar uma versão concluída deste aplicativo do GitHub. Você pode usar o aplicativo completo para solucionar problemas do seu próprio aplicativo ou para testar a funcionalidade rapidamente.

O MongoDB também fornece os seguintes recursos para desenvolvedores:

Voltar

Palheiro

Próximo

Cama rochosa do Amazon