Já procurou por “velhas comédias em preto e branco” apenas para ser bombardeado com uma mistura de filmes de ação modernos? Frustrante, certo? Esse é o desafio dos mecanismos de pesquisa tradicionais: eles muitas vezes têm dificuldade para entender as nuances de nossas consultas, deixando-nos vagando por resultados irrelevantes.
É aqui que entra a Filtragem Inteligente. É uma virada de jogo que usa metadados e pesquisa vetorial para fornecer resultados de pesquisa que realmente correspondem à sua intenção. Imagine encontrar exatamente as comédias clássicas que você deseja, sem complicações.
Iremos nos aprofundar no que é a Filtragem Inteligente, como funciona e por que é essencial para construir melhores experiências de pesquisa. Vamos descobrir a magia por trás dessa tecnologia e explorar como ela pode revolucionar a forma como você pesquisa.
A pesquisa vetorial é uma ferramenta poderosa que ajuda os computadores a compreender o significado por trás dos dados, não apenas as palavras em si. Em vez de combinar palavras-chave, ele se concentra nos conceitos e relacionamentos subjacentes. Imagine pesquisar por “cachorro” e obter resultados que incluem “cachorrinho”, “canino” e até imagens de cachorros. Essa é a magia da pesquisa vetorial!
Como funciona? Bem, ele transforma dados em representações matemáticas chamadas vetores. Esses vetores são como coordenadas em um mapa, e pontos de dados semelhantes estão mais próximos neste espaço vetorial. Quando você pesquisa algo, o sistema encontra os vetores mais próximos da sua consulta, fornecendo resultados semanticamente semelhantes.
Embora a pesquisa vetorial seja fantástica para compreender o contexto, às vezes é insuficiente quando se trata de tarefas simples de filtragem. Por exemplo, encontrar todos os filmes lançados antes de 2000 requer uma filtragem precisa, não apenas uma compreensão semântica. É aqui que entra a Filtragem Inteligente para complementar a pesquisa vetorial.
Embora o vetor nos aproxime da compreensão do verdadeiro significado das consultas, ainda há uma lacuna entre o que os usuários desejam e o que os mecanismos de pesquisa oferecem. Consultas de pesquisa complexas como “primeiros filmes de comédia antes de 2000” ainda podem ser um desafio. A pesquisa semântica pode compreender os conceitos de “comédia” e “filmes”, mas pode ter dificuldades com as especificidades de “mais antigo” e “antes de 2000”.
É aqui que os resultados começam a ficar confusos. Podemos obter uma mistura de comédias antigas e novas, ou mesmo dramas que foram incluídos por engano. Para realmente satisfazer os usuários, precisamos refinar esses resultados de pesquisa e torná-los mais precisos. É aí que os pré-filtros entram em ação.
A Filtragem Inteligente é a solução para este desafio. É uma técnica que utiliza os metadados de um conjunto de dados para criar filtros específicos, refinando os resultados da pesquisa e tornando-os mais precisos e eficientes. Ao analisar as informações sobre seus dados, como estrutura, conteúdo e atributos, a Filtragem Inteligente pode identificar critérios relevantes para filtrar sua pesquisa.
Imagine pesquisar “filmes de comédia lançados antes de 2000”. A Filtragem Inteligente usaria metadados como gênero, data de lançamento e, potencialmente, até mesmo traçaria palavras-chave para criar um filtro que incluísse apenas filmes que atendessem a esses critérios. Dessa forma, você obtém uma lista exatamente do que deseja, sem ruídos irrelevantes.
Vamos nos aprofundar em como funciona a Filtragem Inteligente na próxima seção.
A Filtragem Inteligente é um processo de várias etapas que envolve extrair informações de seus dados, analisá-los e criar filtros específicos com base em suas necessidades. Vamos decompô-lo:
Extração de Metadados: O primeiro passo é coletar informações relevantes sobre seus dados. Isso inclui detalhes como:
Geração de pré-filtro: Depois de obter os metadados, você pode começar a criar pré-filtros. Estas são condições específicas que os dados devem cumprir para serem incluídos nos resultados da pesquisa. Por exemplo, se estiver pesquisando filmes de comédia lançados antes de 2000, você poderá criar pré-filtros para:
Integração com pesquisa vetorial: A etapa final é combinar esses pré-filtros com sua pesquisa vetorial. Isso garante que a pesquisa vetorial considere apenas os pontos de dados que correspondem aos seus critérios predefinidos.
Seguindo essas etapas, a Filtragem Inteligente melhora significativamente a precisão e a eficiência dos resultados da sua pesquisa.
Extração de metadados: Para simplificar as coisas, usaremos dados de amostra e definiremos manualmente os metadados. Consulte: get_docs_metadata em prepare_test_data.py
.
Geração de Pré-filtro: Geraremos os pré-filtros em duas etapas.
Etapa 1: filtro baseado em metadados
Esta etapa inclui a geração de um filtro baseado nos metadados. Passaremos a consulta do usuário e os metadados para um LLM e geraremos o filtro de metadados.
Usaremos o query_constructor que é inicializado com este DEFAULT_SCHEMA_PROMPT.
Observação: atualize o prompt e os poucos exemplos de captura de acordo com seu caso de uso.
Por exemplo: se os metadados tiverem genre
e release_date
e o usuário solicitar filmes de gênero action
lançados antes de 2020, podemos usar o LLM para gerar um filtro como abaixo:
{"$and": [{"genre": {"$in": ["anime"]}}, {"release_date": {"$lt": "2024-01-01"}}]}
Etapa 2: filtragem baseada em tempo
Nesta etapa, trataremos dos casos em que o usuário solicita o tipo de informação latest
, most recent
e earliest
. Teremos que consultar os dados reais para buscar essas informações. Usaremos o Agente LLM nesta etapa para consultar a coleção mongodb usando a ferramenta executora: QueryExecutorMongoDBTool Estamos gerando o filtro baseado em tempo em generate_time_based_filter. Também usaremos o pre_filter gerado na primeira etapa do $match
na etapa de agregação. Por exemplo: Se o usuário desejar o filme mais recente, o agente LLM executará a consulta de agregação abaixo usando a ferramenta executora:
Invoking: `mongo_db_executor` with `{'pipeline': '[{"$match": {"$and": [{"genre": {"$in": ["anime"]}}, {"release_date": {"$lt": "2024-01-01"}}]}}, { "$sort": { "release_date": -1 } }, { "$limit": 1 }, { "$project": { "release_date": 1 } }]'}`
Integração com Vector Search: O pré-filtro gerado será usado com o recuperador MongoDBAtlasVectorSearch:
retriever = vectorstore.as_retriever(
search_kwargs={ ' pre_filter ' : pre_filter}
)
Crie um novo ambiente python
python3 -m venv env
source env/bin/activate
Instale os requisitos
pip3 install -r requirements.txt
Defina as configurações em config.yaml
database_name: < your database name >
collection_name: < your collection name >
vector_index_name: default
embedding_model_dimensions: 1536
similarity: cosine
model: gpt-4o
embedding_model: text-embedding-ada-002
Defina as variáveis de ambiente
export OPEN_AI_API_KEY = " "
export OPEN_API_BASE = " "
# headers are optional
export OPEN_API_DEFAULT_HEADERS= " "
export MONGO_URI= " "
Inicialize a coleção mongodb com dados de amostra. Este comando indexará alguns dados de amostra e também criará um índice de pesquisa vetorial na coleção.
python3 rag/initialize_mongo_collection.py
python3 rag/main.py --queries < list of queries in json format >
python3 rag/main.py --queries ' ["I want to watch an anime genre movie", "Recommend a thriller or action movie release after Feb, 2010", "Recommend an anime movie released before 2023 with the latest release date"] '
Pré-filtros gerados:
Consulta de entrada: "I want to watch an anime genre movie", "Recommend a thriller or action movie release after Feb, 2010"
Saída:
Consulta de entrada: "Recommend a thriller or action movie release after Feb, 2010"
Saída:
Consulta de entrada: "Recommend an anime movie released before 2023 with the latest release date"
Saída:
A Filtragem Inteligente traz uma série de vantagens, tornando-a uma ferramenta valiosa para aprimorar as experiências de pesquisa:
Precisão de pesquisa aprimorada: ao direcionar com precisão os dados que correspondem à sua consulta, a Filtragem Inteligente aumenta drasticamente a probabilidade de encontrar resultados relevantes. Chega de vasculhar informações irrelevantes.
Resultados de pesquisa mais rápidos: como a Filtragem Inteligente restringe o escopo da pesquisa, o sistema pode processar as informações com mais eficiência, levando a resultados mais rápidos.
Experiência do usuário aprimorada: quando os usuários encontram o que procuram com rapidez e facilidade, isso leva a uma maior satisfação e a uma melhor experiência geral.
Versatilidade: a Filtragem Inteligente pode ser aplicada a vários domínios, desde pesquisas de produtos de comércio eletrônico até recomendações de conteúdo, tornando-a uma ferramenta versátil.
Ao aproveitar metadados e criar pré-filtros direcionados, a Filtragem Inteligente permite que você forneça resultados de pesquisa que realmente atendam às expectativas do usuário.
A Filtragem Inteligente é uma ferramenta poderosa que transforma experiências ao preencher a lacuna entre a intenção do usuário e os resultados. Ao aproveitar o poder dos metadados e da pesquisa vetorial, ele fornece resultados de pesquisa mais precisos, relevantes e eficientes.
Esteja você construindo uma plataforma de comércio eletrônico, um sistema de recomendação de conteúdo ou qualquer aplicativo que dependa de pesquisa eficaz, incorporar a Filtragem Inteligente pode aumentar significativamente a satisfação do usuário e gerar melhores resultados.
Ao compreender os fundamentos da Filtragem Inteligente, você estará preparado para explorar seu potencial e implementá-lo em seus projetos. Então, por que esperar? Comece a aproveitar o poder da Filtragem Inteligente hoje e revolucione seu jogo de busca!
Inspirado no Self Query Retriever da LangChain.