跳至内容

检索器路由器

RetrieverRouterQueryEngine #

基础类: 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)