使用模式
从索引构建查询引擎:
query_engine = index.as_query_engine()向您的数据提问
response = query_engine.query("Who is Paul Graham?")你可以用一行代码直接从索引中构建并配置一个查询引擎:
query_engine = index.as_query_engine( response_mode="tree_summarize", verbose=True,)Note: While the high-level API optimizes for ease-of-use, it does NOT expose full range of configurability.
查看响应模式获取完整的响应模式列表及其功能说明。
如果您需要更细粒度的控制,可以使用底层组合API。
具体来说,您需要显式构造一个QueryEngine对象,而不是调用index.as_query_engine(...)。
注意:您可能需要查阅API参考或示例笔记本。
from llama_index.core import VectorStoreIndex, get_response_synthesizerfrom llama_index.core.retrievers import VectorIndexRetrieverfrom llama_index.core.query_engine import RetrieverQueryEngine
# build indexindex = VectorStoreIndex.from_documents(documents)
# configure retrieverretriever = VectorIndexRetriever( index=index, similarity_top_k=2,)
# configure response synthesizerresponse_synthesizer = get_response_synthesizer( response_mode="tree_summarize",)
# assemble query enginequery_engine = RetrieverQueryEngine( retriever=retriever, response_synthesizer=response_synthesizer,)
# queryresponse = 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 类),并实现一个 custom_query 函数,该函数返回一个 Response 对象或字符串。
from llama_index.core.query_engine import CustomQueryEnginefrom llama_index.core.retrievers import BaseRetrieverfrom llama_index.core import get_response_synthesizerfrom 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查看自定义查询引擎指南获取更多详情。