基础类: BaseQueryEngine
基于检索器的路由查询引擎。
注意:此功能已弃用,请使用新的ToolRetrieverRouterQueryEngine
使用检索器选择一组节点。每个节点将被转换为ToolMetadata对象,并用于检索查询引擎,从而形成QueryEngineTool。
注意:这是一个测试版功能。我们正在研究检索器和查询引擎之间的正确接口。
参数:
名称 |
类型 |
描述 |
默认值 |
selector
|
BaseSelector
|
一个根据每个候选者的元数据和查询从多个选项中选择一个的选择器。
|
required
|
query_engine_tools
|
Sequence[QueryEngineTool]
|
一系列候选查询引擎。它们必须被封装为工具,以便向选择器暴露元数据。
|
required
|
callback_manager
|
Optional[CallbackManager]
|
|
None
|
Source code in llama-index-core/llama_index/core/query_engine/router_query_engine.py
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313 | class RetrieverRouterQueryEngine(BaseQueryEngine):
"""
Retriever-based router query engine.
NOTE: this is deprecated, please use our new ToolRetrieverRouterQueryEngine
Use a retriever to select a set of Nodes. Each node will be converted
into a ToolMetadata object, and also used to retrieve a query engine, to form
a QueryEngineTool.
NOTE: this is a beta feature. We are figuring out the right interface
between the retriever and query engine.
Args:
selector (BaseSelector): A selector that chooses one out of many options based
on each candidate's metadata and query.
query_engine_tools (Sequence[QueryEngineTool]): A sequence of candidate
query engines. They must be wrapped as tools to expose metadata to
the selector.
callback_manager (Optional[CallbackManager]): A callback manager.
"""
def __init__(
self,
retriever: BaseRetriever,
node_to_query_engine_fn: Callable,
callback_manager: Optional[CallbackManager] = None,
) -> None:
self._retriever = retriever
self._node_to_query_engine_fn = node_to_query_engine_fn
super().__init__(callback_manager)
def _get_prompt_modules(self) -> PromptMixinType:
"""Get prompt sub-modules."""
# NOTE: don't include tools for now
return {"retriever": self._retriever}
def _query(self, query_bundle: QueryBundle) -> RESPONSE_TYPE:
nodes_with_score = self._retriever.retrieve(query_bundle)
# TODO: for now we only support retrieving one node
if len(nodes_with_score) > 1:
raise ValueError("Retrieved more than one node.")
node = nodes_with_score[0].node
query_engine = self._node_to_query_engine_fn(node)
return query_engine.query(query_bundle)
async def _aquery(self, query_bundle: QueryBundle) -> RESPONSE_TYPE:
return self._query(query_bundle)
|