Home / Class/ BaseRetrievalQA Class — langchain Architecture

BaseRetrievalQA Class — langchain Architecture

Architecture documentation for the BaseRetrievalQA class in base.py from the langchain codebase.

Entity Profile

Dependency Diagram

graph TD
  cf809fc8_9926_bc74_caaa_077dffa64d09["BaseRetrievalQA"]
  097a4781_5519_0b5d_6244_98c64eadc0d6["Chain"]
  cf809fc8_9926_bc74_caaa_077dffa64d09 -->|extends| 097a4781_5519_0b5d_6244_98c64eadc0d6
  d3aa4510_51a9_c393_bb4a_23fe112c52cd["base.py"]
  cf809fc8_9926_bc74_caaa_077dffa64d09 -->|defined in| d3aa4510_51a9_c393_bb4a_23fe112c52cd
  81aa3a90_ebd8_aebe_e52d_ee328975d0eb["input_keys()"]
  cf809fc8_9926_bc74_caaa_077dffa64d09 -->|method| 81aa3a90_ebd8_aebe_e52d_ee328975d0eb
  69eb560e_47e0_c27a_8cbd_9fc4584a698e["output_keys()"]
  cf809fc8_9926_bc74_caaa_077dffa64d09 -->|method| 69eb560e_47e0_c27a_8cbd_9fc4584a698e
  50c8b35b_9e7e_40df_9c63_565583eeeea2["from_llm()"]
  cf809fc8_9926_bc74_caaa_077dffa64d09 -->|method| 50c8b35b_9e7e_40df_9c63_565583eeeea2
  11f674a2_3218_a108_749a_7c0854fc3e47["from_chain_type()"]
  cf809fc8_9926_bc74_caaa_077dffa64d09 -->|method| 11f674a2_3218_a108_749a_7c0854fc3e47
  5fc51d77_4f49_de63_224c_445958eae5dd["_get_docs()"]
  cf809fc8_9926_bc74_caaa_077dffa64d09 -->|method| 5fc51d77_4f49_de63_224c_445958eae5dd
  9237f79b_5d7a_0e04_1339_a4a3e7f3d2d3["_call()"]
  cf809fc8_9926_bc74_caaa_077dffa64d09 -->|method| 9237f79b_5d7a_0e04_1339_a4a3e7f3d2d3
  9133b428_a4b6_e3a1_f216_7f445746dfeb["_aget_docs()"]
  cf809fc8_9926_bc74_caaa_077dffa64d09 -->|method| 9133b428_a4b6_e3a1_f216_7f445746dfeb
  c390159b_633a_d9fc_ae9a_ef48c89d2b25["_acall()"]
  cf809fc8_9926_bc74_caaa_077dffa64d09 -->|method| c390159b_633a_d9fc_ae9a_ef48c89d2b25

Relationship Graph

Source Code

libs/langchain/langchain_classic/chains/retrieval_qa/base.py lines 40–206

class BaseRetrievalQA(Chain):
    """Base class for question-answering chains."""

    combine_documents_chain: BaseCombineDocumentsChain
    """Chain to use to combine the documents."""
    input_key: str = "query"
    output_key: str = "result"
    return_source_documents: bool = False
    """Return the source documents or not."""

    model_config = ConfigDict(
        populate_by_name=True,
        arbitrary_types_allowed=True,
        extra="forbid",
    )

    @property
    def input_keys(self) -> list[str]:
        """Input keys."""
        return [self.input_key]

    @property
    def output_keys(self) -> list[str]:
        """Output keys."""
        _output_keys = [self.output_key]
        if self.return_source_documents:
            _output_keys = [*_output_keys, "source_documents"]
        return _output_keys

    @classmethod
    def from_llm(
        cls,
        llm: BaseLanguageModel,
        prompt: PromptTemplate | None = None,
        callbacks: Callbacks = None,
        llm_chain_kwargs: dict | None = None,
        **kwargs: Any,
    ) -> BaseRetrievalQA:
        """Initialize from LLM."""
        _prompt = prompt or PROMPT_SELECTOR.get_prompt(llm)
        llm_chain = LLMChain(
            llm=llm,
            prompt=_prompt,
            callbacks=callbacks,
            **(llm_chain_kwargs or {}),
        )
        document_prompt = PromptTemplate(
            input_variables=["page_content"],
            template="Context:\n{page_content}",
        )
        combine_documents_chain = StuffDocumentsChain(
            llm_chain=llm_chain,
            document_variable_name="context",
            document_prompt=document_prompt,
            callbacks=callbacks,
        )

        return cls(
            combine_documents_chain=combine_documents_chain,
            callbacks=callbacks,
            **kwargs,
        )

    @classmethod
    def from_chain_type(
        cls,
        llm: BaseLanguageModel,
        chain_type: str = "stuff",
        chain_type_kwargs: dict | None = None,
        **kwargs: Any,
    ) -> BaseRetrievalQA:
        """Load chain from chain type."""
        _chain_type_kwargs = chain_type_kwargs or {}
        combine_documents_chain = load_qa_chain(
            llm,
            chain_type=chain_type,
            **_chain_type_kwargs,
        )
        return cls(combine_documents_chain=combine_documents_chain, **kwargs)

    @abstractmethod

Extends

Frequently Asked Questions

What is the BaseRetrievalQA class?
BaseRetrievalQA is a class in the langchain codebase, defined in libs/langchain/langchain_classic/chains/retrieval_qa/base.py.
Where is BaseRetrievalQA defined?
BaseRetrievalQA is defined in libs/langchain/langchain_classic/chains/retrieval_qa/base.py at line 40.
What does BaseRetrievalQA extend?
BaseRetrievalQA extends Chain.

Analyze Your Own Codebase

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

Try Supermodel Free