LlamaIndex RouterQueryEngine路由查询
请解释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。