Skip to main content

[ ![🦜️🔗 Langchain](/img/brand/wordmark.png) ![🦜️🔗
Langchain](/img/brand/wordmark-dark.png) ](/) [ Docs
](/docs/get_started/introduction) [ Use cases ](/docs/use_cases) [
Integrations ](/docs/integrations/platforms/) [ Guides
](/docs/guides/debugging) [ API  ](https://api.python.langchain.com)

More

  * [ People ](/docs/people/)
  * [ Versioning ](/docs/packages)
  * [ Changelog ](/docs/changelog)
  * [ Contributing ](/docs/contributing)
  * [ Templates ](/docs/templates/)
  * [ Cookbooks  ](https://github.com/langchain-ai/langchain/blob/master/cookbook/README.md)
  * [ Tutorials ](/docs/additional_resources/tutorials)
  * [ YouTube ](/docs/additional_resources/youtube)

🦜️🔗

  * [ LangSmith  ](https://smith.langchain.com)
  * [ LangSmith Docs  ](https://docs.smith.langchain.com/)
  * [ LangServe GitHub  ](https://github.com/langchain-ai/langserve)
  * [ Templates GitHub  ](https://github.com/langchain-ai/langchain/tree/master/templates)
  * [ Templates Hub  ](https://templates.langchain.com)
  * [ LangChain Hub  ](https://smith.langchain.com/hub)
  * [ JS/TS Docs  ](https://js.langchain.com)

[ 💬  ](https://chat.langchain.com) [ ](https://github.com/langchain-
ai/langchain)

Search

  * [ Get started ](/docs/get_started)

    * [ Introduction ](/docs/get_started/introduction)
    * [ Installation ](/docs/get_started/installation)
    * [ Quickstart ](/docs/get_started/quickstart)
    * [ Security ](/docs/security)
  * [ LangChain Expression Language ](/docs/expression_language/)

    * [ Get started ](/docs/expression_language/get_started)
    * [ Why use LCEL ](/docs/expression_language/why)
    * [ Interface ](/docs/expression_language/interface)
    * [ Streaming ](/docs/expression_language/streaming)
    * [ How to ](/docs/expression_language/how_to/)

    * [ Cookbook ](/docs/expression_language/cookbook/)

    * [ LangChain Expression Language (LCEL) ](/docs/expression_language/)
  * [ Modules ](/docs/modules/)

    * [ Model I/O ](/docs/modules/model_io/)

    * [ Retrieval ](/docs/modules/data_connection/)

    * [ Agents ](/docs/modules/agents/)

    * [ Chains ](/docs/modules/chains)
    * [ More ](/docs/modules/memory/)

  * [ LangServe ](/docs/langserve)
  * [ LangSmith ](/docs/langsmith/)

  * [ LangGraph ](/docs/langgraph)

  * [ ](/)
  * [ LangChain Expression Language  ](/docs/expression_language/)
  * Streaming 

On this page

#  Streaming With LangChain

Streaming is critical in making applications based on LLMs feel responsive to
end-users.

Important LangChain primitives like LLMs, parsers, prompts, retrievers, and
agents implement the LangChain [ Runnable Interface
](/docs/expression_language/interface) .

This interface provides two general approaches to stream content:

  1. sync ` stream ` and async ` astream ` : a **default implementation** of streaming that streams the **final output** from the chain. 
  2. async ` astream_events ` and async ` astream_log ` : these provide a way to stream both **intermediate steps** and **final output** from the chain. 

Let’s take a look at both approaches, and try to understand how to use them. 🥷

##  Using Stream  ​

All ` Runnable ` objects implement a sync method called ` stream ` and an
async variant called ` astream ` .

These methods are designed to stream the final output in chunks, yielding each
chunk as soon as it is available.

Streaming is only possible if all steps in the program know how to process an
**input stream** ; i.e., process an input chunk one at a time, and yield a
corresponding output chunk.

The complexity of this processing can vary, from straightforward tasks like
emitting tokens produced by an LLM, to more challenging ones like streaming
parts of JSON results before the entire JSON is complete.

The best place to start exploring streaming is with the single most important
components in LLMs apps– the LLMs themselves!

###  LLMs and Chat Models  ​

Large language models and their chat variants are the primary bottlen