Multi-query retrieval helps find better answers by asking several questions instead of just one. It improves how well you get the right information.
Multi-query retrieval for better recall in LangChain
from langchain.vectorstores import FAISS from langchain.chains import MultiQueryRetriever # Create a vector store (example with FAISS) vector_store = FAISS.load_local("path_to_index", embedding_function) # Create a MultiQueryRetriever multi_query_retriever = MultiQueryRetriever( retriever=vector_store.as_retriever(), queries=["query 1", "query 2", "query 3"] ) # Retrieve documents results = multi_query_retriever.get_relevant_documents("main question")
The MultiQueryRetriever takes multiple queries to improve recall.
You need a vector store retriever like FAISS or others to use it.
multi_query_retriever = MultiQueryRetriever(
retriever=vector_store.as_retriever(),
queries=["climate change", "global warming"]
)
results = multi_query_retriever.get_relevant_documents("effects on environment")multi_query_retriever = MultiQueryRetriever(
retriever=vector_store.as_retriever(),
queries=[]
)
results = multi_query_retriever.get_relevant_documents("renewable energy")multi_query_retriever = MultiQueryRetriever(
retriever=vector_store.as_retriever(),
queries=["AI ethics", "machine learning fairness", "bias in AI"]
)
results = multi_query_retriever.get_relevant_documents("ethical AI development")This program loads a saved FAISS vector store, sets up a multi-query retriever with three related queries about AI history, and retrieves documents for a main question. It then prints the titles of the found documents.
from langchain.vectorstores import FAISS from langchain.embeddings import OpenAIEmbeddings from langchain.chains import MultiQueryRetriever # Setup embeddings and vector store embedding_function = OpenAIEmbeddings() # Assume we have a FAISS index saved locally vector_store = FAISS.load_local("./faiss_index", embedding_function) # Create MultiQueryRetriever with multiple queries multi_query_retriever = MultiQueryRetriever( retriever=vector_store.as_retriever(), queries=["history of AI", "AI milestones", "AI breakthroughs"] ) # Retrieve documents for a main question documents = multi_query_retriever.get_relevant_documents("important events in AI development") # Print titles of retrieved documents print("Retrieved document titles:") for doc in documents: print(doc.metadata.get('title', 'No Title'))
Multi-query retrieval improves recall by combining results from several queries.
Time complexity depends on the number of queries and size of the vector store.
Common mistake: Using unrelated queries can reduce result quality.
Use multi-query retrieval when you want broader coverage than a single query.
Multi-query retrieval asks several related questions to get better search results.
It works by combining results from multiple queries in a vector store retriever.
This method helps find more complete and relevant documents for complex topics.
Practice
Solution
Step 1: Understand the concept of multi-query retrieval
Multi-query retrieval involves asking multiple related questions instead of just one to improve the quality of search results.Step 2: Identify the main goal of this approach
The goal is to get better and more complete search results by combining answers from several queries.Final Answer:
To ask several related questions to get better search results -> Option DQuick Check:
Multi-query retrieval = multiple related questions for better results [OK]
- Confusing multi-query with reducing query count
- Thinking it stores data in multiple places
- Assuming it speeds up by using fewer queries
Solution
Step 1: Check the required parameters for MultiQueryRetriever
The MultiQueryRetriever is created using from_llm which requires a BaseRetriever (from vectorstore.as_retriever()) and an llm.Step 2: Identify the correct syntax
MultiQueryRetriever.from_llm(vectorstore.as_retriever(), llm) correctly uses the classmethod with proper arguments.Final Answer:
MultiQueryRetriever.from_llm(vectorstore.as_retriever(), llm) -> Option CQuick Check:
Correct syntax includes from_llm, .as_retriever(), and llm [OK]
- Passing queries as a list to constructor
- Using direct constructor without llm_chain
- Forgetting .as_retriever() on vectorstore
results?
retriever = MultiQueryRetriever.from_llm(vectorstore.as_retriever(), llm)
results = retriever.get_relevant_documents("AI")Solution
Step 1: Understand MultiQueryRetriever behavior
It [uses the LLM to] runs multiple queries and combines their results into a single list of documents.Step 2: Analyze the method call
Calling get_relevant_documents("AI") triggers retrieval for all [generated] queries, returning combined documents.Final Answer:
A list of documents combining results from both queries -> Option BQuick Check:
Multi-query retrieval returns combined document list [OK]
- Expecting a dictionary instead of a list
- Thinking it returns only first query results
- Assuming get_relevant_documents takes no arguments
retriever = MultiQueryRetriever.from_llm(vectorstore, llm)
results = retriever.get_relevant_documents("AI")Solution
Step 1: Check the constructor parameters
from_llm expects a BaseRetriever as the first argument, but vectorstore is a VectorStore; use vectorstore.as_retriever().Step 2: Verify other parts of the code
get_relevant_documents has argument; llm assumed defined; class exists.Final Answer:
vectorstore.as_retriever() is missing -> Option AQuick Check:
from_llm requires BaseRetriever [OK]
- Passing vectorstore directly instead of retriever
- Thinking get_relevant_documents needs no arg when it does
- Assuming vectorstore undefined without context
Solution
Step 1: Understand multi-query retrieval goal
It aims to combine results from multiple related queries to improve recall.Step 2: Identify best practice to avoid duplicates
Using MultiQueryRetriever.from_llm(retriever, llm) generates multiple queries via LLM and deduplicates results for completeness without repeats.Final Answer:
Use MultiQueryRetriever.from_llm(retriever, llm) to generate multiple queries and deduplicate results -> Option AQuick Check:
MultiQueryRetriever generates + deduplicates = best recall [OK]
- Running queries separately without combining results
- Merging queries into one string loses query specificity
- Using only one query misses relevant documents
Ready to prove it?
Pass the test and this pattern moves unknown
