langchain-hs-0.0.2.0: Haskell implementation of Langchain
Copyright(c) 2025 Tushar Adhatrao
LicenseMIT
MaintainerTushar Adhatrao <[email protected]>
Stabilityexperimental
Safe HaskellNone
LanguageHaskell2010

Langchain.Retriever.MultiQueryRetriever

Description

Advanced retriever implementation that generates multiple queries from a single input to improve document retrieval. Integrates with LLMs for query expansion and vector stores for document retrieval

Example usage:

-- Create components
ollamaLLM = Ollama "llama3" []
vs = VectorStoreRetriever (createVectorStore ...)

-- Create retriever with default config
mqRetriever = newMultiQueryRetriever vs ollamaLLM

-- Retrieve documents
docs <- _get_relevant_documents mqRetriever "Haskell features"
-- Returns combined results from multiple generated queries
Synopsis

Documentation

data (Retriever a, LLM m) => MultiQueryRetriever a m Source #

Multi-query retriever implementation Generates multiple queries using an LLM, retrieves documents for each query, and combines results. Improves recall by exploring different query formulations.

Example instance:

mqRetriever = MultiQueryRetriever
  { retriever = vectorStoreRetriever
  , llm = ollamaLLM
  , config = defaultMultiQueryRetrieverConfig
  }

Constructors

MultiQueryRetriever 

Fields

  • retriever :: a

    The base retriever

  • llm :: m

    The language model for generating queries

  • config :: MultiQueryRetrieverConfig

    Configuration

Instances

Instances details
(Retriever a, LLM m) => Retriever (MultiQueryRetriever a m) Source #

Retriever instance implementation 1. Generates multiple queries using LLM 2. Retrieves documents for each query 3. Combines and deduplicates results

Example retrieval:

>>> _get_relevant_documents mqRetriever "Haskell"
Right [Document "Haskell is...", Document "Functional programming...", ...]
Instance details

Defined in Langchain.Retriever.MultiQueryRetriever

(Retriever a, LLM m) => Runnable (MultiQueryRetriever a m) Source #

Runnable interface implementation Allows integration with LangChain workflows:

>>> invoke mqRetriever "AI applications"
Right [Document "Machine learning...", ...]
Instance details

Defined in Langchain.Retriever.MultiQueryRetriever

type RunnableInput (MultiQueryRetriever a m) Source # 
Instance details

Defined in Langchain.Retriever.MultiQueryRetriever

type RunnableOutput (MultiQueryRetriever a m) Source # 
Instance details

Defined in Langchain.Retriever.MultiQueryRetriever

newtype QueryGenerationPrompt Source #

Query generation prompt template Controls how the LLM generates multiple query variants from the original query.

Example prompt structure:

"You are an AI assistant... Original query: {query}... Generate {num_queries} versions..."

newMultiQueryRetriever :: (Retriever a, LLM m) => a -> m -> MultiQueryRetriever a m Source #

Create retriever with default settings Example:

>>> newMultiQueryRetriever vsRetriever ollamaLLM
MultiQueryRetriever {numQueries = 3, ...}

defaultQueryGenerationPrompt :: QueryGenerationPrompt Source #

Default query generation prompt Generates 3 query variants in numbered list format. Includes instructions for query diversity and formatting.

newMultiQueryRetrieverWithConfig :: (Retriever a, LLM m) => a -> m -> MultiQueryRetrieverConfig -> MultiQueryRetriever a m Source #

Create retriever with custom configuration Example:

>>> let customCfg = defaultMultiQueryRetrieverConfig { numQueries = 5 }
>>> newMultiQueryRetrieverWithConfig vsRetriever ollamaLLM customCfg
MultiQueryRetriever {numQueries = 5, ...}

defaultMultiQueryRetrieverConfig :: MultiQueryRetrieverConfig Source #

Default configuration - 3 generated queries - Includes original query results - Uses default query generation prompt

generateQueries :: LLM m => m -> QueryGenerationPrompt -> Text -> Int -> Bool -> IO (Either String [Text]) Source #

Generate multiple query variants using LLM Example:

>>> generateQueries ollamaLLM prompt "Haskell" 3 True
Right ["Haskell", "Haskell features", "Haskell applications"]