[랭체인] 대화형 챗봇 만들기
안녕하세요, 여러분! 오늘은 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() # 문자열 출력 파서
)
여기서 우리는:
- 챗봇의 성격을 정의하는 프롬프트 템플릿을 만들었어요.
- 대화 기억을 관리하는 메모리 객체를 생성했습니다.
- 입력을 처리하고 응답을 생성하는 체인을 구성했어요.
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! 👨💻👩💻
- [랭체인] 간단한 텍스트 생성 체인 만들기
- [랭체인] 텍스트 감성 분류 체인 만들기
- [랭체인] 간단한 챗봇 만들기
- [랭체인] 수학 연산 체인 구현하기
- [랭체인] SQL 데이터베이스 쿼리 자동화
- [랭체인] PythonREPL을 활용한 동적 코드 실행 챗봇 구현
- [랭체인] PDF 문서 기반 QA챗봇 구현
- [랭체인] 대화형 챗봇 만들기
- [랭체인] 도구 체인 구축 가이드
- [랭체인] 라우팅 체인 - 유연한 AI 응답 시스템 구축하기
[광고] 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