Langchain vs OpenAI output object 비교

 

랭체인(LangChain)과 OpenAI의 output_message(출력 메시지) 구조의 차이점은 메시지의 추상화 방식과 데이터 포맷에 있습니다.

1. 메시지 데이터 구조

LangChain

  • 객체 기반: LangChain은 메시지를 Python 객체(BaseMessage 계열 클래스로)로 다루며, 대표적으로 SystemMessageHumanMessageAIMessageToolMessage 등이 있습니다.
  • 여러 chat provider(OpenAI, Anthropic 등)와 호환을 위해 통합 메시지 객체 포맷을 사용합니다.
  • 메시지 객체는 추가 정보를 담을 수 있는 additional_kwargs 등이 있어서, 역할(Role), 내용(Content), 이름(name), 기타 메타데이터까지 표현 가능합니다.

OpenAI

  • 딕셔너리(dict) 기반: OpenAI의 Chat API는 항상 메시지를 Python dictionary로 주고받습니다.
    • 예시: {"role": "user", "content": "Hello"} 같은 구조
    • 역할(systemuserassistant 등)과 내용만 기본적으로 포함되어 있습니다.
  • 함수 호출(Function calling) 시에도 JSON schema에 맞춘 dict/object를 반환하도록 명세합니다. JSON에서는 dict 대신 object라는 용어를 쓰며, OpenAI API에서 반환 데이터는 dict(=object) 형태입니다.

2. 변환 및 출력 메시지 처리

LangChain의 Output 메시지 변환

  • LangChain은 여러 LLM 출력 포맷을 내부적으로 객체로 추상화했다가 필요에 따라 OpenAI 등 vendor에서 요구하는 dict 포맷으로 변환합니다.
    • 예를 들어, convert_to_openai_messages 유틸리티 함수로 메시지 객체 리스트를 OpenAI가 이해하는 딕셔너리 포맷(각 role과 content의 dict 리스트)로 바꿉니다.
  • 메시지 객체를 그대로 출력하거나, 필요 시 dict로 직렬화(serialize)하여 반환할 수 있습니다.

OpenAI의 Output message

  • 입력/출력 모두 기본적으로 dict(혹은 dict의 list)형태입니다.
  • Structured output(함수 호출 등)에서는 명시적으로 JSON object 스키마를 요구하고, 응답 역시 dict형태로 반환됩니다.

3. 실사용 예시 비교

플랫폼입력(message) 형식출력(output_message) 형식
LangChain객체(BaseMessage)객체 혹은 dict (변환 가능)
OpenAIdict(사전)dict(사전)
  • LangChain은 래퍼(Wrapper) 역할, 여러 플랫폼과 유연한 연동을 위해 객체 내부표현과 dict 변환 유틸 모두 제공.
  • OpenAI는 가장 단순하게 dict와 JSON 기반 포맷만 채택.

결론: 주요 차이점

  • LangChain은 메시지를 객체지향적으로 처리하며 다양한 LLM 환경과 벤더에 맞춰 재변환할 수 있는 확장성 중심.
  • OpenAI는 단순 명료하게 dict(JSON object)만 사용하며, 메시지와 출력 모두 딕셔너리 포맷을 기본 전제로 설계됨.

이 차이로 인해 복잡한 워크플로우나 LLM 벤더간 호환이 필요하면 LangChain의 메시지 객체가 더 유리하며, 간단한 API 사용이나 OpenAI 단독이라면 dict 포맷이 직관적입니다.

[펼치기]

댓글