Home / Class/ MultiRetrievalQAChain Class — langchain Architecture

MultiRetrievalQAChain Class — langchain Architecture

Architecture documentation for the MultiRetrievalQAChain class in multi_retrieval_qa.py from the langchain codebase.

Entity Profile

Dependency Diagram

graph TD
  990cc7ef_647a_c860_f824_1bcc6abd9bc2["MultiRetrievalQAChain"]
  741a7f73_f662_9d17_6b91_e7e8709f4338["MultiRouteChain"]
  990cc7ef_647a_c860_f824_1bcc6abd9bc2 -->|extends| 741a7f73_f662_9d17_6b91_e7e8709f4338
  32bcbccc_de22_c42f_6744_c974b798be10["multi_retrieval_qa.py"]
  990cc7ef_647a_c860_f824_1bcc6abd9bc2 -->|defined in| 32bcbccc_de22_c42f_6744_c974b798be10
  296511c6_b37f_bf7a_d1e5_1b7a7fd5dcce["output_keys()"]
  990cc7ef_647a_c860_f824_1bcc6abd9bc2 -->|method| 296511c6_b37f_bf7a_d1e5_1b7a7fd5dcce
  6adee4b9_b989_5078_d057_fce159e870b7["from_retrievers()"]
  990cc7ef_647a_c860_f824_1bcc6abd9bc2 -->|method| 6adee4b9_b989_5078_d057_fce159e870b7

Relationship Graph

Source Code

libs/langchain/langchain_classic/chains/router/multi_retrieval_qa.py lines 27–134

class MultiRetrievalQAChain(MultiRouteChain):
    """Multi Retrieval QA Chain.

    A multi-route chain that uses an LLM router chain to choose amongst retrieval
    qa chains.
    """

    router_chain: LLMRouterChain
    """Chain for deciding a destination chain and the input to it."""
    destination_chains: Mapping[str, BaseRetrievalQA]
    """Map of name to candidate chains that inputs can be routed to."""
    default_chain: Chain
    """Default chain to use when router doesn't map input to one of the destinations."""

    @property
    @override
    def output_keys(self) -> list[str]:
        return ["result"]

    @classmethod
    def from_retrievers(
        cls,
        llm: BaseLanguageModel,
        retriever_infos: list[dict[str, Any]],
        default_retriever: BaseRetriever | None = None,
        default_prompt: PromptTemplate | None = None,
        default_chain: Chain | None = None,
        *,
        default_chain_llm: BaseLanguageModel | None = None,
        **kwargs: Any,
    ) -> MultiRetrievalQAChain:
        """Create a multi retrieval qa chain from an LLM and a default chain.

        Args:
            llm: The language model to use.
            retriever_infos: Dictionaries containing retriever information.
            default_retriever: Optional default retriever to use if no default chain
                is provided.
            default_prompt: Optional prompt template to use for the default retriever.
            default_chain: Optional default chain to use when router doesn't map input
                to one of the destinations.
            default_chain_llm: Optional language model to use if no default chain and
                no default retriever are provided.
            **kwargs: Additional keyword arguments to pass to the chain.

        Returns:
            An instance of the multi retrieval qa chain.
        """
        if default_prompt and not default_retriever:
            msg = (
                "`default_retriever` must be specified if `default_prompt` is "
                "provided. Received only `default_prompt`."
            )
            raise ValueError(msg)
        destinations = [f"{r['name']}: {r['description']}" for r in retriever_infos]
        destinations_str = "\n".join(destinations)
        router_template = MULTI_RETRIEVAL_ROUTER_TEMPLATE.format(
            destinations=destinations_str,
        )
        router_prompt = PromptTemplate(
            template=router_template,
            input_variables=["input"],
            output_parser=RouterOutputParser(next_inputs_inner_key="query"),
        )
        router_chain = LLMRouterChain.from_llm(llm, router_prompt)
        destination_chains = {}
        for r_info in retriever_infos:
            prompt = r_info.get("prompt")
            retriever = r_info["retriever"]
            chain = RetrievalQA.from_llm(llm, prompt=prompt, retriever=retriever)
            name = r_info["name"]
            destination_chains[name] = chain
        if default_chain:
            _default_chain = default_chain
        elif default_retriever:
            _default_chain = RetrievalQA.from_llm(
                llm,
                prompt=default_prompt,
                retriever=default_retriever,
            )
        else:

Extends

Frequently Asked Questions

What is the MultiRetrievalQAChain class?
MultiRetrievalQAChain is a class in the langchain codebase, defined in libs/langchain/langchain_classic/chains/router/multi_retrieval_qa.py.
Where is MultiRetrievalQAChain defined?
MultiRetrievalQAChain is defined in libs/langchain/langchain_classic/chains/router/multi_retrieval_qa.py at line 27.
What does MultiRetrievalQAChain extend?
MultiRetrievalQAChain extends MultiRouteChain.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free