流式传输#
LlamaIndex 支持在生成过程中流式传输响应结果。这使得您可以在完整响应完成前就开始处理或显示部分响应内容,从而显著降低查询的感知延迟。
配置方法#
要启用流式传输,您需要使用支持该功能的LLM。目前支持流式传输的LLM包括:OpenAI、HuggingFaceLLM 以及大多数LangChain LLM(通过 LangChainLLM 实现)。
注意:如果您选择的LLM不支持流式传输,将会抛出
NotImplementedError异常。
通过高级API配置查询引擎时,在构建查询引擎时设置 streaming=True 即可启用流式传输:
query_engine = index.as_query_engine(streaming=True, similarity_top_k=1)
如果使用低级API组合查询引擎,则在构造 Response Synthesizer 时传入 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调用开始时返回。
您可以从流式响应中获取 Generator 并实时迭代接收到的文本片段:
for text in streaming_response.response_gen:
# 对实时到达的文本片段进行处理
pass
如果只需要实时打印文本片段,可以直接调用:
streaming_response.print_response_stream()
查看完整端到端示例