LangChain [2]

yuyeong·2024년 7월 21일
0

LangChain

목록 보기
2/4
post-thumbnail

model I/O - 언어 모델을 다루기 쉽게 만들기

model I/O를 구성하는 3개의 서브모듈

model I/O은 랭체인의 가장 기본적인 모듈이다.
1. language models
다양한 언어 모델을 동일한 인터페이스에서 호출할 수 있는 기능 제공

  1. prompts
    해당 모듈은 언어 모델을 호출하기 위한 프롬프트를 구축하는데 유용한 기능을 제공한다. 다양한 처리를 통해 원하는 프롬프트를 쉽게 만들 수 있도록 하는것이 목적이다.

    3.output parsers
    언어 모델에서 얻은 출력을 분석해 애플리케이션에서 사용하기 쉬운 형태로 변환하는 기능을 제공한다.

language models를 사용해 gpt-3.5-turbo 호출하기

from langchain.chat_models import ChatOpenAI  #← 모듈 가져오기
from langchain.schema import HumanMessage  #← 사용자의 메시지인 HumanMessage 가져오기

chat = ChatOpenAI(  #← 클라이언트를 만들고 chat에 저장
    model="gpt-3.5-turbo",  #← 호출할 모델 지정
)

result = chat( #← 실행하기
    [
        HumanMessage(content="안녕하세요!"),
    ]
)
print(result.content)

첫번째 줄에서는 language models 중 ChatOpenAI 클래스를 가져오고 있는데, ChatOpenAI 클래스는 gpt-3.5-turbo 모델을 호출한다.

content에 언어 모델에 전송할 내용을 입력하고 HumanMessage를 초기화한다.

AIMessage를 통해 언어 모델의 응답을 표현할 수 있다.

랭체인에서는 대화 형식의 상호작용을 표현하기 위해 AIMessage가 준비되어있다.
요리 레시피를 문의하면 언어모델에서 레시피를 반환한다. 또한, 영어 번역도 가능하다.

language models만으로는 과거의 응답을 바탕으로 답변하게 하려면 매번 소스코드를 다시 작성해야하므로 매우 번거롭고, 대화를 이용한 애플리케이션 개발이 어려울 수 있다.
랭체인은 이러한 상호작용을 지원하기 위한 memory 모듈이 준비되어있다.

systemmessage를 사용해 언어 모델의 성격과 설정을 정의한다.

대화 기능을 커스터마이징할 수 있는 systemmessage를 통해 언어 모델를 커스텀마이징할 수 있다.

result = chat( #← 실행하기
    [
    	systemmessage(content="당신은 친한 친구입니다. 존댓말을 쓰지 말고 솔직하게 답해주세요."),
        HumanMessage(content="안녕!"),
    ]
)

prompttemplate 변수를 프롬프트에 전개하기

prompt 모듈의 가장 기본적인 모듈 prompttemplate를 통해 파이썬의 입력과 프롬프트를 조합할 수 있다.

from langchain import PromptTemplate  #← PromptTemplate 가져오기

prompt = PromptTemplate(  #← PromptTemplate 초기화하기
    template="{product}는 어느 회사에서 개발한 제품인가요?",  #← {product}라는 변수를 포함하는 프롬프트 작성하기
    input_variables=[
        "product"  #← product에 입력할 변수 지정
    ]
)

print(prompt.format(product="아이폰"))
print(prompt.format(product="갤럭시"))

prompttemplate를 사용하려면 아래 두 단계가 필요하다.
1. prompttemplate 준비
2. 준비된 prompttemplate 사용

또한, prompttemplate는 유효성 검사 기능을 가지고 있다.

language models와 prompttemplate 결합

from langchain import PromptTemplate
from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage

chat = ChatOpenAI(  #← 클라이언트 생성 및 chat에 저장
    model="gpt-3.5-turbo",  #← 호출할 모델 지정
)

prompt = PromptTemplate(  #← PromptTemplate을 작성
    template="{product}는 어느 회사에서 개발한 제품인가요?",  #← {product}라는 변수를 포함하는 프롬프트 작성하기
    input_variables=[
        "product"  #← product에 입력할 변수 지정
    ]
)

result = chat( #← 실행
    [
        HumanMessage(content=prompt.format(product="아이폰")),
    ]
)
print(result.content)

PromptTemplate을 사용해 변수와 프롬프트를 조합해 실행할 수 있다.

목록 형식으로 결과 받기

output parsers를 사용해 언어 모델에서 받은 결과를 구조화해보자.
언어모델을 호출해 얻은 결과는 텍스트 형식이 된다. 구조화된 데이터를 받고 싶은 경우 output parsers를 활용할 수 있다.

from langchain.chat_models import ChatOpenAI
from langchain.output_parsers import PydanticOutputParser
from langchain.schema import HumanMessage
from pydantic import BaseModel, Field, validator

chat = ChatOpenAI()

class Smartphone(BaseModel): #← Pydantic의 모델을 정의한다.
    release_date: str = Field(description="스마트폰 출시일") #← Field를 사용해 설명을 추가
    screen_inches: float = Field(description="스마트폰의 화면 크기(인치)")
    os_installed: str = Field(description="스마트폰에 설치된 OS")
    model_name: str = Field(description="스마트폰 모델명")

    @validator("screen_inches") #← validator를 사용해 값을 검증
    def validate_screen_inches(cls, field): #← 검증할 필드와 값을 validator의 인수로 전달
        if field <= 0: #← screen_inches가 0 이하인 경우 에러를 반환
            raise ValueError("Screen inches must be a positive number")
        return field

parser = PydanticOutputParser(pydantic_object=Smartphone) #← PydanticOutputParser를 SmartPhone 모델로 초기화

result = chat([ #← Chat models에 HumanMessage를 전달해 문장을 생성
    HumanMessage(content="안드로이드 스마트폰 1개를 꼽아주세요"),
    HumanMessage(content=parser.get_format_instructions())
])

parsed_result = parser.parse(result.content) #← PydanticOutputParser를 사용해 문장을 파싱

print(f"모델명: {parsed_result.model_name}")
print(f"화면 크기: {parsed_result.screen_inches}인치")
print(f"OS: {parsed_result.os_installed}")
print(f"스마트폰 출시일: {parsed_result.release_date}")

p76

profile
이겨내

0개의 댓글

관련 채용 정보