LlamaIndex流式响应:实时获取查询结果
在LlamaIndex中,流式响应功能允许你在生成响应的同时进行流式传输。这意味着你可以在完整响应完成之前就开始打印或处理响应的开头部分。这可以显著减少查询的感知延迟。
设置
要启用流式传输,你需要使用支持流式传输的LLM。目前,OpenAI、HuggingFaceLLM以及大多数LangChain LLMs(通过LangChainLLM)都支持流式传输。
注意:如果你选择的LLM不支持流式传输,将会引发NotImplementedError
。
使用高级API配置查询引擎进行流式传输
在构建查询引擎时,设置streaming=True
:
query_engine = index.as_query_engine(streaming=True, similarity_top_k=1)
使用低级API配置查询引擎进行流式传输
在构建响应合成器时,传递streaming=True
:
from llama_index.core import get_response_synthesizer
synth = get_response_synthesizer(streaming=True, ...)
query_engine = RetrieverQueryEngine(response_synthesizer=synth, ...)
流式响应
在正确配置了LLM和查询引擎之后,调用query
现在会返回一个StreamingResponse
对象。
streaming_response = query_engine.query(
"What did the author do growing up?",
)
响应会在LLM调用开始时立即返回,而无需等待完整完成。
注意:在查询引擎进行多次LLM调用的情况下,只有最后一次LLM调用会被流式传输,响应会在最后一次LLM调用开始时返回。
获取生成器并迭代token
你可以从流式响应中获取一个生成器,并在token到达时进行迭代:
for text in streaming_response.response_gen:
# 在token到达时进行处理
pass
直接打印流式文本
如果你只想在token到达时打印文本:
streaming_response.print_response_stream()
端到端示例
查看端到端示例,了解如何在实际应用中使用流式响应功能。
通过流式响应功能,你可以在生成响应的同时实时获取和处理结果,大大提升用户体验和系统响应速度。LlamaIndex的这一特性使得实时数据处理和交互变得更加高效和便捷。