mirror of
https://github.com/hwchase17/langchain.git
synced 2025-06-23 07:09:31 +00:00
enable mmr search (#807)
This commit is contained in:
parent
f46f1d28af
commit
b3916f74a7
@ -41,6 +41,8 @@ class VectorDBQA(Chain, BaseModel):
|
|||||||
"""Return the source documents."""
|
"""Return the source documents."""
|
||||||
search_kwargs: Dict[str, Any] = Field(default_factory=dict)
|
search_kwargs: Dict[str, Any] = Field(default_factory=dict)
|
||||||
"""Extra search args."""
|
"""Extra search args."""
|
||||||
|
search_type: str = "similarity"
|
||||||
|
"""Search type to use over vectorstore. `similarity` or `mmr`."""
|
||||||
|
|
||||||
class Config:
|
class Config:
|
||||||
"""Configuration for this pydantic object."""
|
"""Configuration for this pydantic object."""
|
||||||
@ -90,6 +92,15 @@ class VectorDBQA(Chain, BaseModel):
|
|||||||
values["combine_documents_chain"] = combine_documents_chain
|
values["combine_documents_chain"] = combine_documents_chain
|
||||||
return values
|
return values
|
||||||
|
|
||||||
|
@root_validator()
|
||||||
|
def validate_search_type(cls, values: Dict) -> Dict:
|
||||||
|
"""Validate search type."""
|
||||||
|
if "search_type" in values:
|
||||||
|
search_type = values["search_type"]
|
||||||
|
if search_type not in ("similarity", "mmr"):
|
||||||
|
raise ValueError(f"search_type of {search_type} not allowed.")
|
||||||
|
return values
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_llm(
|
def from_llm(
|
||||||
cls, llm: BaseLLM, prompt: PromptTemplate = PROMPT, **kwargs: Any
|
cls, llm: BaseLLM, prompt: PromptTemplate = PROMPT, **kwargs: Any
|
||||||
@ -129,9 +140,16 @@ class VectorDBQA(Chain, BaseModel):
|
|||||||
"""
|
"""
|
||||||
question = inputs[self.input_key]
|
question = inputs[self.input_key]
|
||||||
|
|
||||||
docs = self.vectorstore.similarity_search(
|
if self.search_type == "similarity":
|
||||||
question, k=self.k, **self.search_kwargs
|
docs = self.vectorstore.similarity_search(
|
||||||
)
|
question, k=self.k, **self.search_kwargs
|
||||||
|
)
|
||||||
|
elif self.search_type == "mmr":
|
||||||
|
docs = self.vectorstore.max_marginal_relevance_search(
|
||||||
|
question, k=self.k, **self.search_kwargs
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
raise ValueError(f"search_type of {self.search_type} not allowed.")
|
||||||
answer, _ = self.combine_documents_chain.combine_docs(docs, question=question)
|
answer, _ = self.combine_documents_chain.combine_docs(docs, question=question)
|
||||||
|
|
||||||
if self.return_source_documents:
|
if self.return_source_documents:
|
||||||
|
Loading…
Reference in New Issue
Block a user