langchain.chains.retrieval.create_retrieval_chain(retriever: Union[BaseRetriever, Runnable[dict, List[Document]]], combine_docs_chain: Runnable[Dict[str, Any], str]) Runnable[source]

Create retrieval chain that retrieves documents and then passes them on.

  • retriever (Union[BaseRetriever, Runnable[dict, List[Document]]]) – Retriever-like object that returns list of documents. Should either be a subclass of BaseRetriever or a Runnable that returns a list of documents. If a subclass of BaseRetriever, then it is expected that an input key be passed in - this is what is will be used to pass into the retriever. If this is NOT a subclass of BaseRetriever, then all the inputs will be passed into this runnable, meaning that runnable should take a dictionary as input.

  • combine_docs_chain (Runnable[Dict[str, Any], str]) – Runnable that takes inputs and produces a string output. The inputs to this will be any original inputs to this chain, a new context key with the retrieved documents, and chat_history (if not present in the inputs) with a value of [] (to easily enable conversational retrieval.


An LCEL Runnable. The Runnable return is a dictionary containing at the very least a context and answer key.

Return type



# pip install -U langchain langchain-community

from langchain_community.chat_models import ChatOpenAI
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain.chains import create_retrieval_chain
from langchain import hub

retrieval_qa_chat_prompt = hub.pull("langchain-ai/retrieval-qa-chat")
llm = ChatOpenAI()
retriever = ...
combine_docs_chain = create_stuff_documents_chain(
    llm, retrieval_qa_chat_prompt
retrieval_chain = create_retrieval_chain(retriever, combine_docs_chain)

chain.invoke({"input": "..."})

Examples using create_retrieval_chain