Skip to content

用法模式#

入门指南#

从索引构建查询引擎:

query_engine = index.as_query_engine()

提示

要了解如何构建索引,请参阅 索引

对数据提出问题

response = query_engine.query("保罗·格雷厄姆是谁?")

配置查询引擎#

高级 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("作者在成长过程中做了什么?")
print(response)

流式处理#

要启用流式处理,只需传入 streaming=True 标志

query_engine = index.as_query_engine(
    streaming=True,
)
streaming_response = query_engine.query(
    "作者在成长过程中做了什么?",
)
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 查询引擎。"""

    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

请参阅 自定义查询引擎指南 以获取更多详细信息。