createLLMStreamNode

workflow.createLLMStreamNode() 创建流式 LLM 调用节点。节点执行时调用 provider.stream(llmInput),对外产出 LLMStreamChunkrunStreamNode 会收集 chunks 并返回聚合文本。

签名

workflow.createLLMStreamNode<Input>(
  options: Pick<
    LLMNodeOptions<Input>,
    "name" | "provider" | "mapInput" | "historyLimit" | "metadata"
  >,
): BaseStreamNode<Input, LLMStreamChunk, string>

参数

参数类型说明
optionsLLMStreamNodeOptions<Input>定义 provider、输入映射和节点元信息。

Options 字段

字段类型说明
namestring节点名称,默认 "llm-stream"
providerLLMProviderSourceprovider 实例、provider id、provider ref 或 resolver。必填。
mapInput(input, context) => LLMChatInput把业务输入转换成 LLM 请求。必填。
historyLimitnumber节点执行历史保留条数,默认 50
metadataWorkflowNodeMetadataInput节点展示元信息。

LLMStreamChunk

类型字段说明
text-deltatext: string一段增量文本。
finishfinishReason?: FinishReason流结束原因。
finishusage?: LanguageModelUsagetoken 用量。
finishproviderMetadata?: ProviderMetadataprovider 元信息。

返回值

返回类型说明
节点对象BaseStreamNode<Input, LLMStreamChunk, string>可通过 workflow.runStreamNode 执行。
chunksLLMStreamChunk[]runStreamNode 收集到的所有 chunk。
outputstring节点 finalize 会拼接所有 text-delta.text
当 executor 配置 tokenUsage: { enabled: true } 时,节点内部通过 getLLMProvider() 解析出的 provider 会从 stream finish chunk 的 usage 自动上报 token 用量。同一次 stream 只上报一次;如果 provider 没有返回 usage,则不会写入 token 用量。自动上报会保留 input、output、reasoning、cached input 和 cache creation/write token 明细。

调用流程

阶段输入结果
上游节点Input业务输入
mapInputInputNodeContextLLMChatInput
provider streamLLMChatInputAsyncIterable<LLMStreamChunk>
runStreamNodechunks{ chunks, output: string }

示例

const streamNode = workflow.createLLMStreamNode<ParsedInput>({
  name: "draft-stream",
  provider: workflow.createLLMProviderRef("default"),
  mapInput(input) {
    return {
      prompt: input.message,
      temperature: 0.3,
    };
  },
});

const { chunks, output } = await workflow.runStreamNode(streamNode, parsed, context);

createLLMNode 的区别

方法输出方式适合场景
createLLMNode一次性返回 LLMChatOutputmapOutput 结果后台处理、非实时输出。
createLLMStreamNode逐 chunk 输出,最终聚合为字符串需要在 App/server/embed 中展示流式文本。