인공지능/nlp

[LLM] langchain을 활용한 챗봇 구현 (3): ChatPromptTemplate, prompt, model, output parser

jmHan 2024. 8. 12. 23:58
반응형

 

LCEL(LangChain Expression Language)

LCEL을 사용하여 langchain의 다양한 구성 요소를 단일 체인으로 결합할 수 있다.

 

LCEL 기본 형태: prompt+model+output parser

 

 

CommaSeparatedListOutputParser 사용 

리스트 형태로 결과를 받기 위해 사용 

# promptTemplate + OutParser
from langchain_core.output_parsers import CommaSeparatedListOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI

# 콤마로 구분된 리스트 출력 파서 초기화
output_parser = CommaSeparatedListOutputParser()

# 출력 형식 지침 가져오기
format_instructions = output_parser.get_format_instructions()

# 프롬프트 템플릿 설정
prompt = PromptTemplate(
    # 주제에 대한 여섯 가지를 나열하라는 템플릿
    template="List Six {subject}.\n{format_instructions}",
    # 동적으로 값을 전달 받을 때 사용하는 변수 
    input_variables=["subject"],  # 입력 변수로 'subject' 사용
    # 템플릿의 일부를 미리 지정된 값으로 고정할 때 사용
    partial_variables={"format_instructions": format_instructions},
)
# ChatOpenAI 모델 초기화
model = ChatOpenAI(temperature=0.2)
# 프롬프트, 모델, 출력 파서를 연결하여 체인 생성
chain = prompt | model | output_parser

partial_variable: 템플릿 일부를 지정된 값으로 미리 고정 

get_format_instructions(): llm 출력 형식을 지정하는 지침서

input_variable: 동적으로 값을 전달받기 위한 변수

 

chain.invoke({"subject": "스노쿨링 국내 및 해외 관광명소"})

 

 

StrOutputParser 사용 

출력물을 str 형태로 받기 위해 사용

 

ChatPromptTemplate

대화형 모델이나 챗봇 개발에 주로 사용함

from langchain_core.prompts import ChatPromptTemplate

messages = [
    ("system", "{count}문장 내외로 {contents}에 대한 소설을 작성해줘")
]
prompt_template = ChatPromptTemplate.from_messages(messages)

parser = StrOutputParser()

chain = prompt_template | model | parser
chain.invoke({"count":10, "contents": "췌장암, 엄마, 병원, 공동묘지"})

반응형