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

Introdução ao LangChain e ao Atlas Vector Search do MongoDB Atlas

Anaiya Raisinghani, Prakul Agarwal5 min read • Published Dec 08, 2023 • Updated Jan 12, 2024
MongoDB
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Neste tutorial, aproveitaremos o poder do LangChain, MongoDB e OpenAI para ingerir e processar dados criados após o ChatGPT-3.5. Acompanhe o processo para criar seu próprio chatbot capaz de ler documento extensos e fornecer respostas perspicazes a queries complexas!

O que é LangChain?

O LangChain é uma biblioteca Python versátil que permite que os desenvolvedores criem aplicativos baseados em grandes modelos de linguagem (LLMs). Ele ajuda a facilitar a integração de vários LLMs (ChatGPT-3, Hugging Face, etc.) em outras aplicações e a entender e utilizar informações recentes. Como mencionado no nome, LangChain encadeia diferentes componentes, que são chamados de links, para criar um fluxo de trabalho. Cada link individual executa uma tarefa diferente no processo, como acessar uma fonte de dados, chamar um modelo de linguagem, processar a saída, etc. Como a ordem desses links pode ser movida para criar diferentes fluxos de trabalho, o LangChain é superflexível e pode ser usado para criar uma grande variedade de aplicativos.

LangChain e MongoDB

O MongoDB se integra bem ao LangChain por causa dos recursos de pesquisa semântica fornecidos pelo mecanismo de busca vetorial do MongoDB Atlas. Isso permite a combinação perfeita, os usuários podem consultar com base no significado e não por palavras específicas! Além da integração MongoDB LangChain Python e MongoDB LangChain Javascript, o MongoDB recentemente fez parceria com a LangChain no lançamento dos modelos LangChain para facilitar a criação de aplicativos baseados em IA.

Pré-requisitos para o sucesso

  • Conta do MongoDB Atlas
  • Conta da API OpenAI e sua chave de API
  • IDE de sua preferência (este tutorial usa Google Colab)

Mergulhando no tutorial

Nossa primeira etapa é garantir que estamos baixando todos os pacotes essenciais de que precisamos para ter sucesso neste tutorial. No Google Colab, execute o seguinte comando:
1!pip install langchain pypdf pymongo openai python-dotenv tiktoken
Aqui, estamos instalando seis pacotes diferentes em um. O primeiro pacote é langchain (o pacote do framework que estamos usando para integrar os recursos do modelo de linguagem), pypdf (uma biblioteca para trabalhar com documentos PDF no Python), pymongo (o driver oficial do MongoDB para Python para podermos interagir com nosso banco de dados do nosso aplicativo), openai (para que possamos usar os modelos de linguagem do OpenAI), python-dotenv (uma biblioteca usada para ler pares de valores-chave de um arquivo .env) e tiktoken (um pacote para manuseio de token).

Configuração do ambiente

Depois que este comando for executado e nossos pacotes baixados com sucesso, vamos configurar nosso ambiente. Antes de executar esta etapa, certifique-se de ter salvo sua chave de API e sua string do MongoDB Atlas em um arquivo .env na raiz do seu projeto. A ajuda para encontrar sua string do MongoDB Atlas pode ser encontrada nos Docs.
1import os
2from dotenv import load_dotenv
3from pymongo import MongoClient
4
5
6load_dotenv(override=True)
7
8
9# Add an environment file to the notebook root directory called .env with MONGO_URI="xxx" to load these environment variables
10
11
12OPENAI_API_KEY = os.environ["OPENAI_API_KEY"]
13MONGO_URI = os.environ["MONGO_URI"]
14DB_NAME = "langchain-test-2"
15COLLECTION_NAME = "test"
16ATLAS_VECTOR_SEARCH_INDEX_NAME = "default"
17
18
19EMBEDDING_FIELD_NAME = "embedding"
20client = MongoClient(MONGO_URI)
21db = client[DB_NAME]
22collection = db[COLLECTION_NAME]
Fique à vontade para dar o nome que quiser ao seu banco de dados, à sua coleção e até mesmo ao seu índice de pesquisa vetorial. Basta continuar a usar os mesmos nomes durante o tutorial. O sucesso desse bloco de código garante que o banco de dados e a coleção sejam criados em seu MongoDB cluster.

Carregando nossos dados

Vamos carregar o PDF GPT-4 Technical Report. Conforme mencionado acima, esse relatório foi publicado após a data limite de informações do ChatGPT da OpenAI, portanto, o modelo de aprendizado não foi treinado para responder perguntas sobre as informações incluídas neste documento de 100 páginas.
O pacote LangChain nos ajudará a responder a quaisquer perguntas que tenhamos sobre este PDF. Vamos carregar nossos dados:
1from langchain.document_loaders import PyPDFLoader
2from langchain.text_splitter import RecursiveCharacterTextSplitter
3from langchain.embeddings import OpenAIEmbeddings
4from langchain.vectorstores import MongoDBAtlasVectorSearch
5
6
7
8
9loader = PyPDFLoader("https://arxiv.org/pdf/2303.08774.pdf")
10data = loader.load()
11
12
13text_splitter = RecursiveCharacterTextSplitter(chunk_size = 500, chunk_overlap = 50)
14docs = text_splitter.split_documents(data)
15
16
17# insert the documents in MongoDB Atlas Vector Search
18x = MongoDBAtlasVectorSearch.from_documents(
19documents=docs, embedding=OpenAIEmbeddings(disallowed_special=()), collection=MONGODB_COLLECTION, index_name=ATLAS_VECTOR_SEARCH_INDEX_NAME
20)
Neste bloco de código, estamos carregando nosso PDF, usando um comando para fazer a divisão dos dados em várias partes e, em seguida, inserindo os documentos em nossa coleção para que possamos usar nosso Atlas Search nos dados inseridos.
Para testar e ter certeza de que nossos dados estão carregados corretamente, execute um teste:
1docs[0]
Sua saída deve ser semelhante a esta: saída do nosso comando docs[0] para ver se nossos dados estão carregados corretamente

Criando nosso índice de pesquisa

Vamos até a interface de usuário do MongoDB Atlas para criar nosso índice de pesquisa vetorial. Primeiro, clique na aba "Search" e, em seguida, em "Create Search Index.". Você será direcionado para esta página. Clique em "JSON Editor. "
clique no editor JSON na tela
Certifique-se de que o banco de dados e a coleção corretos estejam pressionados e de que você tenha escolhido o nome correto do índice, que foi definido acima. Em seguida, cole o índice de pesquisa que estamos usando para este tutorial:
1{
2 "fields": [
3 {
4 "type": "vector",
5 "path": "embedding",
6 "numDimensions": 1536,
7 "similarity": "cosine"
8 },
9 {
10 "type": "filter",
11 "path": "source"
12 }
13
14 ]
15}
Esses campos devem especificar o nome do campo em nossos documentos. Com embedding, estamos especificando que as dimensões do modelo usado para incorporar são 1536, e a função de similaridade usada para encontrar os vizinhos k mais próximos é cosine. É crucial que as dimensões em nosso índice de pesquisa correspondam às do modelo de linguagem que estamos usando para incorporar nossos dados.
Confira nossa documentação do Vector Search para obter mais informações sobre as definições de configuração do índice.
Depois de configurado, ficará assim: configuração adequada do nosso índice de pesquisa vetorial
Crie o índice de pesquisa e deixe-o carregar.

Executando queries em nossos dados

Agora, estamos prontos para consultar nossos dados! Neste tutorial, mostraremos várias maneiras de executar queries. Vamos utilizar filtros junto com o Vector Search para ver nossos resultados. Vamos começar. Certifique-se de que está conectado ao seu cluster antes de tentar executar a query, caso contrário, ela não funcionará.

Pesquisa semântica no LangChain

Para começar, vamos primeiro ver um exemplo usando o LangChain para realizar uma pesquisa semântica:
1from langchain.embeddings import OpenAIEmbeddings
2from langchain.vectorstores import MongoDBAtlasVectorSearch
3
4
5vector_search = MongoDBAtlasVectorSearch.from_connection_string(
6 MONGO_URI,
7 DB_NAME + "." + COLLECTION_NAME,
8 OpenAIEmbeddings(disallowed_special=()),
9 index_name=ATLAS_VECTOR_SEARCH_INDEX_NAME
10)
11query = "gpt-4"
12results = vector_search.similarity_search(
13 query=query,
14 k=20,
15)
16
17
18for result in results:
19 print( result)
Isso dá o resultado: saída da pesquisa semântica do LangChain
E nos fornece os resultados relevantes que correspondem semanticamente à intenção por trás da pergunta. Agora, vamos ver o que acontece quando fazemos uma pergunta usando o LangChain.

Pergunta e resposta no LangChain

Execute esse bloco de código para ver o que acontece quando fazemos perguntas para ver nossos resultados:
1qa_retriever = vector_search.as_retriever(
2 search_type="similarity",
3 search_kwargs={
4 "k": 200,
5 "post_filter_pipeline": [{"$limit": 25}]
6 }
7)
8from langchain.prompts import PromptTemplate
9prompt_template = """Use 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.
10
11
12{context}
13
14
15Question: {question}
16"""
17PROMPT = PromptTemplate(
18 template=prompt_template, input_variables=["context", "question"]
19)
20from langchain.chains import RetrievalQA
21from langchain.chat_models import ChatOpenAI
22from langchain.llms import OpenAI
23
24
25qa = RetrievalQA.from_chain_type(llm=OpenAI(),chain_type="stuff", retriever=qa_retriever, return_source_documents=True, chain_type_kwargs={"prompt": PROMPT})
26
27
28docs = qa({"query": "gpt-4 compute requirements"})
29
30
31print(docs["result"])
32print(docs['source_documents'])
Após a execução, obtemos o resultado:
1GPT-4 requires a large amount of compute for training, it took 45 petaflops-days of compute to train the model. [Document(page_content='gpt3.5Figure 4. GPT performance on academic and professional exams. In each case, we simulate
Isso fornece uma resposta sucinta à nossa pergunta, com base na fonte de dados fornecida.

Conclusão

Parabéns! Você carregou com sucesso dados externos e os consultou usando o LangChain e o MongoDB. Para obter mais informações sobre o MongoDB Vector Search, visite nossa documentação

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

Emaranhados: uma história de remodelagem de dados e redução de armazenamento 10x


Dec 14, 2023 | 5 min read
Início rápido

Criar, ler, atualizar e excluir documentos MongoDB com PHP


Sep 11, 2024 | 8 min read
Artigo

Mapeando Termos e Conceitos do SQL para o MongoDB


Oct 01, 2024 | 15 min read
Tutorial

Crie uma Java REST API com Quarkus e Eclipse JNoSQL para MongoDB


Jan 30, 2024 | 6 min read
Sumário