LazyLLM流式输出

LazyLLM流式输出

什么是大模型流式输出?

大模型流式输出(Streaming Output)是指大型语言模型(LLM)在生成文本时采用的一种逐段或逐词返回结果的技术方式,与传统的一次性完整输出形成对比。

主要特点

  1. 实时性:模型生成一部分内容就立即返回给用户,无需等待整个响应完成
  2. 低延迟:用户可以看到初步结果,减少等待时间
  3. 渐进式呈现:内容像水流一样逐步展示,体验更自然

技术实现方式

  1. Token级流式:每生成一个token(词元)就立即输出
  2. Chunk级流式:积累一定量的token(如一句话)后输出
  3. 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字的作文,以知识库为题')
posted @ 2025-07-13 22:04  张三删库跑路  阅读(74)  评论(0)    收藏  举报