LlamaIndex查询引擎使用指南
在LlamaIndex中,查询引擎是连接你的数据和问题的桥梁。本文将详细介绍如何构建和配置查询引擎,以及如何进行自定义,帮助你更好地利用LlamaIndex进行数据查询。
快速开始
从索引构建查询引擎
首先,你需要构建一个索引。然后,你可以通过以下代码从索引构建一个查询引擎:
query_engine = index.as_query_engine()
提示:
要学习如何构建索引,请参阅索引构建指南。
在你的数据上提问
构建好查询引擎后,你可以通过以下代码在你的数据上提问:
response = query_engine.query("Who is Paul Graham?")
配置查询引擎
高级API
你可以直接从索引在一行代码中构建和配置查询引擎:
query_engine = index.as_query_engine(
response_mode="tree_summarize",
verbose=True,
)
注意:虽然高级API优化了易用性,但它并没有暴露完整的可配置性。
查看响应模式获取完整的响应模式列表及其功能。
低级组合API
如果你需要更细粒度的控制,可以使用低级组合API。具体来说,你可以显式构造一个QueryEngine对象,而不是调用index.as_query_engine(...)
。
注意:你可能需要查看API参考或示例笔记本。
from llama_index.core import VectorStoreIndex, get_response_synthesizer
from llama_index.core.retrievers import VectorIndexRetriever
from llama_index.core.query_engine import RetrieverQueryEngine
# 构建索引
index = VectorStoreIndex.from_documents(documents)
# 配置检索器
retriever = VectorIndexRetriever(
index=index,
similarity_top_k=2,
)
# 配置响应合成器
response_synthesizer = get_response_synthesizer(
response_mode="tree_summarize",
)
# 组装查询引擎
query_engine = RetrieverQueryEngine(
retriever=retriever,
response_synthesizer=response_synthesizer,
)
# 查询
response = query_engine.query("What did the author do growing up?")
print(response)
流式处理
要启用流式处理,你只需传递一个streaming=True
标志:
query_engine = index.as_query_engine(
streaming=True,
)
streaming_response = query_engine.query(
"What did the author do growing up?",
)
streaming_response.print_response_stream()
定义自定义查询引擎
你还可以定义一个自定义查询引擎。只需继承CustomQueryEngine
类,定义你想要的任何属性(类似于定义一个Pydantic类),并实现一个返回Response
对象或字符串的custom_query
函数。
from llama_index.core.query_engine import CustomQueryEngine
from llama_index.core.retrievers import BaseRetriever
from llama_index.core import get_response_synthesizer
from llama_index.core.response_synthesizers import BaseSynthesizer
class RAGQueryEngine(CustomQueryEngine):
"""RAG Query Engine."""
retriever: BaseRetriever
response_synthesizer: BaseSynthesizer
def custom_query(self, query_str: str):
nodes = self.retriever.retrieve(query_str)
response_obj = self.response_synthesizer.synthesize(query_str, nodes)
return response_obj
查看自定义查询引擎指南获取更多详细信息。
通过这些方法,你可以在LlamaIndex中高效地构建和配置查询引擎,根据需要进行自定义和扩展。查询引擎就像是一位魔法师,用魔法棒一挥,就能从海量数据中变出你想要的任何信息。