Skip to main content


These are the core chains for working with documents. They are useful for summarizing documents, answering questions over documents, extracting information from documents, and more.

These chains all implement a common interface:

class BaseCombineDocumentsChain(Chain, ABC):
"""Base interface for chains combining documents."""

def combine_docs(self, docs: List[Document], **kwargs: Any) -> Tuple[str, dict]:
"""Combine documents into a single string."""

📄️ Map reduce

The map reduce documents chain first applies an LLM chain to each document individually (the Map step), treating the chain output as a new document. It then passes all the new documents to a separate combine documents chain to get a single output (the Reduce step). It can optionally first compress, or collapse, the mapped documents to make sure that they fit in the combine documents chain (which will often pass them to an LLM). This compression step is performed recursively if necessary.