LangChain | StructuredOutputParser | 출력 파서

박성문·2025년 1월 19일

StructuredOutputParser란

LLM에 대한 답변을 dict 형식으로 구성하고 
key / value 쌍으로 갖는 여러 필드를 반환하고자 할 때 사용 할 수 있다.
Pydantic / JSON 파서가 더 강력하지만, 이는 덜 강력한 모델에 유용하다
(로컬모델과 같은 인텔리전스가 GPT, Claude 모델보다 인텔리전스가 낮은(parameter 수가 낮은) 모델)

로컬 모델은 Pydantic 파서가 동작하지 않는 경우가 많으므로,
대안으로 StructuredOutputParser를 사용할 수 있다.

기본 구조

StructuredOutputParser만의 특징 중 하나인
ResponseSchema이다.
필요한 만큼 필드 추가가 가능하다.

다른 파서들과 마찬가지로 파서 객체를 생성 및 초기화하고
.get_format_instructions()로 형식 지침을 가져온다

체인 구성 역시 다른 파서들처럼 마지막에 파서를 연결해주어야 한다

ResponseSchema

ResponseSchema 클래스를 사용해서 사용자의 질문에 대한 답변과 사용된 소스(웹사이트)에 대한 설명을 포함하는 응답 스키마를 정의한다.

  • name : 결과 딕셔너리의 키로 사용됨
  • description : AI 모델에게 해당 필드에 어떤 내용이 들어가야 하는지 설명

StructuredOutputParser를 response_schemas를 사용하여 초기화하여, 정의된 응답 스키마에 따라 출력을 구조화한다.
StructuredOutputParser의 역할

  • 정의된 스키마에 따라 AI 모델의 응답을 구조화된 형식으로 파싱
  • 각 필드가 올바른 형식과 내용을 가지도록 보장

필수 문법

다른 스키마 구성 예시

StructuredOutputParser의 장점

  • 응답을 구조화된 형식으로 받을 수 있다
  • 필요한 모든 정보가 포함되었는지 확인 가능하다
  • 결과를 프로그래밍 방식으로 쉽게 처리 가능하다

사용 사례

  • 학술 데이터베이스 검색 결과를 구조화하여 제공할 때 유용

  • 여러 쇼핑몰의 리뷰 데이터를 종합 분석할 때 활용

  • 팩트 체크 시스템 구축에 활용

  • 의료 정보 제공 시스템에서 신뢰성 있는 정보 제공

  • 투자 분석 리포트 생성 시 활용

StructuredOutputParser는

데이터의 출처 추적이 중요할 때,
여러 소스의 정보를 통합할 때,
정보의 신뢰성 검증이 필요할 때
쓸 수 있다.

chain.stream

for s in chain.stream({"question": "세종대왕의 업적은 무엇인가요?"}):
    # 스트리밍 출력
    print(s)

이 파서 역시 chain.stream을 통해 스트림 응답을 받을 수 있다.

profile
성문이

0개의 댓글