如何流式传输来自大型语言模型的响应
所有 LLM 都实现了 Runnable 接口,该接口提供了标准可运行方法的 默认 实现(即 ainvoke、batch、abatch、stream、astream、astream_events)。
Iterator(或异步流式传输为 AsyncIterator)的默认流式实现提供一个值:来自底层聊天模型提供商的最终输出。
输出逐个标记流式传输的能力取决于提供商是否实现了适当的流式传输支持。
查看哪些 集成支持逐令牌流式传输。
笔记
默认实现不提供逐令牌流式传输支持,但它确保模型可以被替换为任何其他模型,因为它支持相同的标准化接口。
同步流
下面,我们使用 | 来帮助可视化标记之间的分隔符。
from langchain_openai import OpenAI
llm = OpenAI(model="gpt-3.5-turbo-instruct", temperature=0, max_tokens=512)
for chunk in llm.stream("Write me a 1 verse song about sparkling water."):
print(chunk, end="|", flush=True)
API 参考:OpenAI
|Spark|ling| water|,| oh| so clear|
|Bubbles dancing|,| without| fear|
|Refreshing| taste|,| a| pure| delight|
|Spark|ling| water|,| my| thirst|'s| delight||
异步流式传输
让我们看看如何在异步设置中使用 astream 进行流式传输。
from langchain_openai import OpenAI
llm = OpenAI(model="gpt-3.5-turbo-instruct", temperature=0, max_tokens=512)
async for chunk in llm.astream("Write me a 1 verse song about sparkling water."):
print(chunk, end="|", flush=True)
API 参考:OpenAI
|Spark|ling| water|,| oh| so clear|
|Bubbles dancing|,| without| fear|
|Refreshing| taste|,| a| pure| delight|
|Spark|ling| water|,| my| thirst|'s| delight||
异步事件流
大型语言模型还支持标准的 流式事件 方法。
提示
astream_events 在实现包含多个步骤的大型语言模型应用程序中的流式处理时最有用(例如,涉及 agent 的应用程序)。
from langchain_openai import OpenAI
llm = OpenAI(model="gpt-3.5-turbo-instruct", temperature=0, max_tokens=512)
idx = 0
async for event in llm.astream_events(
"Write me a 1 verse song about goldfish on the moon", version="v1"
):
idx += 1
if idx >= 5: # Truncate the output
print("...Truncated")
break
print(event)
API 参考:OpenAI