跳转到内容

流式处理

LlamaIndex 支持在生成过程中流式传输响应。 这使您能够在完整响应完成之前开始打印或处理响应的开头部分。 这可以显著降低查询的感知延迟。

要启用流式传输,您需要使用支持流式传输的LLM。 目前,OpenAIHuggingFaceLLM 以及大多数 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:
# do something with text as they arrive.
pass

或者,如果您只想在文本到达时打印它们:

streaming_response.print_response_stream()

查看一个端到端示例