컴퓨터 과학/AI

Langchain streaming - 실시간으로 답변받기

DevHam94 2025. 1. 2. 16:50

채팅을 이용해서 답변을 답으면 줄이 주르르 생기면서 stream으로 답변을 해주는데

api의 경우 답변을 받고 가져오기까지 시간이 걸려 이용자가 지루해 할 수 있다.

 

이때 langchain의 streaming을 사용한다. 

https://python.langchain.com/docs/concepts/streaming/

 

Streaming | 🦜️🔗 LangChain

* Runnable Interface

python.langchain.com

from langchain.chat_models import ChatOpenAI
from langchain.schema import (
	HumanMessage,
)

from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
chat = ChatOpenAI(streaming=True, callbacks=StreamingStdOutCallbackHandler())
resp = chat([HumanMessage(content="Write me a song about sparkling water.")])

 

여기서 streaming을 True로 실행시켜주고 callback함수를 실행해야 하는데 콜백함수는 데이터가 요청이 될때마다 실행되는 함수이다. 

 

클래스를 생성하여 stream을 받아줄 handler를 생성해준다.

from langchain.callbacks.base import BaseCallbackHandler
class StreamHandler(BaseCallbackHandler):
    def __init__(self, container, initial_text=""):
        self.container = container
        self.text=initial_text
    def on_llm_new_token(self, token: str, **kwargs) -> None:
        self.text+=token
        self.container.markdown(self.text)

 

여기서는 토큰을 생성하여 text와 container에 넣어준다.