LangChain | OutputFixingParser | 출력 파서

박성문·2025년 1월 20일

OutputFixingParser란

출력 파싱 과정에서 발생할 수 있는 오류를 자동으로 수정하는 기능을 제공한다.
이 파서는 기본적으로 다른 파서를 래핑하고 이 파서가 처리할 수 없는
형식의 출력이나 오류를 반환할 경우, 
추가적인 LLM 호출을 통해 오류를 수정하도록 설계되었다.

이 파서의 핵심은 첫 번째 시도에서 스키마를 준수하지 않는 결과가 나올 경우, 
OutputFixingParser가 자동으로 형식이 잘못된 출력을 인식하고, 
이를 수정하기 위한 새로운 명령어와 함께 모델에 다시 제출한다는 것이다.
이 과정에서, 수정을 위한 명령어는 오류를 정확히 지적하고,
올바른 형식으로 데이터를 재구성할 수 있도록 구체적인 지시를 포함해야 한다.

예를 들어, PydanticOutputParser를 사용하여 
특정 데이터 스키마를 준수하는 출력을 생성하려고 했지만,
일부 필드가 누락되었거나 데이터 유형이 잘못된 경우가 발생할 수 있다.
이때 OutputFixingParser는 다음 단계로, 
해당 오류를 수정하는 지시를 포함한 새로운 요청을 LLM에 제출한다.
LLM은 이 지시를 바탕으로 오류를 수정한 새로운 출력을 생성하게 된다.

기본 구조

이 코드는 LLM에서 받은 출력값을 원하는 데이터 구조로
변환하기 위해 사용하는 Pydantic 파서 코드이다.

이 파서는 LLM의 출력을 Actor 클래스 형식으로 변환하려고 한다.

  • 자연어 형식의 LLM 출력
  • LLM은 다양한 형태로 출력할 수 있다.

  • Pydantic 파서를 사용하면 내가 원하는 형식으로 출력되게 할 수 있다.

  • 실제 파싱 과정 예시

사용하지 않았을 때

OutputFixingParser 사용시

  • 서로 다른 형태의 LLM 출력값들이 OutputFixingParser를 통해
    모두 동일한 형태로 출력된다.

해결할 수 있는 문제

형식 불일치 문제

필드명 불일치 문제

데이터 타입 불일치 문제

파싱 오류가 생기는 이유

형식 (Format) 불일치

필드명 (Field Name) 불일치

데이터 타입 (Data Type) 불일치

필수 필드 누락

중첩된 데이터 구조의 오류

  • 파싱 오류는 LLM의 출력 특성에서 직접적으로 기인한다.
    LLM이 그렇게 똑똑하다면서 왜 그런 오류를 범할까?

LLM의 특성

LLM의 응답 다양성

창의성

할루시네이션

  • 이러한 LLM의 특성으로 자유도가 높고
    예측 불가능한 출력을 생성하기 때문에,
    이를 정제해주는 OutputFixingParser가 필수적이다.
profile
성문이

0개의 댓글