본문 바로가기
AI/Contents

Stream을 아시나요?

by AI미남홀란드 2024. 2. 15.
728x90

ChatGPT 를 사용하다보면 기존의 챗봇에서 타자를 마치 사람이 치는것처럼 '타타타타타닥' 하면서 글자들이 출력되곤 하는데요. 챗봇을 구축할때 나도 저걸 할 수 없을까 생각을 한적이 있습니다. 막상 아 그냥 프론트엔드 영역이겠지~ 하고 넘어갔는데요. 손쉽게 구현이 가능 했습니다.

 

Streaming | 🦜️🔗 Langchain

All ChatModels implement the Runnable interface, which comes with

python.langchain.com

 

LCEL object 에서 stream 이 사용이 가능한데요. 모델이 토큰을 다 생성되고 출력을 해주는게 아니고 생성되는 토큰마다 바로 출력물을 제공하도록 Chunk 단위로 쪼개서 출력을 시켜주는 방식입니다.

 

여기에 time.sleep(0.5) 이렇게 넣는다면 이제 아 이건 GPT-4 처럼 느리게 출력물을 받을 수 있는데요 지금 드는 생각이 추론 gpt-turbo 는 time sleep 을 걸지 않은게 아닌가? 이렇게 생각이 드네요.

 

 

While 문을 통해서 구현 예시를 살펴보겠습니다.

 

quit_msg = {'exit', ''}
while True:
    user_input = input("Client: ")
    if user_input in quit_msg:
        break
    print(f"WiznetAI: ", end='')
    response = ""
    for chunk in conv_chain.stream({"input": user_input}):
        print(chunk.content, end="", flush=True)
        response += chunk.content
    memory.save_context({"input": user_input}, {"output": response})

 

Exit 와 공백을 누르면 나가지고

While 문으로 챗봇을 시작을 합니다

 

인풋을 받고 인풋에 만약 quit_msg 가 있다면 break 로 루프는 탈출합니다.

청크단위로 쪼개면서 실행을 해줍니다. 그러면 이제  타타탁 하면서 답변이 나옵니다 

그리고 메모리에 저장하는 코드입니다.

 

순간 써보면서 '앗 이거다 싶어서 글로 남깁니다.

 

 

 

728x90