Skip to content

Retriever router

RetrieverRouterQueryEngine #

Bases: BaseQueryEngine

基于检索器的路由查询引擎。

注意:此功能已被弃用,请使用我们的新ToolRetrieverRouterQueryEngine

使用检索器选择一组节点。每个节点将被转换为一个ToolMetadata对象,并且还将用于检索查询引擎,以形成一个QueryEngineTool。

注意:这是一个测试版功能。我们正在确定检索器和查询引擎之间的正确接口。

Parameters:

Name Type Description Default
selector BaseSelector

根据每个候选对象的元数据和查询来选择多个选项中的一个的选择器。

required
query_engine_tools Sequence[QueryEngineTool]

候选查询引擎的序列。它们必须被包装为工具,以向选择器公开元数据。

required
callback_manager Optional[CallbackManager]

回调管理器。

None
Source code in llama_index/core/query_engine/router_query_engine.py
263
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
class RetrieverRouterQueryEngine(BaseQueryEngine):
    """基于检索器的路由查询引擎。

    注意:此功能已被弃用,请使用我们的新ToolRetrieverRouterQueryEngine

    使用检索器选择一组节点。每个节点将被转换为一个ToolMetadata对象,并且还将用于检索查询引擎,以形成一个QueryEngineTool。

    注意:这是一个测试版功能。我们正在确定检索器和查询引擎之间的正确接口。

    Args:
        selector (BaseSelector): 根据每个候选对象的元数据和查询来选择多个选项中的一个的选择器。
        query_engine_tools (Sequence[QueryEngineTool]): 候选查询引擎的序列。它们必须被包装为工具,以向选择器公开元数据。
        callback_manager (Optional[CallbackManager]): 回调管理器。"""

    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:
        """获取提示子模块。"""
        # 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)