跳到内容

流式传输#

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 对象,并迭代处理到达的 token。

for text in streaming_response.response_gen:
    # do something with text as they arrive.
    pass

或者,如果您只想在文本到达时将其打印出来。

streaming_response.print_response_stream()

查看一个端到端示例