안녕하세요! LangChain을 사용하여 숏 프롬프트 템플릿을 만드는 방법을 쉽고 자세하게 설명해드리겠습니다. 실습 코드를 풍부하게 제공하여 이해를 도울게요. OpenAI API 키는 .env
파일에 저장할 것이니 참고해주세요.
LangChain은 언어 모델을 활용한 애플리케이션을 쉽게 개발할 수 있도록 도와주는 프레임워크입니다. 복잡한 프롬프트 관리, 체인 구성, 메모리 관리 등을 지원하여 개발자가 생산성을 높일 수 있습니다.
프롬프트 엔지니어링에서 숏 프롬프트 템플릿은 모델이 원하는 방식으로 응답하도록 예시를 제공하는 방법입니다. 특히, 모델에게 특정한 패턴이나 형식을 학습시키고자 할 때 유용합니다.
pip install openai langchain python-dotenv
.env
파일에 OpenAI API 키 저장프로젝트 루트 디렉토리에 .env
파일을 생성하고 다음과 같이 입력합니다:
OPENAI_API_KEY=your_openai_api_key_here
import os
from dotenv import load_dotenv
load_dotenv()
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
LangChain에서는 시스템 메시지와 휴먼 메시지를 통해 모델의 역할과 입력을 정의합니다.
from langchain.prompts import SystemMessagePromptTemplate
system_template = "당신은 유용한 법률 보조입니다. 복잡한 법률 용어를 쉽고 이해하기 쉽게 번역합니다."
system_message_prompt = SystemMessagePromptTemplate.from_template(system_template)
모델에게 원하는 응답 패턴을 학습시키기 위해 예시를 제공합니다.
from langchain.prompts import HumanMessagePromptTemplate, AIMessagePromptTemplate
# 예시 법률 텍스트
legal_text_example = """
이 계약의 어떠한 조항도 무효, 불법 또는 집행 불가능한 것으로 판명되는 경우,
해당 조항은 필요한 최소한의 범위 내에서 수정된 것으로 간주되며, 나머지 조항의 유효성은 영향을 받지 않습니다.
"""
# 해당 법률 텍스트에 대한 간단한 설명
simplified_text_example = "계약의 일부 조항이 무효가 되더라도, 나머지 조항은 여전히 유효합니다."
# 휴먼 메시지와 AI 메시지 생성
example_human_message = HumanMessagePromptTemplate.from_template(legal_text_example)
example_ai_message = AIMessagePromptTemplate.from_template(simplified_text_example)
이제 시스템 메시지, 예시 메시지, 휴먼 메시지를 결합하여 채팅 프롬프트를 만듭니다.
from langchain.prompts import ChatPromptTemplate
chat_prompt = ChatPromptTemplate.from_messages([
system_message_prompt,
example_human_message,
example_ai_message,
# 추가적인 예시를 원하면 여기에 더 추가할 수 있습니다.
])
from langchain.chat_models import ChatOpenAI
from langchain.schema import AIMessage, HumanMessage, SystemMessage
# 새로운 법률 텍스트
new_legal_text = """
양도인은 본 계약에 따라 부동산의 소유권을 양수인에게 이전하며,
이는 모든 권리와 의무를 포함합니다.
"""
# 휴먼 메시지 생성
new_human_message = HumanMessagePromptTemplate.from_template(new_legal_text)
# 전체 프롬프트 구성
full_prompt = chat_prompt.format_prompt().to_messages() + [new_human_message]
# 모델 초기화
llm = ChatOpenAI(openai_api_key=OPENAI_API_KEY, temperature=0)
# 모델 호출
response = llm(full_prompt)
# 결과 출력
print(response.content)
소유자는 이 부동산의 모든 권리와 의무를 구매자에게 넘깁니다.
이렇게 LangChain을 활용하여 숏 프롬프트 템플릿을 만들고, 법률 문서를 간단하게 설명하는 AI 보조를 구현해보았습니다. 예시를 통해 모델에게 원하는 패턴을 학습시킬 수 있으며, 추가적인 예시를 제공하여 모델의 응답 품질을 향상시킬 수 있습니다.
# 필요한 라이브러리 임포트
import os
from dotenv import load_dotenv
from langchain.prompts import (
SystemMessagePromptTemplate,
HumanMessagePromptTemplate,
AIMessagePromptTemplate,
ChatPromptTemplate
)
from langchain.chat_models import ChatOpenAI
from langchain.schema import AIMessage, HumanMessage, SystemMessage
# 환경 변수 로드 (.env 파일에서 OPENAI_API_KEY 가져오기)
load_dotenv()
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
# 시스템 메시지 템플릿 생성 (모델의 역할 정의)
system_template = """
당신은 유용한 법률 보조입니다. 복잡한 법률 용어를 쉽고 이해하기 쉽게 번역합니다.
"""
system_message_prompt = SystemMessagePromptTemplate.from_template(system_template)
# 예시 법률 텍스트 및 간단한 설명 생성 (모델에게 원하는 패턴 학습시키기)
# 예시 입력 (복잡한 법률 문서)
legal_text_example = """
이 계약의 어떠한 조항도 무효, 불법 또는 집행 불가능한 것으로 판명되는 경우,
해당 조항은 필요한 최소한의 범위 내에서 수정된 것으로 간주되며, 나머지 조항의 유효성은 영향을 받지 않습니다.
"""
# 예시 출력 (간단한 설명)
simplified_text_example = "계약의 일부 조항이 무효가 되더라도, 나머지 조항은 여전히 유효합니다."
# 휴먼 메시지와 AI 메시지 생성 (예시 입력과 출력)
example_human_message = HumanMessagePromptTemplate.from_template("{legal_text}")
example_ai_message = AIMessagePromptTemplate.from_template(simplified_text_example)
# 채팅 프롬프트 템플릿 구성 (시스템 메시지, 예시 메시지 포함)
chat_prompt = ChatPromptTemplate.from_messages([
system_message_prompt,
example_human_message,
example_ai_message,
# 추가적인 예시를 원하면 여기에 더 추가할 수 있습니다.
])
# 새로운 법률 텍스트 입력 (모델에게 전달할 실제 입력)
new_legal_text = """
양도인은 본 계약에 따라 부동산의 소유권을 양수인에게 이전하며,
이는 모든 권리와 의무를 포함합니다.
"""
# 전체 프롬프트 구성 (입력 변수 설정)
messages = chat_prompt.format_messages(legal_text=new_legal_text)
# 모델 초기화 (OpenAI API 키와 온도 설정)
llm = ChatOpenAI(openai_api_key=OPENAI_API_KEY, temperature=0)
# 모델 호출 (프롬프트를 모델에 전달하고 응답 받기)
response = llm(messages)
# 결과 출력 (모델의 응답 출력)
print(response.content)
라이브러리 임포트 및 환경 변수 설정
dotenv
를 사용하여 .env
파일에서 OpenAI API 키를 로드합니다.시스템 메시지 템플릿 생성
예시 입력과 출력 생성
HumanMessagePromptTemplate
과 AIMessagePromptTemplate
을 사용하여 예시 메시지를 생성합니다.채팅 프롬프트 템플릿 구성
ChatPromptTemplate
을 사용하여 시스템 메시지와 예시 메시지를 결합합니다.새로운 법률 텍스트 입력
전체 프롬프트 구성 및 모델 호출
format_messages
메서드를 사용하여 입력 변수를 설정하고 전체 메시지 목록을 생성합니다.ChatOpenAI
클래스를 사용하여 모델을 초기화하고, 메시지를 모델에 전달하여 응답을 받습니다.결과 출력
라이브러리 설치
pip install openai langchain python-dotenv
.env
파일 생성 및 OpenAI API 키 저장
프로젝트 루트 디렉토리에 .env
파일을 생성하고 다음 내용을 추가합니다:
OPENAI_API_KEY=your_openai_api_key_here
your_openai_api_key_here
부분을 실제 OpenAI API 키로 대체하세요.
코드 실행
위의 Python 코드를 main.py
등으로 저장하고 터미널에서 실행합니다:
python main.py
소유자는 이 부동산의 모든 권리와 의무를 구매자에게 넘깁니다.
모델의 응답 품질을 향상시키기 위해 추가적인 예시를 제공할 수 있습니다. 예를 들어:
# 두 번째 예시 입력과 출력 생성
legal_text_example_2 = """
본 계약의 해지는 서면으로 통지되어야 하며, 양 당사자의 서명 후 효력이 발생합니다.
"""
simplified_text_example_2 = "계약을 끝내려면 서면으로 알리고 서로 서명해야 합니다."
# 추가 예시 메시지 생성
example_human_message_2 = HumanMessagePromptTemplate.from_template("{legal_text}")
example_ai_message_2 = AIMessagePromptTemplate.from_template(simplified_text_example_2)
# 채팅 프롬프트 템플릿에 추가
chat_prompt = ChatPromptTemplate.from_messages([
system_message_prompt,
example_human_message,
example_ai_message,
example_human_message_2,
example_ai_message_2,
])
이렇게 하면 모델이 더 다양한 패턴을 학습하여 더욱 정확한 응답을 제공할 수 있습니다.
temperature
파라미터를 조절하여 모델의 응답 다양성을 변경할 수 있습니다. temperature=0
은 가장 결정적인 응답을, temperature=1
은 더 다양한 응답을 생성합니다.