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 .

Saiba por que o MongoDB foi selecionado como um líder no 2024 Gartner_Magic Quadrupnt()
Desenvolvedor do MongoDB
Centro de desenvolvedores do MongoDB
chevron-right
Produtos
chevron-right
Atlas
chevron-right

Como usar o MongoDB Atlas e os LLMs do IBM watsonx.ai em seus aplicativos de GenAI sem interrupções

Ashwin Gangadhar9 min read • Published Sep 18, 2024 • Updated Sep 18, 2024
IAPesquisa vetorialPythonAtlas
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Um dos desafios dos aplicativos de e-commerce é fornecer recomendações de produtos relevantes e personalizadas aos clientes. Os métodos tradicionais de pesquisa baseados em palavras-chave muitas vezes falham na captura do significado semântica e da intenção das queries de pesquisa do usuário e retornam resultados que não atendem às necessidades do usuário. Por sua vez, eles não conseguem converter em uma venda bem-sucedida. Para resolver esse problema, o RAG (geração aumentada de recuperação) é usado como uma estrutura alimentada pelo MongoDB Atlas Vector Search, LangChaine IBM watsonx.ai.
O RAG é uma técnica de geração de linguagem natural (TLG) que aproveita um módulo retriever para buscar documentos relevantes de um grande corpus e um módulo gerador para produzir texto condicional nos documentos recuperados. Aqui, a estrutura RAG é usada para alimentar recomendações de produtos como uma extensão das técnicas de pesquisa semântica existentes.
  • Os casos de uso do RAG podem ser facilmente criados usando os recursos de pesquisa vetorial do MongoDB Atlas para armazenar e consultar incorporações de produtos em grande escala que representam os recursos e atributos de cada produto. Devido ao esquema flexível do MongoDB, eles são armazenados junto com as incorporações do produto, eliminando a complexidade e a latência de ter que recuperar os dados de tabelas ou bancos de dados separados.
  • O RAG então recupera os produtos mais semelhantes à consulta do usuário com base na semelhança cossenoidal de suas incorporações e gera motivos de linguagem natural que destacam por que esses produtos são relevantes e atraentes para o usuário.
  • O RAG também pode melhorar a experiência do usuário (UX) ao lidar com queries de pesquisa complexas e diversas, como "um suéter quente para o verão" ou "um presente para minha filha que se interessou por ciência", e fornece recomendações de produtos precisas e envolventes que aumentam Satisfação e Lealdade do Cliente.
Pesquisa MongoDB Vector Atlas com IBM Whatsonx

Por que o Atlas Vector Search do MongoDB?

Para permitir que o RAG recupere documentos relevantes, precisamos de um mecanismo de busca vetorial que possa armazenar e consultar com eficiência incorporações de documentos em grande escala. O MongoDB Atlas nos permite indexar documentos com base em suas incorporações e realizar pesquisas de similaridade usando distância cosseno, distância euclidiano ou produto pontual. O MongoDB Atlas também fornece esquema flexível, escalabilidade, segurança e recursos de desempenho em que mais de 45,000 organizações — de startups a empresas e organizações governamentais — dependem.
Ao usar o RAG com o MongoDB Atlas Vector Search, podemos melhorar a experiência do usuário em relação às recomendações de produtos de várias maneiras. Primeiro, podemos fornecer recomendações mais personalizadas e diversas que correspondem à query ou ao contexto do usuário. Em segundo lugar, podemos gerar respostas mais informativas e envolventes que podem explicar por que cada produto é recomendado e como ele se compara a outros. Terceiro, podemos melhorar a relevância e a precisão das recomendações atualizando as incorporações de documentos, pois o MongoDB é principalmente uma camada de dados operacionais (ODL) que fornece recursos de transação.

O que é watsonx.ai?

O Amazonx.ai é o Enterprise Studio de última geração da IBM para construtores de AI, reunindo novos recursos generativos de AI com o tradicional machine learning (ML) que abrange todo o ciclo de vida da AI. Com o watsonx.ai, você pode treinar, validar, ajustar e implantar modelos de ML básicos e tradicionais.
watsonx.ai gera uma biblioteca selecionada de modelos de base, incluindo modelos desenvolvidos pela IBM, modelos de código aberto e modelos fornecidos de fornecedores terceirizados. Nem todos os modelos são criados iguais, e a biblioteca curada oferece às empresas a opcionalidade de selecionar o modelo mais adequado para um caso de uso específico, setor, domínio ou até mesmo desempenho do preço. Além disso, os modelos desenvolvidos pela IBM, como a série de modelos Granite, oferecem outro nível de prontidão empresarial, Transparência e Indenização para casos de uso de produção. Usaremos modelos de Granite em nossa demonstração. Para o leitor interessado, a IBM publicou informações sobre seus dados e metodologia de treinamento para seus modelos de base Granite.

Como criar um pipeline personalizado de descoberta de produto com base em RAG

Para este tutorial, usaremos um conjunto dedados de produtos de e-commerce contendo mais 10,000 detalhes do produto. Usaremos o modelophrase-transformers/all-mpnet-base-v2 da Hugging Face para gerar as incorporações vetoriais para armazenar e recuperar informações do produto. Você precisará de um bloco de anotações Python ou um IDE, uma conta MongoDB Atlas e uma contahastonx.ai para experiência prática.
Por conveniência, o notebook para acompanhar e executar em seu ambiente está disponível no GitHub.

Dependências do Python

  • langchain: framework de orquestração
  • ibm-watson-machine-learning: para IBM LLMs
  • wget: Para baixar dados da base de conhecimento
  • sentence-transformersPara modelo de incorporação
  • pymongoPara o armazenamento de vetores do MongoDB Atlas

watsonx.ai dependencies

Usaremos os modelos de base do watsonx.ai e do Python SDK para implementar nosso pipeline RAG no LangChain.
  1. Cadastre-se para uma versão de avaliação gratuita do watsonx.ai no IBM cloud. Registre-se e prepare-se.
  2. Criar um projeto watsonx.ai. Durante a integração, um projeto de sandbox pode ser criado rapidamente para você. Você pode usar o projeto sandbox ou criar um; o link funcionará depois que você se registrar e configurar o vatsonx.ai. Se precisar de mais ajuda, você pode ler a documentação.
  3. Crie uma chave de API para acessar os modelos de base do watsonx.ai. Siga as etapas para criar sua chave de API.
  4. Instale e use watsonx.ai. Também conhecido como IBM Atlas Machine Learning SDK, asinformações do watsonx.ai SDK estão disponíveis no Github. Como qualquer outro módulo Python, você pode instalá-lo com uma instalação pip. Nosso exemplo de bloco de anotações trata disso para você.
Executaremos todos os trechos de código abaixo em um notebook Jupyter. Você pode optar por executá-los no VS Code ou em qualquer outro IDE de sua escolha.
Inicializar o LLM
Inicialize a URL watsonx para se conectar executando os blocos de código abaixo em seu bloco de anotações Jupyter:
1# watsonx URL
2
3try:
4 wxa_url = os.environ["WXA_URL"]
5
6except KeyError:
7 wxa_url = getpass.getpass("Please enter your watsonx.ai URL domain (hit enter): ")
Insira o URL para acessar o domínio de URL watsonx. Por exemplo: https://us-south.ml.cloud.ibm.com.
Para poder acessar os modelos LLM e outros serviços de AI no watsonx, você precisa inicializar a chave da API. Para iniciar a chave da API, execute o seguinte bloco de código em seu notebook Jupyter:
1# watsonx API Key
2
3try:
4 wxa_api_key = os.environ["WXA_API_KEY"]
5except KeyError:
6 wxa_api_key = getpass.getpass("Please enter your watsonx.ai API key (hit enter): ")
Quando executar o código acima, você será solicitado a adicionar a chave de API do IAM que foi obtida anteriormente.
Cada experimento pode ser marcado ou executado em projetos específicos. Para buscar o projeto relevante, podemos inicializar a ID do projeto executando o bloco de código abaixo no bloco de anotações Jupyter:
1# watsonx Project ID
2
3try:
4 wxa_project_id = os.environ["WXA_PROJECT_ID"]
5except KeyError:
6 wxa_project_id = getpass.getpass("Please enter your watsonx.ai Project ID (hit enter): ")
Você pode encontrar a ID do projeto ao lado da chave de API do IAM no painel de configurações no portal do watsonx.ai.
Modelo de linguagem
No exemplo de código abaixo, inicializaremos o Granite LLM da IBM e, em seguida, demonstraremos como usar o LLM inicializado com a estrutura LangChain antes de construirmos nosso RAG.
Usaremos a pergunta: "Quero apresentar minha filha à ciência e Spark seu entusiasmo. Que tipo de presentes devo dar a ela?"
Isso nos ajudará a demonstrar como o LLM e a pesquisa vetorial funcionam em uma estrutura RAG em cada etapa.
Em primeiro lugar, vamos inicializar o LLM hospedado na nuvem watsonx. Para acessar o modelo de Granito relevante do watsonx, você precisa executar o seguinte bloco de código para inicializar e testar o modelo com nossa consulta de exemplo no bloco de notas do Jupyter:
1from ibm_watson_machine_learning.foundation_models.utils.enums import ModelTypes
2from ibm_watson_machine_learning.foundation_models import Model
3from ibm_watson_machine_learning.metanames import GenTextParamsMetaNames as GenParams
4from ibm_watson_machine_learning.foundation_models.utils.enums import DecodingMethods
5
6parameters = {
7 GenParams.DECODING_METHOD: DecodingMethods.GREEDY,
8 GenParams.MIN_NEW_TOKENS: 1,
9 GenParams.MAX_NEW_TOKENS: 100
10}
11
12model = Model(
13 model_id=ModelTypes.GRANITE_13B_INSTRUCT,
14 params=parameters,
15 credentials={
16 "url": wxa_url,
17 "apikey": wxa_api_key
18 },
19 project_id=wxa_project_id
20)
21
22from ibm_watson_machine_learning.foundation_models.extensions.langchain import WatsonxLLM
23
24granite_llm_ibm = WatsonxLLM(model=model)
25
26# Sample query chosen in the example to evaluate the RAG use case
27query = "I want to introduce my daughter to science and spark her enthusiasm. What kind of gifts should I get her?"
28
29# Sample LLM query without RAG framework
30result = granite_llm_ibm(query)
Saída:
Saída do Notebook Jupyter
Antes de iniciar esta seção, você já deve ter configurado um MongoDB Atlas. Se você ainda não tiver criado uma para si mesmo, poderá seguir as etapas do tutorial do MongoDB Atlas para criar uma conta no Atlas (a plataforma de dados do desenvolvedor) e um MongoDB Atlas dedicated cluster com o qual podemos armazenar e recuperar dados. Também é aconselhável que os usuários gerenciem um MongoDB Atlas dedicated cluster com tamanho M10 ou superior para este tutorial.
Agora, vejamos como podemos configurar o MongoDB Atlas para fornecer informações relevantes para aumentar nossa estrutura RAG.
Cliente mongo
Podemos nos conectar ao cluster do MongoDB Atlas usando a string de conexão conforme detalhado no link do tutorial acima. Para inicializar a connection string, execute o bloco de código abaixo em seu bloco de notas Jupyter:
1from pymongo import MongoClient
2
3try:
4 MONGO_CONN = os.environ["MONGO_CONN"]
5except KeyError:
6 MONGO_CONN = getpass.getpass("Please enter your MongoDB connection String (hit enter): ")
Quando solicitado, você pode inserir sua connection string do MongoDB Atlas.
Baixar e carregar dados no MongoDB Atlas
Nas etapas abaixo, demonstramos como baixar o conjunto de dados de produtos a partir do link de URL fornecido e adicionar os documentos à respectiva coleção no MongoDB Atlas. Também incorporaremos os textos brutos do produto como vetores antes de adicioná-los no MongoDB. Você pode fazer isso executando as seguintes linhas de código em seu notebook Jupyter:
1import wget
2
3filename = './amazon-products.jsonl'
4url = "https://github.com/ashwin-gangadhar-mdb/mbd-watson-rag/raw/main/amazon-products.jsonl"
5
6if not os.path.isfile(filename):
7 wget.download(url, out=filename)
8
9# Load the documents using Langchain Document Loader
10from langchain.document_loaders import JSONLoader
11
12loader = JSONLoader(file_path=filename, jq_schema=".text",text_content=False,json_lines=True)
13docs = loader.load()
14
15# Initialize Embedding for transforming raw documents to vectors**
16from langchain.embeddings import HuggingFaceEmbeddings
17from tqdm import tqdm as notebook_tqdm
18
19embeddings = HuggingFaceEmbeddings()
20
21# Initialize MongoDB client along with Langchain connector module
22from langchain.vectorstores import MongoDBAtlasVectorSearch
23
24client = MongoClient(MONGO_CONN)
25vcol = client["amazon"]["products"]
26vectorstore = MongoDBAtlasVectorSearch(vcol, embeddings)
27
28# Load documents to collection in MongoDB**
29vectorstore.add_documents(docs)
Você poderá ver os documentos que foram criados no banco de dadosamazon na collection products.
Coleção de produtos do MongoDB Atlas
Agora que todas as informações sobre o produto foram adicionadas à respectiva coleção, podemos Go em frente e criar um índice vetorial seguindo as etapas fornecidas no Atlas Search. Você pode criar o índice de pesquisa usando o Atlas e também de forma programática. Vamos dar uma olhada nas etapas se estivermos fazendo isso usando o Atlas.
criar um índice do atlas search
Você pode selecionar a visualização do Editor JSON para inserir a configuração do índice do vetor Atlas Search como mostrado na imagem. Insira o seguinte mapeamento para criar os índices de vetor.
1{
2 "mappings": {
3 "dynamic": true,
4 "fields": {
5 "embedding": [
6 {
7 "dimensions": 768,
8 "similarity": "cosine",
9 "type": "knnVector"
10 }
11 ]
12 }
13 }
14}
Atlas Search Index JSON
Depois de atualizar os índices de pesquisa vetorial na UI do Atlas, será iniciado um processo automático para criar os índices de pesquisa vetorial para a collection pela primeira vez. Isso também indexará automaticamente qualquer novo documento adicionado à coleção. Sem problemas, você poderá atualizar a collection em tempo real à medida que adicionar novos produtos e aumentar o RAG para que os usuários sempre recebam os melhores e mais recentes produtos que você está oferecendo.
Para obter uma descrição dos outros campos dessa configuração, consulte a documentação do Vector Search.
Exemplo de consulta para pesquisa vetorial
Podemos testar a similaridade vetorial do Atlas Search executando a query de amostra com o conector MongoDB MongoDB Atlas Vector Search connector do . Execute o seguinte código em seu bloco de anotações do Jupyter:
1texts_sim = vectorstore.similarity_search(query, k=3)
2
3print("Number of relevant texts: " + str(len(texts_sim)))
4print("First 100 characters of relevant texts.")
5
6for i in range(len(texts_sim)):
7 print("Text " + str(i) + ": " + str(texts_sim[i].page_content[0:100]))
Exemplo de saída da consulta do Vector Search
No código de exemplo acima, podemos usar nossa query de texto de exemplo para recuperar três produtos relevantes. Mais adiante no tutorial, vejamos como podemos combinar os recursos dos LLMs e da pesquisa vetorial para criar uma framework RAG. Para obter mais informações sobre várias operações que você pode executar com o móduloMongoDBAtlasVectorSearch no LangChain, acesse a documentação do MongoDB Atlas Vector Search.

cadeia RAG

Nos trechos de código abaixo, demonstramos como inicializar e consultar a cadeia RAG. Também apresentamos métodos para melhorar a saída do RAG para que você possa personalizar sua saída para atender a necessidades específicas, como o motivo por trás da recomendação do produto, tradução do idioma, resumo etc.
Então, você pode configurar a cadeia RAG e executar para obter a resposta para nossa query de exemplo executando as seguintes linhas de código em seu bloco de notas Jupyter:
1from langchain.chains import RetrievalQA
2from langchain.prompts import PromptTemplate
3
4prompt = PromptTemplate(template="""
5
6Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.
7
8{context}
9
10##Question:{question} \n\
11
12##Top 3 recommnedations from Products and reason:\n""",input_variables=["context","question"])
13
14chain_type_kwargs = {"prompt": prompt}
15retriever = vectorstore.as_retriever(search_type="mmr", search_kwargs={'k': 6, 'lambda_mult': 0.25})
16
17qa = RetrievalQA.from_chain_type(llm=granite_llm_ibm, chain_type="stuff",
18 retriever=retriever,
19 chain_type_kwargs=chain_type_kwargs)
20
21res = qa.run(query)
22
23print(f"{'-'*50}")
24print("Query: " + query)
25print(f"Response:\n{res}\n{'-'*50}\n")
O resultado será:
Exemplo de saída da cadeia RAG
Você pode ver no exemplo de saída onde o RAG é capaz de recomendar produtos com base na consulta, bem como fornecer um raciocínio ou explicação sobre como essa sugestão de produto é relevante para a consulta, aprimorando assim a experiência do usuário.

Conclusão

Neste tutorial, demonstramos como usar LLMs watsonx junto com o Atlas Vector Search para criar uma estrutura RAG. Também demonstramos como usar com eficiência a estrutura RAG para personalizar as necessidades do aplicativo, como o raciocínio para sugestões de produtos. Seguindo as etapas do artigo, também conseguimos trazer o poder dos modelos de aprendizado de máquina para uma base de conhecimento privada que é armazenada na Atlas Developer Data Platform.
Em resumo, o RAG é uma técnica SLG poderosa que pode gerar recomendações de produtos como uma extensão da pesquisa semântica usando recursos de pesquisa vetorial fornecidos pelo MongoDB Atlas. O RAG também pode melhorar a UX das recomendações de produtos, fornecendo descrições mais personalizadas, diversas, informativas e envolventes.

Próximos passos

Explore mais detalhes sobre como construir aplicativos de AI generativa usando várias tecnologias assistidas e o MongoDB Atlas Vector Search.
Para saber mais sobre o Atlas Vector Search, acesse a página do produto ou a documentação para criar um índice de pesquisa vetorial ou executar consultas de pesquisa vetorial.
Para saber mais sobre o watsonx, visite a página do IBM watsonx.
Principais comentários nos fóruns
Avatar do Comentarista do Fórum
jack_Woehrjack woehr2 trimestres atrás

Agora você está falando a minha linguagem!

Veja mais nos fóruns

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Artigo

Conjuntos de dados de amostra do MongoDB Atlas


Dec 02, 2024 | 8 min read
Tutorial

Como distribuir o Vector Search, o Atlas Search e os nós de pesquisa com o Atlas Kubernetes Operator


Dec 20, 2024 | 10 min read
Notícias e Anúncios

Transforme suas habilidades de desenvolvimento de AI com a missão de desenvolvedor RAG to Riches!


Jul 10, 2024 | 1 min read
Tutorial

Anúncio UDF do MongoDB para modelos do BigQuery Dataflow


Apr 02, 2024 | 4 min read
Sumário