如何基于vLLM为RAG应用实现LLM实时流式输出?
在vLLM 0.5.0.post1中实现LLM流式输出(用于RAG应用)
针对你的vLLM版本,只需启用流式生成参数并迭代返回的生成器,就能实现实时流式输出。以下是修改后的完整代码及关键说明:
修改后的代码
params = SamplingParams(temperature=TEMPERATURE, min_tokens=128, max_tokens=1024) llm = LLM(MODEL_NAME, tensor_parallel_size=4, dtype="half", gpu_memory_utilization=0.5, max_model_len=27_000) message = SYSTEM_PROMPT + "\n\n" + f"Question: {question}\n\nDocument: {document}" # 开启流式生成,获取可迭代的生成器对象 stream_response = llm.generate(message, params, stream=True) # 迭代生成器,实时获取并输出每一批次的内容 full_response = "" for output in stream_response: # 提取当前批次新增的文本(排除已输出的历史内容) new_content = output.outputs[0].text[len(full_response):] full_response = output.outputs[0].text # 实时打印(如果是Web应用,可替换为向前端推送内容的逻辑) print(new_content, end="", flush=True)
关键说明
stream=True:这是开启流式输出的核心参数,让generate方法返回生成器而非等待完整响应一次性返回。- 增量内容提取:通过对比已保存的完整响应长度,每次循环只提取本次新增的文本片段,避免重复输出。
flush=True:强制刷新输出缓冲区,确保内容实时显示在终端,不会因缓存延迟影响体验。
扩展适配(Web场景)
如果你的RAG应用是Web服务(如FastAPI/Flask),可将逻辑适配为服务器推送事件(SSE):
- FastAPI中使用
StreamingResponse包装生成器,构建流式接口; - 前端通过
EventSource监听接口,实时接收并渲染新增内容。
内容的提问来源于stack exchange,提问作者Cihan Yalçın
相关产品推荐
相关产品推荐

