Home / Class/ MultiQueryRetriever Class — langchain Architecture

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
        """

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