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
Avalie esse Tutorial
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.
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.
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.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.Para começar, você só precisa instalar o
langchain-cli
.1 pip3 install -U "langchain-cli[serve]"
Use a CLI LangChain para inicializar um projeto LangServe rapidamente. O aplicativo será denominado
my-blog-article
e o nome do modelo também deve ser especificado. Vou nomeá-lo rag-mongo
.1 langchain 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.
1 from rag_mongo import chain as rag_mongo_chain 2 add_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.vectorSearch
do 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.1 cd my-blog-article/packages/rag-mongo
1 export OPENAI_API_KEY="xxxxxxxxxxx" 2 export 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.1 python3 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 }
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".1 vectorstore = 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 ) 7 retriever = 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.1 model = 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.
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.1 langchain serve 2 3 INFO: Will watch for changes in these directories: 4 INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) 5 INFO: Started reloader process [50552] using StatReload 6 INFO: Started server process [50557] 7 INFO: Waiting for application startup. 8 9 LANGSERVE: Playground for chain "/rag-mongo" is live at: 10 LANGSERVE: │ 11 LANGSERVE: └──> /rag-mongo/playground 12 LANGSERVE: 13 LANGSERVE: 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:
1 http://127.0.0.1:8000/rag-mongo/playground/
E comece a usar seu modelo! Você pode fazer perguntas relacionadas ao MongoDB Atlas no chat.
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
:1 curl -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:1 curl -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
.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.