[랭체인] PythonREPL을 활용한 동적 코드 실행 챗봇 구현
안녕하세요, 여러분! 오늘은 LangChain 라이브러리와 PythonREPL을 사용하여 동적으로 Python 코드를 생성하고 실행하는 챗봇을 구현하는 방법에 대해 알아보겠습니다. 이 튜토리얼을 통해 여러분은 AI가 생성한 코드를 실시간으로 실행할 수 있는 강력한 대화형 애플리케이션을 만드는 방법을 익히게 될 것입니다.
준비 단계
먼저, 필요한 라이브러리들을 설치해야 합니다. Google Colab 환경을 사용한다면 다음과 같이 설치할 수 있습니다:
!pip install -Uq qrcode geocoder fpdf requests python-pptx
!pip install -Uq langchain_core langchain_openai langchain_experimental
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 키를 직접 설정해주세요.
필요한 모듈 임포트
이제 필요한 모듈들을 임포트합니다:
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
from langchain_experimental.utilities import PythonREPL
from langchain_core.runnables import RunnablePassthrough
프롬프트 템플릿 설정
챗봇의 동작을 정의하는 프롬프트 템플릿을 설정합니다:
template = """
사용자의 문제를 해결하기 위해 파이썬 코드를 작성합니다.
사용자에게 확인이나 추가 정보를 다시 묻지 마세요.
직접 실행할 수 있는 파이썬 코드만 반환하세요.
"""
prompt_template = ChatPromptTemplate.from_messages(
[("system", template),
("human", "{user_input}")]
)
체인 구성
LangChain의 강력한 기능 중 하나는 여러 컴포넌트를 연결하여 복잡한 작업을 수행할 수 있다는 점입니다. 여기서는 다음과 같은 체인을 구성합니다:
chain = {"user_input": RunnablePassthrough()} |
prompt_template |
ChatOpenAI() |
StrOutputParser() |
PythonREPL().run
이 체인은 다음과 같은 과정을 거칩니다:
- 사용자 입력을 받습니다.
- 프롬프트 템플릿에 입력을 적용합니다.
- ChatOpenAI 모델에 전달하여 응답을 생성합니다.
- 응답을 문자열로 파싱합니다.
- 파싱된 응답(Python 코드)을
PythonREPL().run
을 통해 실행합니다.
특히 마지막 단계인 PythonREPL().run
은 생성된 Python 코드를 실시간으로 실행하는 핵심 기능입니다. 이를 통해 사용자의 요청에 따라 동적으로 코드를 생성하고 즉시 실행할 수 있습니다.
대화 함수 구현
사용자와의 대화를 관리하는 함수를 구현합니다:
def chat_with_user(user_message):
max_attempts = 3
attempts = 0
while attempts < max_attempts:
try:
ai_message = chain.invoke(user_message)
if "error" in ai_message.lower() or "failed" in ai_message.lower():
raise Exception(f"Detected error in AI message: {ai_message}")
return ai_message
except Exception as e:
attempts += 1
print(f"Attempt {attempts}: Error - {e}")
if attempts == max_attempts:
return "Sorry, I am unable to process your request at the moment."
이 함수는 사용자의 메시지를 받아 AI의 응답을 생성하고, PythonREPL
을 통해 실행합니다. 오류가 발생하면 최대 3번까지 재시도합니다.
메인 루프
마지막으로, 사용자와의 대화를 계속하는 메인 루프를 구현합니다:
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}")
이 루프는 사용자로부터 입력을 받고, AI의 응답을 출력합니다. 사용자가 "quit"를 입력하면 프로그램이 종료됩니다.
결론
이렇게 해서 우리는 LangChain과 PythonREPL을 사용하여 동적으로 코드를 실행하는 챗봇을 구현해보았습니다. 이 챗봇은 사용자의 요청에 따라 Python 코드를 생성하고 즉시 실행할 수 있는 강력한 기능을 가지고 있습니다.
PythonREPL().run
을 사용함으로써, 우리는 단순히 텍스트 응답을 제공하는 것을 넘어서 실제로 작동하는 코드를 생성하고 실행할 수 있게 되었습니다. 이는 프로그래밍 도우미, 자동화 도구, 또는 교육용 애플리케이션 등 다양한 분야에서 활용될 수 있는 강력한 기능입니다.
물론 이는 매우 기본적인 구현이며, 실제 사용을 위해서는 보안 문제나 에러 처리 등 추가적인 고려사항들이 필요합니다. 특히 PythonREPL을 사용할 때는 보안에 각별히 주의해야 합니다.
LangChain은 이외에도 다양한 기능을 제공하므로, 이를 바탕으로 더욱 복잡하고 강력한 AI 애플리케이션을 개발할 수 있습니다. 여러분도 한번 도전해보세요!
행운을 빕니다!
- [랭체인] 간단한 텍스트 생성 체인 만들기
- [랭체인] 텍스트 감성 분류 체인 만들기
- [랭체인] 간단한 챗봇 만들기
- [랭체인] 수학 연산 체인 구현하기
- [랭체인] SQL 데이터베이스 쿼리 자동화
- [랭체인] PythonREPL을 활용한 동적 코드 실행 챗봇 구현
- [랭체인] PDF 문서 기반 QA챗봇 구현
- [랭체인] 대화형 챗봇 만들기
- [랭체인] 도구 체인 구축 가이드
- [랭체인] 라우팅 체인 - 유연한 AI 응답 시스템 구축하기
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. Keep up the good work! #upex