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

Impulsionando a IA: construa um chatbot sobre seus dados com o MongoDB Atlas Vector Search e os modelos LangChain usando o padrão RAG

Arek Borucki6 min read • Published Sep 18, 2024 • Updated Sep 18, 2024
IAAtlasPesquisa vetorialPython
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Neste tutorial, mostrarei a maneira mais simples de implementar um aplicativo no estilo de chatbot de IA usando o MongoDB Atlas Vector Search com os modelos do LangChain e o padrão RAG (retrieval-augmented generation) para obter respostas de chat mais precisas.

Padrão de geração aumentada de recuperação (RAG)

O modelo de geração aumentada de recuperação (RAG) aprimora os LLMs completando-os com dados adicionais e relevantes, garantindo respostas embasadas e precisas para fins comerciais. Por meio da busca vetorial, o RAG identifica e recupera documentos pertinentes de bancos de dados, que utiliza como contexto enviado ao LLM junto com a query, melhorando assim a qualidade da resposta do LLM. Esta abordagem diminui as imprecisões ao ancorar as respostas no conteúdo factual e garante que as respostas permaneçam relevantes com os dados mais atuais. O RAG otimiza o uso de token sem expandir o limite de token de um LLM, concentrando-se nos documentos mais relevantes para informar o processo de resposta.
Diagrama de armazenamento vetorial
Para detalhar a implementação: considere um sistema de resposta a perguntas que usa um LLM como OpenAI, operando com o modelo RAG. Tudo começa com o Atlas Vector Search para identificar documentos ou trechos de texto relevantes em um banco de dados, fornecendo o contexto necessário para a pergunta. Esse contexto, juntamente com a pergunta, é então processado por meio da API do OpenAI, permitindo uma resposta mais informada e precisa.
O Atlas Vector Search desempenha um papel crucial para desenvolvedores dentro do framework de geração aumentada de recuperação. Uma tecnologia chave para canalizar dados externos para LLMs é o LangChain. Esse framework facilita o desenvolvimento de aplicativos que integram LLMs, abrangendo uma variedade de usos que se alinham às funcionalidades dos próprios modelos de linguagem. Esses usos englobam tarefas como análise e resumo de documentos, operação de chatbots e análise minuciosa do código.
O MongoDB simplificou o processo para os desenvolvedores integrarem a IA em seus aplicativos, unindo-se à LangChain para a introdução de modelos LangChain. Essa colaboração produziu um modelo de geração aumentada de recuperação que capitaliza os pontos fortes do MongoDB Atlas Vector Search junto com as tecnologias da OpenAI. O modelo oferece uma abordagem amigável ao desenvolvedor para criar e implantar aplicativos de chatbot adaptados a conjuntos de dados específicos. Os modelos LangChain servem como um framework de referência para implantação, acessível como uma REST API via LangServe.
A aliança também foi fundamental para apresentar os últimos avanços do Atlas Vector Search, principalmente o estágio de agregação $vectorSearch, agora incorporado às ofertas de Python e JavaScript da LangChain. A joint venture está comprometida com o desenvolvimento contínuo, com planos de revelar mais modelos. Esses futuros acréscimos têm o objetivo de acelerar ainda mais a capacidade dos desenvolvedores de realizar e lançar projetos criativos.

Modelos LangChain

Os modelos LangChain apresentam uma seleção de arquiteturas de referência projetadas para implantação rápida, disponíveis para qualquer usuário. Esses modelos introduzem um sistema inovador para criação, troca, atualização, aquisição e adaptação de diversas cadeias e agentes. Eles são criados em um formato uniforme para uma integração suave com o LangServe, permitindo a implantação rápida de APIs prontas para produção. Além disso, esses modelos fornecem um sandbox gratuito para fins experimentais e de desenvolvimento.
O modelo rag-mongo foi projetado especificamente para executar a geração aumentada de recuperação utilizando tecnologias MongoDB e OpenAI. Vamos dar uma olhada no modelo rag-mongo na seção a seguir deste tutorial.

Uso de modelos RAG do LangChain

Para começar, você só precisa instalar o langchain-cli.
1pip3 install -U "langchain-cli[serve]"
Use a CLI LangChain para inicializar um projeto LangServe rapidamente. O aplicativo será denominado my-blog-articlee o nome do modelo também deve ser especificado. Vou nomeá-lo rag-mongo.
1langchain app new my-blog-article --package rag-mongo
Isso criará um novo diretório chamado my-app com duas pastas:
  • app: é aqui que o código LangServe estará.
  • packages: é aqui que suas cadeias ou agentes ficarão.
Agora, é necessário modificar o arquivomy-blog-article/app/server.py adicionando o seguinte código:
1from rag_mongo import chain as rag_mongo_chain
2add_routes(app, rag_mongo_chain, path="/rag-mongo")
Vamos precisar inserir dados no MongoDB Atlas. Em nosso exercício, utilizamos um documento PDF acessível ao público intitulado "Melhores práticas do MongoDB Atlas" como fonte de dados para construir um espaço vetorial com texto pesquisável. Os dados serão ingeridos no namespace langchain.vectorSearchdo MongoDB.
Para fazer isso, navegue até o diretório my-blog-article/packages/rag-mongo e, no arquivo ingest.py, altere os nomes padrão do MongoDB database e da coleção. Além disso, modifique o URL do documento que você deseja usar para gerar as incorporações.
1cd my-blog-article/packages/rag-mongo
Meu ingest.py está localizado no GitHub. Observe que, se você alterar o nome do banco de dados e da coleção em ingest.py, também precisará alterá-lo em rag_mongo/chain.py. Meu chain.py também está localizado no GitHub. Em seguida, exporte sua chave de API da OpenAI e o URI do MongoDB Atlas.
1export OPENAI_API_KEY="xxxxxxxxxxx"
2export MONGO_URI
3="mongodb+srv://user:passwd@vectorsearch.abc.mongodb.net/?retryWrites=true"
Criar e inserir incorporações no MongoDB Atlas usando modelos LangChain é muito fácil. Você só precisa executar o script ingest.py. Primeiro, ele carregará um documento de um URL especificado usando o PyPDFLoader. Em seguida, ele divide o texto em partes gerenciáveis usando RecursiveCharacterTextSplitter. Por fim, o script usa a API de incorporações da OpenAI para gerar incorporações para cada parte e insere-as no namespace langchain.vectorSearch do MongoDB Atlas.
1python3 ingest.py
Agora é hora de inicializar o Atlas Vector Search. Faremos isso por meio da IU do Atlas. Na interface do usuário do Atlas, escolha Search e, em seguida,Create Search. Em seguida, escolha o JSON Editor para declarar os parâmetros do índice, bem como o banco de dados e a coleção onde o Atlas Vector Search será estabelecido (langchain.vectorSearch). Defina o nome do índice como default. A definição do meu índice é apresentada abaixo.
1{
2 "type": "vectorSearch",
3 "fields": [
4 {
5 "path": "embedding",
6 "dimensions": 1536,
7 "similarity": "cosine",
8 "type": "vector"
9 }
10 ]
11}
Um procedimento detalhado está disponível no GitHub.
Vamos agora dar uma olhada mais de perto no componente central do modelo LangChain rag-mongo: o script chain.py . Esse script utiliza o MongoDBAtlasVectorSearch
classe e é usado para criar um objeto — vectorstore — que interage com os recursos de pesquisa vetorial do MongoDB Atlas para pesquisas de similaridade semântica. O retriever é então configurado a partir de vectorstore para realizar essas pesquisas, especificando o tipo de pesquisa como "semelhante".
1vectorstore = MongoDBAtlasVectorSearch.from_connection_string(
2 MONGO_URI,
3 DB_NAME + "." + COLLECTION_NAME,
4 OpenAIEmbeddings(disallowed_special=()),
5 index_name=ATLAS_VECTOR_SEARCH_INDEX_NAME,
6)
7retriever = vectorstore.as_retriever()
Essa configuração garante que o documento contextualmente mais relevante seja recuperado do banco de dados. Após a recuperação, o script mescla esse documento com uma query do usuário e usa a classe ChatOpenAI para processar a entrada por meio dos modelos GPT do OpenAI, criando uma resposta coerente. Para aprimorar ainda mais esse processo, a classe ChartOpenAI é inicializada com o modelo gpt-3.5-turbo-16k-0613, escolhido por seu desempenho ideal. A temperatura é definida como 0, proporcionando saídas determinísticas consistentes para uma experiência de usuário simplificada e precisa.
1model = ChatOpenAI(model_name="gpt-3.5-turbo-16k-0613",temperature=0)
Essa classe permite personalizar solicitações de API, oferecendo controle sobre tentativas de repetição, limites de tokens e temperatura de resposta. Ela gerencia habilmente várias gerações de respostas, cache de respostas e operações de chamada de resposta. Além disso, facilita tarefas assíncronas para agilizar a geração de respostas e incorpora metadados e marcação para um rastreamento abrangente da execução da API.

LangServe Playground

Depois de criar e armazenar com êxito as incorporações no MongoDB Atlas, você pode começar a utilizar o LangServe Playground executando o comando langchain serve, que concede acesso ao seu chatbot.
1langchain serve
2
3INFO: Will watch for changes in these directories:
4INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
5INFO: Started reloader process [50552] using StatReload
6INFO: Started server process [50557]
7INFO: Waiting for application startup.
8
9LANGSERVE: Playground for chain "/rag-mongo" is live at:
10LANGSERVE: │
11LANGSERVE: └──> /rag-mongo/playground
12LANGSERVE:
13LANGSERVE: See all available routes at /docs
Isso inicia o aplicativo FastAPI, com um servidor executando localmente em http://127.0.0.1:8000. Todos os modelos podem ser visualizados em http://127.0.0.1:8000/docs, e o playground pode ser acessado em http://127.0.0.1:8000/rag-mongo/playground/.
O chatbot responderá perguntas sobre as melhores práticas para usar o MongoDB Atlas com a ajuda do contexto fornecido por meio da pesquisa vetorial. Perguntas sobre outros tópicos não serão consideradas pelo chatbot.
Acesse o seguinte URL:
1http://127.0.0.1:8000/rag-mongo/playground/
E comece a usar seu modelo! Você pode fazer perguntas relacionadas ao MongoDB Atlas no chat.
LangServe Playground
Ao expandir o menu Intermediate steps, você pode rastrear todo o processo de formulação de uma resposta à sua pergunta. Esse processo abrange a busca dos documentos mais pertinentes relacionados à sua query e o encaminhamento deles para a API da Open AI para servir como contexto para a query. Essa metodologia está alinhada com o padrão RAG, em que os documentos relevantes são recuperados para fornecer contexto para gerar uma resposta bem informada a uma query específica.
Também podemos usar curl para interagir com a REST API LangServe e pontos de extremidade de contato, como /rag-mongo/invoke:
1curl -X POST "https://127.0.0.1:8000/rag-mongo/invoke" \
2 -H "Content-Type: application/json" \
3 -d '{"input": "Does MongoDB support transactions?"}'
1{"output":"Yes, MongoDB supports transactions.","callback_events":[],"metadata":{"run_id":"06c70537-8861-4dd2-abcc-04a85a50bcb6"}}
Também podemos enviar solicitações em lote para a API usando o endpoint /rag-mongo/batch, por exemplo:
1curl -X POST "https://127.0.0.1:8000/rag-mongo/batch" \
2 -H "Content-Type: application/json" \
3 -d '{
4 "inputs": [
5 "What options do MongoDB Atlas Indexes include?",
6 "Explain Atlas Global Cluster",
7 "Does MongoDB Atlas provide backups?"
8 ],
9 "config": {},
10 "kwargs": {}
11 }'
1{"output":["MongoDB Atlas Indexes include the following options:\n- Compound indexes\n- Geospatial indexes\n- Text search indexes\n- Unique indexes\n- Array indexes\n- TTL indexes\n- Sparse indexes\n- Partial indexes\n- Hash indexes\n- Collated indexes for different languages","Atlas Global Cluster is a feature provided by MongoDB Atlas, a cloud-based database service. It allows users to set up global clusters on various cloud platforms such as Amazon Web Services, Microsoft Azure, and Google Cloud Platform. \n\nWith Atlas Global Cluster, users can easily distribute their data across different regions by just a few clicks in the MongoDB Atlas UI. The deployment and management of infrastructure and database resources required for data replication and distribution are taken care of by MongoDB Atlas. \n\nFor example, if a user has an accounts collection that they want to distribute among their three regions of business, Atlas Global Cluster ensures that the data is written to and read from different regions, providing high availability and low latency access to the data.","Yes, MongoDB Atlas provides backups."],"callback_events":[],"metadata":{"run_ids":["1516ba0f-1889-4688-96a6-d7da8ff78d5e","4cca474f-3e84-4a1a-8afa-e24821fb1ec4","15cd3fba-8969-4a97-839d-34a4aa167c8b"]}}
Para obter uma documentação abrangente e mais detalhes, visite http://127.0.0.1:8000/docs.

Resumo

Neste artigo, examinamos a sinergia do Atlas Vector Search com os modelos LangChain e o padrão RAG para melhorar significativamente a qualidade da resposta do chatbot. Ao implementar essas ferramentas, os desenvolvedores podem garantir que seus chatbots de IA forneçam respostas altamente precisas e contextualmente relevantes. Entre no futuro da tecnologia de chatbots aplicando os insights e as instruções fornecidos aqui. Eleve sua IA e envolva usuários como nunca antes. Não crie apenas chatbots – crie experiências inteligentes de conversação. Comece agora mesmo com MongoDB Atlas e LangChain!
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

Desenvolvendo seus aplicativos de forma mais eficiente com as instâncias sem servidor do MongoDB Atlas


Feb 03, 2023 | 7 min read
Tutorial

Trabalhando com MongoDB Charts e o novo SDK para JavaScript


Apr 02, 2024 | 10 min read
Tutorial

Inicie um fluxo de trabalho RAG totalmente gerenciado com o MongoDB Atlas e o Amazon Bedrock


May 08, 2024 | 6 min read
Artigo

Usando o SuperDuperDB para acelerar o desenvolvimento de IA no MongoDB Atlas Vector Search


Sep 18, 2024 | 6 min read
Sumário