본문 바로가기
Data & Research

[LLM & RAG] Langchain 기초 - Output Parser

by TrillionNT 2025. 4. 3.

output_parsers는 LLM이 생성한 텍스트를 구조화된 데이터로 변환하는 기능을 제공합니다. 

 

1. PydanticOutputParser (Pydantic 모델을 이용한 데이터 변환)

from langchain_core.output_parsers import PydanticOutputParser
from langchain_core.pydantic_v1 import BaseModel, Field
from langchain_openai import ChatOpenAI

# Pydantic 모델 정의
class ProductInfo(BaseModel):
    name: str = Field(..., description="Product name")
    price: float = Field(..., description="Price in USD")

# PydanticOutputParser 설정
parser = PydanticOutputParser(pydantic_object=ProductInfo)

# LLM 생성
llm = ChatOpenAI(model="gpt-4")

# 프롬프트 실행 및 파싱
raw_output = llm.invoke("Give me a product name and price in JSON format")
parsed_output = parser.parse(raw_output.content)

print(parsed_output)

 

 

2. CommaSeparatedListOutputParser (쉼표로 구분된 텍스트를 리스트로 변환)

from langchain_core.output_parsers import CommaSeparatedListOutputParser

# 쉼표 구분 리스트 파서 생성
parser = CommaSeparatedListOutputParser()

# 예제 입력
raw_text = "apple, banana, cherry, date"

# 변환 실행
parsed_output = parser.parse(raw_text)
print(parsed_output)  # ['apple', 'banana', 'cherry', 'date']

 

 

3. StructuredOutputParser (구조화된 JSON 출력)

from langchain_core.output_parsers import StructuredOutputParser
from langchain_core.pydantic_v1 import BaseModel, Field

# 데이터 모델 정의
class Person(BaseModel):
    name: str = Field(..., description="Full name")
    age: int = Field(..., description="Age of the person")

# JSON 구조 파서 설정
parser = StructuredOutputParser.from_pydantic(Person)

# 예제 실행
raw_json = '{"name": "Alice", "age": 30}'
parsed_output = parser.parse(raw_json)

print(parsed_output)  # Person(name='Alice', age=30)

 

 

4. JsonOutputParser (일반 JSON 변환)

from langchain_core.output_parsers import JsonOutputParser

# JSON 파서 생성
parser = JsonOutputParser()

# 예제 JSON 문자열
raw_json = '{"city": "Seoul", "population": 10000000}'

# 변환 실행
parsed_output = parser.parse(raw_json)
print(parsed_output)  # {'city': 'Seoul', 'population': 10000000}

 

 

5. PandasDataFrameOutputParser (데이터프레임 변환)  

: 쉼표(,)로 구분된 텍스트를 pandas.DataFrame으로 변환

from langchain_core.output_parsers import PandasDataFrameOutputParser
import pandas as pd

# 판다스 데이터프레임 파서
parser = PandasDataFrameOutputParser()

# 예제 테이블 데이터
raw_text = """
name,age,city
Alice,30,New York
Bob,25,Los Angeles
Charlie,35,Chicago
"""

# 변환 실행
df = parser.parse(raw_text)
print(df)

 

 

6. DatetimeOutputParser (날짜 변환)

: 날짜 문자열을 datetime 객체로 변환

from langchain_core.output_parsers import DatetimeOutputParser

# 날짜 파서
parser = DatetimeOutputParser()

# 날짜 문자열
raw_date = "2024-04-01T12:00:00Z"

# 변환 실행
parsed_date = parser.parse(raw_date)
print(parsed_date)  # 2024-04-01 12:00:00+00:00

날짜 문자열을 datetime 객체로 변환합니다.

 

 

7. EnumOutputParser (열거형 변환)

from langchain_core.output_parsers import EnumOutputParser
from enum import Enum

# Enum 정의
class Emotion(Enum):
    HAPPY = "happy"
    SAD = "sad"
    ANGRY = "angry"

# Enum 파서 생성
parser = EnumOutputParser(enum=Emotion)

# 변환 실행
parsed_enum = parser.parse("happy")
print(parsed_enum)  # Emotion.HAPPY

 

 

'Data & Research' 카테고리의 다른 글

[LLM & RAG] LCEL Runnable  (0) 2025.04.03
[LLM & RAG] Langchain 기초 - Memory  (0) 2025.04.03
[LLM & RAG] Langchain 기초 - LLM  (0) 2025.04.03
[LLM & RAG] Langchain 기초 - Prompt  (0) 2025.04.03
[LLM & RAG] Langchain 기초 - Chain  (0) 2025.04.03