인공지능/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": "췌장암, 엄마, 병원, 공동묘지"})
반응형