LangChain을 사용하여 복잡한 법률 용어를 쉽게 번역하는 숏 프롬프트 템플릿 만들기

GoGoComputer·2024년 10월 7일
0

LangChain Basics

목록 보기
8/40

안녕하세요! LangChain을 사용하여 숏 프롬프트 템플릿을 만드는 방법을 쉽고 자세하게 설명해드리겠습니다. 실습 코드를 풍부하게 제공하여 이해를 도울게요. OpenAI API 키는 .env 파일에 저장할 것이니 참고해주세요.


1. LangChain 소개

LangChain은 언어 모델을 활용한 애플리케이션을 쉽게 개발할 수 있도록 도와주는 프레임워크입니다. 복잡한 프롬프트 관리, 체인 구성, 메모리 관리 등을 지원하여 개발자가 생산성을 높일 수 있습니다.

2. 숏 프롬프트 템플릿의 필요성

프롬프트 엔지니어링에서 숏 프롬프트 템플릿은 모델이 원하는 방식으로 응답하도록 예시를 제공하는 방법입니다. 특히, 모델에게 특정한 패턴이나 형식을 학습시키고자 할 때 유용합니다.

3. 환경 설정

필요한 라이브러리 설치

pip install openai langchain python-dotenv

.env 파일에 OpenAI API 키 저장

프로젝트 루트 디렉토리에 .env 파일을 생성하고 다음과 같이 입력합니다:

OPENAI_API_KEY=your_openai_api_key_here

Python 코드에서 환경 변수 로드

import os
from dotenv import load_dotenv

load_dotenv()
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")

4. 시스템 메시지와 휴먼 메시지 생성

LangChain에서는 시스템 메시지와 휴먼 메시지를 통해 모델의 역할과 입력을 정의합니다.

시스템 메시지 템플릿 생성

from langchain.prompts import SystemMessagePromptTemplate

system_template = "당신은 유용한 법률 보조입니다. 복잡한 법률 용어를 쉽고 이해하기 쉽게 번역합니다."
system_message_prompt = SystemMessagePromptTemplate.from_template(system_template)

5. 예시 입력과 출력 생성

모델에게 원하는 응답 패턴을 학습시키기 위해 예시를 제공합니다.

예시 입력과 출력 정의

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)

6. 채팅 프롬프트 템플릿 구성

이제 시스템 메시지, 예시 메시지, 휴먼 메시지를 결합하여 채팅 프롬프트를 만듭니다.

from langchain.prompts import ChatPromptTemplate

chat_prompt = ChatPromptTemplate.from_messages([
    system_message_prompt,
    example_human_message,
    example_ai_message,
    # 추가적인 예시를 원하면 여기에 더 추가할 수 있습니다.
])

7. 실제 사용 예시

새로운 법률 텍스트 입력 및 모델 호출

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)

예상 출력

소유자는 이 부동산의 모든 권리와 의무를 구매자에게 넘깁니다.

8. 마무리

이렇게 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 키를 로드합니다.
    • LangChain의 다양한 프롬프트 템플릿과 모델을 임포트합니다.
  • 시스템 메시지 템플릿 생성

    • 시스템 메시지를 통해 모델의 역할을 정의합니다.
    • 여기서는 모델이 복잡한 법률 용어를 쉽게 번역하는 법률 보조로 설정했습니다.
  • 예시 입력과 출력 생성

    • 모델에게 원하는 응답 패턴을 학습시키기 위해 예시 법률 텍스트와 그에 대한 간단한 설명을 제공합니다.
    • HumanMessagePromptTemplateAIMessagePromptTemplate을 사용하여 예시 메시지를 생성합니다.
  • 채팅 프롬프트 템플릿 구성

    • ChatPromptTemplate을 사용하여 시스템 메시지와 예시 메시지를 결합합니다.
    • 추가적인 예시를 제공하여 모델의 성능을 향상시킬 수 있습니다.
  • 새로운 법률 텍스트 입력

    • 실제로 모델에게 전달할 새로운 법률 문서를 정의합니다.
  • 전체 프롬프트 구성 및 모델 호출

    • format_messages 메서드를 사용하여 입력 변수를 설정하고 전체 메시지 목록을 생성합니다.
    • ChatOpenAI 클래스를 사용하여 모델을 초기화하고, 메시지를 모델에 전달하여 응답을 받습니다.
  • 결과 출력

    • 모델의 응답을 출력합니다. 이 응답은 복잡한 법률 문서를 간단하게 설명한 내용입니다.

실행 방법

  1. 라이브러리 설치

    pip install openai langchain python-dotenv
  2. .env 파일 생성 및 OpenAI API 키 저장

    프로젝트 루트 디렉토리에 .env 파일을 생성하고 다음 내용을 추가합니다:

    OPENAI_API_KEY=your_openai_api_key_here

    your_openai_api_key_here 부분을 실제 OpenAI API 키로 대체하세요.

  3. 코드 실행

    위의 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,
])

이렇게 하면 모델이 더 다양한 패턴을 학습하여 더욱 정확한 응답을 제공할 수 있습니다.

주의 사항

  • 토큰 한도: 예시를 너무 많이 추가하면 모델의 토큰 한도를 초과할 수 있습니다. OpenAI 모델의 경우 최대 토큰 수는 4096 또는 8192 토큰입니다.
  • 온도 조절: temperature 파라미터를 조절하여 모델의 응답 다양성을 변경할 수 있습니다. temperature=0은 가장 결정적인 응답을, temperature=1은 더 다양한 응답을 생성합니다.

profile
IT를 좋아합니다.

0개의 댓글