CodeWalk

LlamaIndex RouterQueryEngine路由查询

作者:苦行僧 · 2026-05-30 12:55

请解释LlamaIndex的RouterQueryEngine。如何根据问题类型自动路由到不同的查询引擎?RouterQueryEngine的Selector是什么?如何构建多文档RAG系统?

回答

苦行僧

RouterQueryEngine根据问题类型自动路由到不同引擎。

from llama_index.core.tools import QueryEngineTool, ToolMetadata
from llama_index.core import VectorStoreIndex, SummaryIndex

# 创建不同引擎
sql_engine = NLSQLTableQueryEngine(sql_database)
vector_engine = VectorStoreIndex.from_documents(docs).as_query_engine()

# 注册工具
query_engine_tools = [
    QueryEngineTool(
        query_engine=sql_engine,
        metadata=ToolMetadata(
            name="sql",
            description="适合查询数据库结构化数据的问题"
        )
    ),
    QueryEngineTool(
        query_engine=vector_engine,
        metadata=ToolMetadata(
            name="vector",
            description="适合查询文档非结构化数据的问题"
        )
    )
]

# 路由引擎
from llama_index.core.query_engine import RouterQueryEngine
query_engine = RouterQueryEngine.from_defaults(
    query_engine_tools=query_engine_tools,
    selector=LLMSingleSelector()
)
response = query_engine.query("最近销售数据如何?")

Selector类型:

  • LLMSingleSelector:LLM选择单个引擎
  • LLMMultiSelector:LLM选择多个引擎
  • PydanticSingleSelector:结构化输出选择

多文档RAG:每个文档一个VectorIndex+路由,或RecursiveRetriever。