본문 바로가기
파이썬

렝체인 실습#2 - 다양한 출력방법_1

by 일등미노왕국 2024. 11. 11.

LangChain과 GPT-3.5로 간단한 문자열 출력 구현

Python의 LangChain 라이브러리를 사용하여 OpenAI GPT-3.5 모델을 호출하고, 문자열 출력을 해보자

📜 코드 예제

from dotenv import load_dotenv
load_dotenv()

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

model = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)

# output_parser = StrOutputParser()

def call_string_output_parser():
    prompt = ChatPromptTemplate.from_messages([
        ("system", "You are a helpful assistant that can answer questions."),
        ("user", "{input}")
    ])

    parser = StrOutputParser()

    chain = prompt | model | parser

    return chain.invoke({"input": "강아지"})
    # print(response)
print(call_string_output_parser())

🔍 코드 분석

코드를 뜯어보면,

1. 환경 변수 로드

from dotenv import load_dotenv
load_dotenv()

설명: dotenv 라이브러리를 사용하여 .env 파일의 환경 변수를 로드한다. API 키와 같은 중요한 정보를 코드에 직접 작성하지 않고, 외부 파일에서 안전하게 관리할 수 있다...개꿀이쥬~~~

2. LangChain 모듈 임포트

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

설명: LangChain의 핵심 모듈을 임포트한다. ChatOpenAI는 OpenAI 모델을 호출하고, ChatPromptTemplate은 메시지 템플릿을 설정하며, StrOutputParser는 모델의 출력값을 문자열로 변환한다. 외우려고 해도 잘안된다...

나이는....ㅠ.,ㅜ

LangChain 및 dotenv 모듈 상세 설명과 활용 예제

다시 라이브러리를 딥하게 설명해보겠다..지금은 낯설지만 익숙할때까지 죠져야지 뭐 있어~~

💡 상세 설명: from dotenv 및 LangChain 관련 모듈

아래는 각 코드 라인에 대한 세부적인 설명과 왜 사용되는지를 중심으로 분석한 내용이다.

2-1. 환경 변수 설정: from dotenv import load_dotenv

from dotenv import load_dotenv
load_dotenv()

설명: dotenv 라이브러리는 .env 파일에 저장된 환경 변수를 Python 프로그램으로 불러오기 위해 사용된다.

load_dotenv() 함수는 .env 파일을 읽어 환경 변수로 등록한다.

사용 이유:

  • API 키와 민감한 정보 보호: 코드를 외부에 공유하거나 배포할 때 민감한 정보가 노출되는 것을 방지한다.
  • 배포 환경 간의 유연성: 개발, 테스트, 프로덕션 환경에 따라 서로 다른 설정을 쉽게 적용할 수 있다.
응용 예시:
# .env 파일의 내용
OPENAI_API_KEY=your_openai_api_key_here

# Python 코드
import os
api_key = os.getenv("OPENAI_API_KEY")
print(api_key)  # 환경 변수에서 API 키를 가져와 출력

2-2. OpenAI 모델 사용: from langchain_openai import ChatOpenAI

from langchain_openai import ChatOpenAI

설명: ChatOpenAI는 LangChain에서 OpenAI의 GPT 모델을 쉽게 호출할 수 있도록 제공하는 클래스이다.

사용 이유:

  • 모델 호출의 간편화: LangChain은 OpenAI API 호출을 단순화하여 더 직관적으로 사용할 수 있게 한다.
  • 고급 설정: temperature, max_tokens 등의 파라미터를 조정하여 모델의 응답 스타일을 제어할 수 있다.
주요 매개변수:
  • model: 사용할 OpenAI 모델의 이름을 지정한다. 예: gpt-3.5-turbo, gpt-4.
  • temperature: 응답의 랜덤성을 제어한다. 0에 가까울수록 일관된 결과를 반환하고, 1에 가까울수록 창의적인 결과를 반환한다.
응용 예시:
model = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.7)
response = model("Tell me a joke")
print(response)

2-3. 프롬프트 템플릿 설정: from langchain_core.prompts import ChatPromptTemplate

from langchain_core.prompts import ChatPromptTemplate

설명: ChatPromptTemplate는 OpenAI 모델에 전달할 프롬프트(질문/명령)를 구조화하는 도구이다.

사용 이유:

  • 역할 설정: system 메시지를 사용하여 모델에게 특정 역할을 부여할 수 있다. 예: "도움이 되는 비서로 행동하라."
  • 동적 입력 관리: 템플릿에 변수를 삽입하여 사용자 입력에 따라 다양한 질문/명령을 생성할 수 있다.
응용 예시:
prompt = ChatPromptTemplate.from_messages([
    ("system", "You are a math tutor."),
    ("user", "{question}")
])
response = prompt.format(question="What is 2+2?")
print(response)

이 프롬프트는 다음과 같은 메시지를 모델에 전달한다:

System: You are a math tutor.
User: What is 2+2?

2-4. 출력 파싱: from langchain_core.output_parsers import StrOutputParser

from langchain_core.output_parsers import StrOutputParser

설명: StrOutputParser는 모델의 응답을 문자열 형식으로 파싱(변환)하는 클래스이다.

사용 이유:

  • 결과 단순화: 모델 응답에서 필요한 부분만 추출하여 활용할 수 있다.
  • 유연한 출력 처리: 필요에 따라 결과를 다른 형식(JSON, 리스트 등)으로 변환할 수도 있다.
응용 예시:
output_parser = StrOutputParser()
parsed_output = output_parser.parse({"text": "Hello, world!"})
print(parsed_output)  # "Hello, world!"

📝 정리된 주요 기능

모듈/클래스기능 및 역할

load_dotenv .env 파일의 환경 변수를 로드하여 보안성과 유연성을 제공
ChatOpenAI OpenAI 모델과 상호작용하여 대화 기반 응답을 생성
ChatPromptTemplate 대화형 프롬프트 템플릿을 설정하여 사용자 입력을 관리
StrOutputParser 모델의 응답을 문자열로 변환하여 간단한 결과 제공

3. 모델 초기화

model = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)

설명: OpenAI의 gpt-3.5-turbo 모델을 초기화한다. temperature=0으로 설정하여 일관된 결과를 반환하도록 한다.

4. 함수 정의 및 체인 실행

def call_string_output_parser():
    prompt = ChatPromptTemplate.from_messages([
        ("system", "You are a helpful assistant that can answer questions."),
        ("user", "{input}")
    ])

    parser = StrOutputParser()

    chain = prompt | model | parser

    return chain.invoke({"input": "강아지"})

설명: call_string_output_parser 함수는 LangChain 체인을 생성하고, 사용자 입력을 모델로 전달하여 응답을 반환한다. invoke 메서드는 input 값을 "강아지"로 설정하여 체인을 실행한다.

5. 결과 출력

print(call_string_output_parser())

설명: 함수의 반환값을 출력하여 모델의 응답을 확인한다.

💡 실행 결과

다음은 코드를 실행했을 때 예상되는 결과이다.

강아지는 귀엽고 충성스러운 동물입니다.

📈 확장 및 응용

  • 동적 입력: 사용자로부터 입력을 동적으로 받아 다양한 질문에 대한 응답을 제공할 수 있다.
  • 다국어 지원: 시스템 메시지를 조정하여 다국어 응답 기능을 추가할 수 있다.
  • JSON 출력: 응답을 구조화된 JSON 형식으로 변환하여 데이터 처리에 활용할 수 있다.

그럼 다음 예제로 ~~궈궈

댓글