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
는 모델의 출력값을 문자열로 변환한다. 외우려고 해도 잘안된다...
나이는....ㅠ.,ㅜ
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/016.gif)
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 형식으로 변환하여 데이터 처리에 활용할 수 있다.
그럼 다음 예제로 ~~궈궈
'파이썬' 카테고리의 다른 글
렝체인 실습#1 - 재료에 따른 레스피 만들기 (4) | 2024.11.10 |
---|---|
Vscode 또는 Cursor에서 Jupyter Notebook 가상환경만들기 (2) | 2024.11.10 |
LangChain으로 AI 기반 애플리케이션 구현하기: 초보자를 위한 가이드 🚀 (2) | 2024.11.10 |
댓글