用于查询处理和扩展的组件。
模块 haystack_experimental.components.query.query_expander
QueryExpander
一个组件,用于生成一系列语义上相似的查询,以提高 RAG 系统中的检索召回率。
该组件使用聊天生成器来扩展查询。聊天生成器应返回一个具有以下结构的 JSON 响应:
使用示例
{"queries": ["expanded query 1", "expanded query 2", "expanded query 3"]}
from haystack.components.generators.chat.openai import OpenAIChatGenerator
from haystack_experimental.components.query import QueryExpander
expander = QueryExpander(
chat_generator=OpenAIChatGenerator(model="gpt-4.1-mini"),
n_expansions=3
)
result = expander.run(query="green energy sources")
print(result["queries"])
# Output: ['alternative query 1', 'alternative query 2', 'alternative query 3', 'green energy sources']
# Note: Up to 3 additional queries + 1 original query (if include_original_query=True)
# To control total number of queries:
expander = QueryExpander(n_expansions=2, include_original_query=True) # Up to 3 total
# or
expander = QueryExpander(n_expansions=3, include_original_query=False) # Exactly 3 total
QueryExpander.__init__
def __init__(*,
chat_generator: Optional[ChatGenerator] = None,
prompt_template: Optional[str] = None,
n_expansions: int = 4,
include_original_query: bool = True)
初始化 QueryExpander 组件。
参数:
chat_generator: 用于查询扩展的聊天生成器组件。如果为 None,则使用默认的 OpenAIChatGenerator 和 gpt-4.1-mini 模型。prompt_template: 自定义的 PromptBuilder 模板,用于查询扩展。模板应指示 LLM 返回一个具有以下结构的 JSON 响应:{"queries": ["query1", "query2", "query3"]}. 模板应包含 'query' 和 'n_expansions' 变量。n_expansions: 要生成的替代查询的数量(默认值:4)。include_original_query: 是否在输出中包含原始查询。
QueryExpander.to_dict
def to_dict() -> Dict[str, Any]
将组件序列化为字典。
返回值:
包含序列化数据的字典。
QueryExpander.from_dict
@classmethod
def from_dict(cls, data: Dict[str, Any]) -> "QueryExpander"
从字典反序列化组件。
参数:
data: 包含序列化数据的字典。
返回值:
反序列化后的组件。
QueryExpander.run
@component.output_types(queries=List[str])
def run(query: str,
n_expansions: Optional[int] = None) -> Dict[str, List[str]]
将输入查询扩展为多个语义上相似的查询。
原始查询的语言在扩展查询中得以保留。
参数:
query: 要扩展的原始查询。n_expansions: 要生成的附加查询的数量(不包括原始查询)。如果为 None,则使用初始化时设置的值。可以设置为 0 以不生成附加查询。
引发:
ValueError: 如果 n_expansions 不是正数(小于或等于 0)。RuntimeError: 如果组件未预热且聊天生成器不支持预热。
返回值:
包含 "queries" 键的字典,其中包含扩展查询列表。如果 include_original_query=True,则除了 n_expansions 个替代查询外,还将包含原始查询。
QueryExpander.warm_up
def warm_up()
预热底层 LLM(如果它支持)。
