[랭체인] 대화형 챗봇 만들기steemCreated with Sketch.

in #kr-dev29 days ago (edited)

안녕하세요, 여러분! 오늘은 LangChain을 사용하여 간단하면서도 재미있는 대화형 챗봇을 만드는 방법을 알아보겠습니다.

이 챗봇은 마치 친한 친구처럼 대화하고 이모지도 사용할 거예요. 😊 자, 시작해볼까요?

1. 필요한 라이브러리 설치하기

먼저, 필요한 라이브러리를 설치해야 합니다. 아래 명령어를 실행하세요:

!pip install -Uq langchain_core langchain_openai langchain

이 명령어는 LangChain과 관련된 필수 라이브러리를 설치합니다.

2. OpenAI API 키 설정하기

OpenAI의 API를 사용하기 위해 API 키를 설정해야 합니다. Google Colab을 사용한다면 다음과 같이 설정할 수 있어요:

import os
from google.colab import userdata
os.environ["OPENAI_API_KEY"] = userdata.get('OPENAI_API_KEY')

참고: 이 부분은 Google Colab에서 작업할 때 필요한 단계입니다. 로컬 환경에서는 API 키를 직접 설정해주세요.

3. 필요한 모듈 임포트하기

이제 필요한 모듈들을 가져올 차례입니다:

from langchain_core.runnables import RunnablePassthrough, RunnableLambda
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
from langchain.memory import ConversationBufferWindowMemory
from operator import itemgetter

각 모듈은 챗봇의 다양한 기능을 구현하는 데 사용됩니다.

4. 챗봇 설정하기

이제 챗봇의 핵심 부분을 설정해 봅시다:

# ChatPromptTemplate을 사용하여 대화의 기본 템플릿을 설정합니다.
# 시스템 메시지와 사용자 입력을 포함합니다.
prompt_template = ChatPromptTemplate.from_messages([
    ("system", "Talk like a close friend and use emojis 😊"),  # 시스템 메시지: 친근한 친구처럼 말하고 이모지를 사용하세요.
    MessagesPlaceholder(variable_name="chat_history"),  # 대화 기록을 위한 자리 표시자
    ("human", "{user_input}")  # 사용자의 입력을 포함
])

# 대화 메모리를 설정합니다. 최근 3개의 메시지를 반환하도록 설정합니다.
memory = ConversationBufferWindowMemory(k=3, return_messages=True)

# 대화 체인을 설정합니다.
chain = (
    { "user_input": RunnablePassthrough() }  # 사용자의 입력을 그대로 전달
    | RunnablePassthrough.assign(
        chat_history=RunnableLambda(memory.load_memory_variables) | itemgetter("history")
    )  # 메모리에서 대화 기록을 불러와 chat_history 변수에 할당
    | prompt_template  # 설정한 프롬프트 템플릿을 사용
    | ChatOpenAI()  # OpenAI의 챗봇 모델을 사용
    | StrOutputParser()  # 문자열 출력 파서
)

여기서 우리는:

  1. 챗봇의 성격을 정의하는 프롬프트 템플릿을 만들었어요.
  2. 대화 기억을 관리하는 메모리 객체를 생성했습니다.
  3. 입력을 처리하고 응답을 생성하는 체인을 구성했어요.

5. 대화 기능 구현하기

마지막으로, 실제로 사용자와 대화할 수 있는 함수를 만들어 봅시다:

def chat_with_user(user_message):
    ai_message = chain.invoke(user_message)
    memory.save_context({"input": user_message}, {"output": ai_message})
    return ai_message

while True:
    user_message = input("USER > ")
    if user_message.lower() == "quit":
        break
    ai_message = chat_with_user(user_message)
    print(f" A I > {ai_message}")

이 코드는 사용자의 입력을 받아 챗봇의 응답을 생성하고, 대화 내용을 메모리에 저장합니다. 사용자가 "quit"을 입력하면 대화가 종료됩니다.

마무리

이렇게 해서 우리만의 귀여운 챗봇이 완성되었어요! 🎉 이 챗봇은 친구처럼 대화하고 이모지를 사용하여 더욱 친근하게 소통할 거예요.

여러분도 한번 시도해 보세요. 어떤 재미있는 대화가 펼쳐질지 궁금하지 않나요? 😃

happy coding! 👨‍💻👩‍💻

#LangChain

Posted using Obsidian Steemit plugin

Sort:  

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

Congratulations, your post has been upvoted by @upex with a 0.22% upvote. We invite you to continue producing quality content and join our Discord community here. Visit https://botsteem.com to utilize usefull and productive automations #bottosteem #upex

Coin Marketplace

STEEM 0.15
TRX 0.12
JST 0.025
BTC 55528.94
ETH 2373.33
USDT 1.00
SBD 2.36