主题
开始使用
从索引构建一个查询引擎:
query_engine = index.as_query_engine()1
提示
如何构建索引,见索引(Indexing)
针对你的数据提一个问题
response = query_engine.query("Who is Paul Graham?")1
配置查询引擎
高层 API
你可以用一行代码直接从索引构建并配置一个查询引擎:
query_engine = index.as_query_engine(
response_mode="tree_summarize",
verbose=True,
)1
2
3
4
2
3
4
注:高层 API 以便用为先,但并不提供完整的可配置能力。
响应模式的完整清单及其作用,见 响应模式(Response Modes)。
低层组装 API
需要更细粒度的控制时,可以使用低层组装 API。具体来说,你要显式构造一个 QueryEngine 对象,而不是调用 index.as_query_engine(...)。
注:你可能需要查阅 API 参考或示例 notebook。
from llama_index.core import VectorStoreIndex, get_response_synthesizer
from llama_index.core.retrievers import VectorIndexRetriever
from llama_index.core.query_engine import RetrieverQueryEngine
# build index
index = VectorStoreIndex.from_documents(documents)
# configure retriever
retriever = VectorIndexRetriever(
index=index,
similarity_top_k=2,
)
# configure response synthesizer
response_synthesizer = get_response_synthesizer(
response_mode="tree_summarize",
)
# assemble query engine
query_engine = RetrieverQueryEngine(
retriever=retriever,
response_synthesizer=response_synthesizer,
)
# query
response = query_engine.query("What did the author do growing up?")
print(response)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
流式
要启用流式,只需传入 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()1
2
3
4
5
6
7
2
3
4
5
6
7
- Read the full streaming guide
- See an end-to-end example
定义自定义查询引擎
你也可以定义一个自定义查询引擎。只需继承 CustomQueryEngine 类,定义你想要的属性(与定义 Pydantic 类类似),再实现一个 custom_query 函数,返回 Response 对象或字符串即可。
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_obj1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
更多细节见自定义查询引擎指南。