1. 기본 출력 파서
StrOutputParser
가장 단순하면서도 자주 사용되는 파서입니다. 모델의 응답에서 텍스트 콘텐츠만을 추출하여 문자열 형태로 반환합니다.
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
# 모델 및 프롬프트 설정
model = ChatOpenAI(model="gpt-4o")
prompt_tmpl = ChatPromptTemplate.from_template("{topic}에 대해 짧게 설명해줘.")
# 파서 인스턴스 생성 및 체인 구성
string_parser = StrOutputParser()
chain = prompt_tmpl | model | string_parser
# 실행
result = chain.invoke({"topic": "양자역학"})
print(result)
CommaSeparatedListOutputParser
쉼표로 구분된 문자열 응답을 받아 파이썬의 리스트(List) 객체로 변환합니다.
from langchain.output_parsers import CommaSeparatedListOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
list_parser = CommaSeparatedListOutputParser()
prompt_tmpl = ChatPromptTemplate.from_template("{subject} 종류 3가지를 콤마로 구분해서 나열해줘.\n{format_instructions}")
# 포맷 지시사항 포함
chain = prompt_tmpl | ChatOpenAI() | list_parser
result = chain.invoke({
"subject": "프로그래밍 언어",
"format_instructions": list_parser.get_format_instructions()
})
print(result) # 결과: ['Python', 'Java', 'C++']
BooleanOutputParser
모델의 응답을 불리언(True/False) 값으로 변환합니다. 예/아니오 답변이 필요한 로직에 유용합니다.
from langchain.output_parsers import BooleanOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
bool_parser = BooleanOutputParser()
prompt_tmpl = ChatPromptTemplate.from_template("다음 질문에 대해 예/아니오로 답하세요: {question}")
chain = prompt_tmpl | ChatOpenAI() | bool_parser
is_correct = chain.invoke({"question": "태양은 지구보다 큰가요?"})
print(is_correct) # 결과: True
JsonOutputParser
모델의 출력을 JSON 구조로 해석하여 파이썬 딕셔너리(Dictionary) 형태로 반환합니다.
from langchain_core.output_parsers import JsonOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
json_parser = JsonOutputParser()
prompt_tmpl = ChatPromptTemplate.from_template("사용자 정보를 JSON 형식으로 생성해줘. 이름과 나이를 포함해야 해.\n{format_instructions}")
chain = prompt_tmpl | ChatOpenAI() | json_parser
user_data = chain.invoke({"format_instructions": json_parser.get_format_instructions()})
print(user_data)
print(type(user_data)) # <class 'dict'>
2. 특수 목적 파서
DatetimeOutputParser
자연어로 표현된 날짜 정보를 파이썬의 datetime 객체로 변환합니다. 이 파서는 모델이 정확한 형식을 지키도록 get_format_instructions()를 프롬프트에 주입하는 것이 중요합니다.
from langchain.output_parsers import DatetimeOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
dt_parser = DatetimeOutputParser()
instructions = dt_parser.get_format_instructions()
prompt_tmpl = ChatPromptTemplate.from_messages([
("system", "반드시 지정된 형식으로 날짜를 응답하세요: {format_instructions}"),
("human", "다음 텍스트에서 날짜를 추출하세요: {text}")
])
chain = prompt_tmpl | ChatOpenAI() | dt_parser
final_date = chain.invoke({
"text": "내 생일은 1995년 12월 25일이야.",
"format_instructions": instructions
})
print(final_date)
print(type(final_date)) # <class 'datetime.datetime'>