LazyLLM流式输出
LazyLLM流式输出
什么是大模型流式输出?
大模型流式输出(Streaming Output)是指大型语言模型(LLM)在生成文本时采用的一种逐段或逐词返回结果的技术方式,与传统的一次性完整输出形成对比。
主要特点
- 实时性:模型生成一部分内容就立即返回给用户,无需等待整个响应完成
- 低延迟:用户可以看到初步结果,减少等待时间
- 渐进式呈现:内容像水流一样逐步展示,体验更自然
技术实现方式
- Token级流式:每生成一个token(词元)就立即输出
- Chunk级流式:积累一定量的token(如一句话)后输出
- SSE(Server-Sent Events):常用的流式传输协议
优势
- 改善用户体验,避免长时间等待
- 对于长文本生成,可以提前看到部分内容
- 节省服务器资源,避免生成完整响应前占用内存
- 支持中途停止(当用户已获得所需信息时)
应用场景
- 聊天对话系统
- 长文本生成(如文章、报告)
- 代码生成与补全
- 实时翻译系统
简单来说,流式输出的主要作用就是降低首字延迟 提高用户体验
应用前小菜使用LazyLLM推理本地大模型
文档链接:lazyllm.module.TrainableModule
import lazyllm
import lazyllm
online_llm = lazyllm.OnlineChatModule(source='sensenova')
print(online_llm('你是谁'))
# 调用本地大模型的名称
llm = lazyllm.TrainableModule('internlm2-chat-7b')
llm.start()
print(llm('你是谁’))
使用LazyLLM实现流式输出
import lazyllm
from functools import partial
def stream_call(m, query):
# 线程池设置:直接使用 ThreadPoolExecutor 传入线程数量 1
with lazyllm.ThreadPoolExecutor(1) as executor:
# 任务队列初始化
lazyllm.FileSystemQueue().dequeue()
# 提交任务:定义一个 future 把任务提交到这个线程池之后拿到一个句柄,再通过这个句柄来看任务是否完成
# 使用partial固定模型的llm_chat_history参数为空列表
# 将模型调用任务提交到线程池,返回Future对象用于跟踪任务状态
future = executor.submit(partial(m, llm_chat_history=[]), query)
# 流式输出循环
while True:
if value := lazyllm.FileSystemQueue().dequeue():
print(f'output: {" ".join(value)}')
elif future.done():
break
print(f'result: {future.result()}')
# 使用在线大模型
m = lazyllm.OnlineChatModule(
source="glm",
model="glm-4-plus",
api_key="YOUR_API_KEY",
stream=True
)
# 使用本地大模型
# m = lazyllm.TrainableModule('internlm-chat-7b', stream=True).start()
stream_call(m, '你好,请帮我写一篇300字的作文,以知识库为题')