Skip to content
目录

流式处理与异步机制

LangChain JS 默认异步:I/O 型 LLM 调用、Retriever、Tool 均为 Promise;流式用 AsyncGenerator / AsyncIterable 逐级传递 chunk。


1. 设计原则

原则原因
全非阻塞单线程 Node 不被长推理堵死
流式一等Token 级 UX
可取消AbortSignal 贯穿 config

2. 流式层次

层级消费者得到
Model streamAIMessageChunk
Chain stream最后一环 chunk 或聚合 chunk
streamEventson_chat_model_stream 等事件

3. 链上流式

RunnableSequence 对 stream:逐环传递或合并;中间环若不支持 stream 可能缓冲后一次性输出(视实现)。


4. 背压与并发

  • batch + maxConcurrency 控制并行请求数。
  • 消费慢时 AsyncIterable 由运行时缓冲;极高吞吐场景注意内存。

5. 错误与取消

  • 流中途抛错:迭代器 throw,调用方 try/finally 清理。
  • config.signal.aborted:中止 HTTP 与后续 tool。

6. 实践

  • UI 用 for await (const chunk of stream) 追加文本。
  • 调试全链路用 LangSmith + streamEvents
  • 工具与模型不要共用无界并行,避免 rate limit。

7. 总结

invoke = 要结果,stream = 要体验,streamEvents = 要观测;三者共用同一 Runnable 图。

MIT License.