Simplifique a pesquisa semântica do Atlas com LangChain e MongoDB
Brian Leonard3 min read • Published Sep 18, 2024 • Updated Sep 18, 2024
APLICATIVO COMPLETO
Avalie esse Tutorial
Habilitar a pesquisar semântica em dados específicos do usuário é um processo de várias etapas que inclui carregar, transformar, incorporar e armazenar dados antes que eles possam ser consultados.
Esse gráfico é da equipe da LangChain, cujo objetivo é fornecer um conjunto de utilitários para simplificar bastante esse processo.
Neste tutorial, percorreremos cada uma dessas etapas, usando o MongoDB Atlas como nosso Store. Especificamente, usaremos a página da Wikipédia AT&T como nossa fonte de dados. Em seguida, usaremos as bibliotecas do LangChain para carregar, transformar, incorporar e armazenar:
Quando a fonte estiver armazenada no MongoDB, poderemos recuperar os dados que nos interessam:
- Assinatura do MongoDB Atlas (o plano gratuito já serve)
- Chave de API Open AI
- Obtenha o código:
- Criar um novo ambiente Python
- Ativar o novo ambiente Python
- Instale os requisitos
- Carregar, transformar, incorporar e armazenar
- Recuperar
Não faltam fontes de dados - Slack, YouTube, Git, Excel, Reddit, Twitter, etc. - e o LangChain oferece uma lista crescente de integrações que inclui essa lista e muitas outras.
Agora que temos um monte de texto carregado, ele precisa ser dividido em partes menores para que possamos extrair a parte relevante com base em nossa query de pesquisa. Para este exemplo, usaremos o RecursiveCharacterTextSplitter recomendado. Como eu o configurei, ele tenta fazer uma divisão em parágrafos (
"\n\n"
), depois frases ("(?<=\. )"
) e palavras (" "
) usando um tamanho de parte de 1,000 caracteres. Portanto, se um parágrafo não couber em 1,000 caracteres, ele será truncado na próxima palavra que couber para manter o tamanho da parte abaixo de 1,000 caracteres. Você pode ajustar o chunk_size
da forma que quiser. Números menores levarão a mais documentos, e vice-versa.A incorporação é onde você associa seu texto a um LLM para criar uma representação vetorial desse texto. Há muitas opções para escolher, como OpenAI e Hugging Face, e o LangChang fornece uma interface padrão para interagir com todas elas.
Neste exercício, usaremos a popular incorporação da OpenAI. Antes de prosseguir, você precisará de uma chave de API para a plataforma OpenAI, que definirá em params.py.
Vamos simplesmente carregar o incorporador nesta etapa. O verdadeiro poder vem quando armazenamos as incorporações na Etapa 4.
Você precisará de um banco de dados vetorial para armazenar as incorporações e, para sua sorte, o MongoDB se encaixa nesse perfil. Para sua sorte ainda maior, o pessoal da LangChain tem um módulo do MongoDB Atlas que fará todo o trabalho pesado para você! Não se esqueça de adicionar sua string de conexão do MongoDB Atlas ao params.py.
Você encontrará o script completo em vectorize.py, que precisa ser executado uma vez por fonte de dados (e você pode modificar facilmente o código para iterar em várias fontes de dados).
A etapa final antes de podermos fazer uma query nos dados é criar um índice de pesquisa nas incorporações armazenadas.
No console do Atlas e usando o editor JSON, crie um índice de pesquisa denominado
vsearch_index
com a seguinte definição:Agora podemos executar uma pesquisa, usando métodos como similirity_search ou max_marginal_relevance_search. Isso devolveria a fatia relevante de dados, que no nosso caso seria um parágrafo inteiro. No entanto, podemos continuar a aproveitar o poder do LLM para comprimir contextualmente a resposta para que ele tente responder mais diretamente à nossa pergunta.
Principais comentários nos fóruns
Ainda não há comentários sobre este artigo.