
안녕하세요! 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은 더 다양한 응답을 생성합니다.