跳到内容

流式传输

流式传输对于让大型语言模型(LLM)应用对终端用户感觉更具响应性至关重要。
创建流式运行任务时,流式传输模式决定了哪些类型的数据会流式传输回 API 客户端。

支持的流式传输模式

LangGraph 平台支持以下流式传输模式

模式 描述 LangGraph 库方法
在每个超级步骤之后,流式传输完整的图状态。 指南 .stream() / .astream() with stream_mode="values"
更新 仅流式传输每个节点之后图状态的更新。 指南 .stream() / .astream() with stream_mode="updates"
消息元组 流式传输图内生成的任何消息的 LLM 令牌(对于聊天应用很有用)。 指南 .stream() / .astream() with stream_mode="messages"
调试 在图执行过程中流式传输调试信息。 指南 .stream() / .astream() with stream_mode="debug"
自定义 流式传输自定义数据。 指南 .stream() / .astream() with stream_mode="custom"
事件 流式传输所有事件(包括图的状态);主要在迁移大型 LCEL 应用时有用。 指南 .astream_events()

✅ 您还可以同时组合多种模式。有关配置详情,请参阅操作指南

无状态运行

如果您不想将流式运行的输出持久化检查点数据库中,则可以创建无状态运行而无需创建线程

from langgraph_sdk import get_client
client = get_client(url=<DEPLOYMENT_URL>, api_key=<API_KEY>)

async for chunk in client.runs.stream(
    None,  # (1)!
    assistant_id,
    input=inputs,
    stream_mode="updates"
):
    print(chunk.data)
  1. 我们传入 None 而不是 thread_id UUID。
import { Client } from "@langchain/langgraph-sdk";
const client = new Client({ apiUrl: <DEPLOYMENT_URL>, apiKey: <API_KEY> });

// create a streaming run
const streamResponse = client.runs.stream(
  null,  // (1)!
  assistantID,
  {
    input,
    streamMode: "updates"
  }
);
for await (const chunk of streamResponse) {
  console.log(chunk.data);
}
  1. 我们传入 None 而不是 thread_id UUID。
curl --request POST \
--url <DEPLOYMENT_URL>/runs/stream \
--header 'Content-Type: application/json' \
--header 'x-api-key: <API_KEY>'
--data "{
  \"assistant_id\": \"agent\",
  \"input\": <inputs>,
  \"stream_mode\": \"updates\"
}"

加入并流式传输

LangGraph 平台允许您加入一个活跃的后台运行并从中流式传输输出。为此,您可以使用 LangGraph SDKclient.runs.join_stream 方法

from langgraph_sdk import get_client
client = get_client(url=<DEPLOYMENT_URL>, api_key=<API_KEY>)

async for chunk in client.runs.join_stream(
    thread_id,
    run_id,  # (1)!
):
    print(chunk)
  1. 这是您要加入的现有运行的 run_id
import { Client } from "@langchain/langgraph-sdk";
const client = new Client({ apiUrl: <DEPLOYMENT_URL>, apiKey: <API_KEY> });

const streamResponse = client.runs.joinStream(
  threadID,
  runId  // (1)!
);
for await (const chunk of streamResponse) {
  console.log(chunk);
}
  1. 这是您要加入的现有运行的 run_id
curl --request GET \
--url <DEPLOYMENT_URL>/threads/<THREAD_ID>/runs/<RUN_ID>/stream \
--header 'Content-Type: application/json' \
--header 'x-api-key: <API_KEY>'

输出未缓冲

当您使用 .join_stream 时,输出不会被缓冲,因此在加入之前产生的任何输出都将不会被接收。

API 参考

有关 API 用法和实现,请参阅API 参考