[랭체인] PythonREPL을 활용한 동적 코드 실행 챗봇 구현steemCreated with Sketch.

in #krlast month (edited)

안녕하세요, 여러분! 오늘은 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

이 체인은 다음과 같은 과정을 거칩니다:

  1. 사용자 입력을 받습니다.
  2. 프롬프트 템플릿에 입력을 적용합니다.
  3. ChatOpenAI 모델에 전달하여 응답을 생성합니다.
  4. 응답을 문자열로 파싱합니다.
  5. 파싱된 응답(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 애플리케이션을 개발할 수 있습니다. 여러분도 한번 도전해보세요!

행운을 빕니다!

#LangChain

Posted using Obsidian Steemit plugin

Sort:  

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

Coin Marketplace

STEEM 0.15
TRX 0.12
JST 0.025
BTC 56166.62
ETH 2397.45
USDT 1.00
SBD 2.37