랭체인(LangChain)과 OpenAI의 output_message(출력 메시지) 구조의 차이점은 메시지의 추상화 방식과 데이터 포맷에 있습니다.
1. 메시지 데이터 구조
LangChain
- 객체 기반: LangChain은 메시지를 Python 객체(BaseMessage 계열 클래스로)로 다루며, 대표적으로
SystemMessage,HumanMessage,AIMessage,ToolMessage등이 있습니다. - 여러 chat provider(OpenAI, Anthropic 등)와 호환을 위해 통합 메시지 객체 포맷을 사용합니다.
- 메시지 객체는 추가 정보를 담을 수 있는
additional_kwargs등이 있어서, 역할(Role), 내용(Content), 이름(name), 기타 메타데이터까지 표현 가능합니다.
OpenAI
- 딕셔너리(dict) 기반: OpenAI의 Chat API는 항상 메시지를 Python dictionary로 주고받습니다.
- 예시:
{"role": "user", "content": "Hello"}같은 구조 - 역할(
system,user,assistant등)과 내용만 기본적으로 포함되어 있습니다.
- 예시:
- 함수 호출(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 (변환 가능) |
| OpenAI | dict(사전) | dict(사전) |
- LangChain은 래퍼(Wrapper) 역할, 여러 플랫폼과 유연한 연동을 위해 객체 내부표현과 dict 변환 유틸 모두 제공.
- OpenAI는 가장 단순하게 dict와 JSON 기반 포맷만 채택.
결론: 주요 차이점
- LangChain은 메시지를 객체지향적으로 처리하며 다양한 LLM 환경과 벤더에 맞춰 재변환할 수 있는 확장성 중심.
- OpenAI는 단순 명료하게 dict(JSON object)만 사용하며, 메시지와 출력 모두 딕셔너리 포맷을 기본 전제로 설계됨.
이 차이로 인해 복잡한 워크플로우나 LLM 벤더간 호환이 필요하면 LangChain의 메시지 객체가 더 유리하며, 간단한 API 사용이나 OpenAI 단독이라면 dict 포맷이 직관적입니다.
[펼치기]
댓글
댓글 쓰기