如何從 LLM 串流回應
所有 LLM
皆實作 Runnable 介面,該介面隨附標準可執行方法(即 ainvoke
、batch
、abatch
、stream
、astream
、astream_events
)的預設實作。
預設串流實作提供一個 Iterator
(或用於非同步串流的 AsyncIterator
),它產生單一值:來自底層聊天模型提供者的最終輸出。
逐個 Token 串流輸出的能力取決於提供者是否已實作適當的串流支援。
注意
預設實作不支援逐個 Token 串流,但它確保模型可以替換為任何其他模型,因為它支援相同的標準介面。
同步串流
在下方,我們使用 |
來協助視覺化 Token 之間的分隔符號。
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||
非同步事件串流
LLM 也支援標準的 astream events 方法。
提示
當在包含多個步驟的較大型 LLM 應用程式(例如,包含 agent
的應用程式)中實作串流時,astream_events
最有用。
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