llamaindex --- 流式响应(Streaming)

流式响应(Streaming)

概念解释

流式响应是指在生成响应的过程中,逐步地将生成的部分结果返回给用户。这种方式允许用户在完整响应生成之前就开始处理或打印响应的开头部分,从而大大减少查询的感知延迟。

设置流式响应

要启用流式响应,你需要使用支持流式处理的 LLM。目前,流式处理支持 OpenAI、HuggingFaceLLM 以及大多数通过 LangChainLLM 的 LangChain LLMs。

注意:如果你选择的 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 调用开始时返回。

你可以从流式响应中获取一个生成器,并在令牌到达时进行迭代:

for text in streaming_response.response_gen:
    # 在令牌到达时进行处理
    pass

或者,如果你只想在令牌到达时打印文本:

streaming_response.print_response_stream()
端到端示例

以下是一个完整的示例,展示了如何设置和使用流式响应:

# 安装 LlamaIndex
!pip install llama-index

import logging
import sys

logging.basicConfig(stream=sys.stdout, level=logging.INFO)
logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader

# 下载数据
!mkdir -p 'data/paul_graham/'
!wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/paul_graham/paul_graham_essay.txt' -O 'data/paul_graham/paul_graham_essay.txt'

# 加载文档并构建 VectorStoreIndex
documents = SimpleDirectoryReader("./data/paul_graham").load_data()
index = VectorStoreIndex.from_documents(documents)

# 设置查询引擎以使用流式响应
query_engine = index.as_query_engine(streaming=True, similarity_top_k=1)

# 查询索引
response_stream = query_engine.query(
    "What did the author do growing up?",
)

# 打印流式响应
response_stream.print_response_stream()

在这个示例中,我们首先安装了 LlamaIndex,然后下载并加载了文档,构建了 VectorStoreIndex。接着,我们配置了查询引擎以使用流式响应,并进行了查询。最后,我们使用 print_response_stream 方法打印了流式响应。

通过这种方式,用户可以在完整响应生成之前就开始处理或打印部分结果,从而提高查询的响应速度和用户体验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

需要重新演唱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值