MultiQueryRetriever Class — langchain Architecture
Architecture documentation for the MultiQueryRetriever class in multi_query.py from the langchain codebase.
Entity Profile
Dependency Diagram
graph TD cc26ec3b_70dc_5b02_e974_582867b22f34["MultiQueryRetriever"] 3a20478a_3692_141f_433b_a32429b00020["BaseRetriever"] cc26ec3b_70dc_5b02_e974_582867b22f34 -->|extends| 3a20478a_3692_141f_433b_a32429b00020 ccf50fe1_4990_cf19_1e2d_25efe83f53c5["LLMChain"] cc26ec3b_70dc_5b02_e974_582867b22f34 -->|extends| ccf50fe1_4990_cf19_1e2d_25efe83f53c5 43921f86_62cb_f2a3_64ed_26543346253a["multi_query.py"] cc26ec3b_70dc_5b02_e974_582867b22f34 -->|defined in| 43921f86_62cb_f2a3_64ed_26543346253a 786bd056_5717_5bc8_1d92_a789ec81a726["from_llm()"] cc26ec3b_70dc_5b02_e974_582867b22f34 -->|method| 786bd056_5717_5bc8_1d92_a789ec81a726 437f73d9_6841_a790_7045_3311a114243f["_aget_relevant_documents()"] cc26ec3b_70dc_5b02_e974_582867b22f34 -->|method| 437f73d9_6841_a790_7045_3311a114243f 1b6d98c6_de11_daac_c877_e735a1432e2b["agenerate_queries()"] cc26ec3b_70dc_5b02_e974_582867b22f34 -->|method| 1b6d98c6_de11_daac_c877_e735a1432e2b b1e3c34e_3ed6_3dee_9d90_294b4ca567cb["aretrieve_documents()"] cc26ec3b_70dc_5b02_e974_582867b22f34 -->|method| b1e3c34e_3ed6_3dee_9d90_294b4ca567cb 381195e9_91cc_fe16_d905_8daed773ffb5["_get_relevant_documents()"] cc26ec3b_70dc_5b02_e974_582867b22f34 -->|method| 381195e9_91cc_fe16_d905_8daed773ffb5 92994c00_54f5_7dc8_1872_bd196eeaf0c3["generate_queries()"] cc26ec3b_70dc_5b02_e974_582867b22f34 -->|method| 92994c00_54f5_7dc8_1872_bd196eeaf0c3 7750376a_7705_ea9a_a41e_4c29c32b85f1["retrieve_documents()"] cc26ec3b_70dc_5b02_e974_582867b22f34 -->|method| 7750376a_7705_ea9a_a41e_4c29c32b85f1 4b4d59ff_8151_861f_adb3_b94cde534dac["unique_union()"] cc26ec3b_70dc_5b02_e974_582867b22f34 -->|method| 4b4d59ff_8151_861f_adb3_b94cde534dac
Relationship Graph
Source Code
libs/langchain/langchain_classic/retrievers/multi_query.py lines 49–240
class MultiQueryRetriever(BaseRetriever):
"""Given a query, use an LLM to write a set of queries.
Retrieve docs for each query. Return the unique union of all retrieved docs.
"""
retriever: BaseRetriever
llm_chain: Runnable
verbose: bool = True
parser_key: str = "lines"
"""DEPRECATED. parser_key is no longer used and should not be specified."""
include_original: bool = False
"""Whether to include the original query in the list of generated queries."""
@classmethod
def from_llm(
cls,
retriever: BaseRetriever,
llm: BaseLanguageModel,
prompt: BasePromptTemplate = DEFAULT_QUERY_PROMPT,
parser_key: str | None = None, # noqa: ARG003
include_original: bool = False, # noqa: FBT001,FBT002
) -> "MultiQueryRetriever":
"""Initialize from llm using default template.
Args:
retriever: retriever to query documents from
llm: llm for query generation using DEFAULT_QUERY_PROMPT
prompt: The prompt which aims to generate several different versions
of the given user query
parser_key: DEPRECATED. `parser_key` is no longer used and should not be
specified.
include_original: Whether to include the original query in the list of
generated queries.
Returns:
MultiQueryRetriever
"""
output_parser = LineListOutputParser()
llm_chain = prompt | llm | output_parser
return cls(
retriever=retriever,
llm_chain=llm_chain,
include_original=include_original,
)
async def _aget_relevant_documents(
self,
query: str,
*,
run_manager: AsyncCallbackManagerForRetrieverRun,
) -> list[Document]:
"""Get relevant documents given a user query.
Args:
query: user query
run_manager: the callback handler to use.
Returns:
Unique union of relevant documents from all generated queries
"""
queries = await self.agenerate_queries(query, run_manager)
if self.include_original:
queries.append(query)
documents = await self.aretrieve_documents(queries, run_manager)
return self.unique_union(documents)
async def agenerate_queries(
self,
question: str,
run_manager: AsyncCallbackManagerForRetrieverRun,
) -> list[str]:
"""Generate queries based upon user input.
Args:
question: user query
run_manager: the callback handler to use.
Returns:
List of LLM generated queries that are similar to the user input
"""
Extends
Source
Frequently Asked Questions
What is the MultiQueryRetriever class?
MultiQueryRetriever is a class in the langchain codebase, defined in libs/langchain/langchain_classic/retrievers/multi_query.py.
Where is MultiQueryRetriever defined?
MultiQueryRetriever is defined in libs/langchain/langchain_classic/retrievers/multi_query.py at line 49.
What does MultiQueryRetriever extend?
MultiQueryRetriever extends BaseRetriever, LLMChain.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free