Bird
Raised Fist0
LangChainframework~30 mins

Streaming responses in LangChain - Mini Project: Build & Apply

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Streaming Responses with LangChain
📖 Scenario: You are building a chatbot that replies to user questions in real-time. Instead of waiting for the full answer, the chatbot streams the response piece by piece, just like a friend typing back to you live.
🎯 Goal: Create a LangChain setup that streams responses from a language model. You will first set up the data, then configure streaming, implement the streaming logic, and finally complete the streaming output.
📋 What You'll Learn
Create a LangChain ChatOpenAI language model instance with streaming enabled
Set up a simple prompt template for the chatbot
Use a CallbackHandler to capture streamed tokens
Print each token as it streams to simulate live typing
💡 Why This Matters
🌍 Real World
Streaming responses are used in chatbots and assistants to provide faster, more interactive user experiences by showing answers as they are generated.
💼 Career
Understanding streaming in language models is important for building responsive AI applications in customer support, education, and interactive tools.
Progress0 / 4 steps
1
Set up the LangChain ChatOpenAI model with streaming enabled
Create a variable called llm that is an instance of ChatOpenAI with streaming=True and temperature=0.
LangChain
Hint

Use ChatOpenAI(streaming=True, temperature=0) to create the model instance.

2
Create a prompt template for the chatbot
Create a variable called prompt that is a PromptTemplate with the input variable question and template string 'Answer this: {question}'.
LangChain
Hint

Use PromptTemplate(input_variables=["question"], template="Answer this: {question}").

3
Implement the streaming callback handler
Create a class called StreamingHandler that inherits from BaseCallbackHandler. Implement the method on_llm_new_token(self, token: str, **kwargs) that prints each token without a newline.
LangChain
Hint

Override on_llm_new_token to print tokens as they arrive.

4
Run the streaming LLM with the callback handler
Create an instance of StreamingHandler called handler. Then call llm with prompt.format(question='What is AI?') and callbacks=[handler] to stream the answer.
LangChain
Hint

Create handler = StreamingHandler() and call llm(prompt.format(question='What is AI?'), callbacks=[handler]).

Practice

(1/5)
1. What does enabling streaming=True do in a LangChain LLM?
easy
A. It disables the AI's output completely.
B. It shows the AI's output bit by bit as it is generated.
C. It caches the AI's output for later use.
D. It speeds up the AI's training process.

Solution

  1. Step 1: Understand streaming in LangChain

    Streaming means showing output gradually as it is created, not waiting for full completion.
  2. Step 2: Effect of setting streaming=True

    Setting streaming=True enables this gradual output display during AI response generation.
  3. Final Answer:

    It shows the AI's output bit by bit as it is generated. -> Option B
  4. Quick Check:

    Streaming = gradual output display [OK]
Hint: Streaming means output appears bit by bit, not all at once [OK]
Common Mistakes:
  • Thinking streaming caches output
  • Confusing streaming with disabling output
  • Assuming streaming speeds training
2. Which of the following is the correct way to enable streaming when creating a LangChain LLM instance?
easy
A. llm = OpenAI(streaming=True)
B. llm = OpenAI(enable_stream=True)
C. llm = OpenAI(stream=True)
D. llm = OpenAI(use_streaming=True)

Solution

  1. Step 1: Recall LangChain LLM streaming parameter

    The correct parameter to enable streaming is exactly streaming=True.
  2. Step 2: Match correct syntax

    llm = OpenAI(streaming=True) uses streaming=True, which matches the official LangChain pattern.
  3. Final Answer:

    llm = OpenAI(streaming=True) -> Option A
  4. Quick Check:

    Streaming param is streaming=True [OK]
Hint: Look for exact parameter name 'streaming=True' [OK]
Common Mistakes:
  • Using incorrect parameter names like stream or enable_stream
  • Adding underscores incorrectly
  • Confusing streaming with other flags
3. Given this code snippet, what will be the output behavior?
llm = OpenAI(streaming=True)
response = llm("Hello, how are you?")
print(response)
medium
A. The code will raise an error because streaming responses cannot be printed.
B. The response prints bit by bit as the AI generates it, then prints the full response.
C. The full response prints only after the AI finishes generating it.
D. The response prints bit by bit, but print(response) shows only the final text.

Solution

  1. Step 1: Understand streaming=True behavior in plain invoke

    Setting streaming=True enables streaming capability, but llm(prompt) generates the full response synchronously without printing intermediate chunks.
  2. Step 2: What print(response) shows

    The response holds the complete text after generation finishes, so print(response) displays only the full output.
  3. Final Answer:

    The full response prints only after the AI finishes generating it. -> Option C
  4. Quick Check:

    llm(prompt) + streaming=True = synchronous full print [OK]
Hint: Plain llm(prompt) does not auto-print chunks; use llm.stream() for bit-by-bit [OK]
Common Mistakes:
  • Thinking streaming=True auto-prints chunks during llm(prompt)
  • Confusing llm(prompt) with llm.stream(prompt)
  • Expecting print(response) to show partial outputs
4. You wrote this code but get no streaming output:
llm = OpenAI()
llm("Tell me a joke.")
What is the likely fix?
medium
A. Use print() inside the llm call.
B. Call llm.stream() instead of llm().
C. Set streaming=False explicitly.
D. Add streaming=True when creating the LLM instance.

Solution

  1. Step 1: Identify missing streaming parameter

    The code creates the LLM without streaming enabled, so output is not streamed.
  2. Step 2: Enable streaming properly

    Adding streaming=True when creating the LLM enables streaming output.
  3. Final Answer:

    Add streaming=True when creating the LLM instance. -> Option D
  4. Quick Check:

    Streaming requires streaming=True param [OK]
Hint: Streaming only works if streaming=True is set at creation [OK]
Common Mistakes:
  • Trying to call a non-existent stream() method
  • Setting streaming=False disables streaming
  • Expecting print() inside llm call to stream output
5. You want to build a chat app that shows AI replies as they are generated. Which approach correctly uses LangChain streaming to achieve this?
hard
A. Create the LLM with streaming=True and handle partial tokens in a callback function.
B. Create the LLM without streaming and print the full response after completion.
C. Use streaming=False and poll the LLM repeatedly for updates.
D. Create the LLM with streaming=True but ignore partial outputs until complete.

Solution

  1. Step 1: Understand streaming for chat apps

    Streaming=True allows receiving partial tokens as they generate, enabling live display.
  2. Step 2: Use callbacks to handle partial tokens

    Handling partial tokens via callbacks lets the app update UI live with new text chunks.
  3. Step 3: Why other options fail

    Not using streaming or ignoring partial outputs prevents live updates; polling is inefficient.
  4. Final Answer:

    Create the LLM with streaming=True and handle partial tokens in a callback function. -> Option A
  5. Quick Check:

    Streaming + callbacks = live chat updates [OK]
Hint: Use streaming=True plus callbacks for live partial output [OK]
Common Mistakes:
  • Ignoring partial outputs disables streaming benefits
  • Polling instead of streaming wastes resources
  • Waiting for full response loses live update effect