LangChain 출력 파서(Output Parsers)를 활용한 결과 데이터 구조화

대규모 언어 모델(LLM)이 생성하는 텍스트는 기본적으로 문자열 형태입니다. 이를 애플리케이션에서 프로그래밍적으로 활용하기 위해서는 구조화된 데이터로 변환하는 과정이 필요하며, LangChain은 이를 위해 다양한 출력 파서(Output Parsers)를 제공합니다.

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'>

태그: LangChain python LLM OutputParser JsonOutputParser

7월 29일 10:06에 게시됨