LCEL

LCEL(LangChain Expression Language, 랭체인 표현 언어)은 LangChain 프레임워크 내에서 여러 언어 모델(LLM) 구성 요소를 선언적으로 연결하여 하나의 체인(Chain)으로 구성하기 위해 도입된 기능이다. 파이썬의 파이프 연산자(|)를 활용하여 프롬프트, 언어 모델, 출력 파서(Output Parser) 등의 요소를 유닉스(Unix) 파이프라인처럼 직관적으로 결합한다.

LCEL 시스템은 내부적으로 Runnable 프로토콜을 기반으로 동작한다. LCEL을 사용하여 생성된 모든 객체는 이 프로토콜을 상속받으므로, 코드를 수정하지 않고도 invoke(동기 실행), ainvoke(비동기 실행), stream(스트리밍 반환), batch(다중 입력에 대한 일괄 처리) 등의 표준화된 메서드를 즉시 사용할 수 있다.

과거 LangChain 패키지에서 주로 사용되었던 전통적인 체인 방식(Legacy Chains)과 최신 권장 규격인 LCEL의 차이는 다음과 같다.

특징LCEL (LangChain Expression Language)전통적 체인 (Legacy Chains, 예: LLMChain)
코드 구문prompt | llm | parser 형태의 선언적 구문 사용LLMChain(llm=llm, prompt=prompt) 형태의 클래스 초기화 방식
스트리밍(Streaming)기본적으로 지원되며, 체인의 어느 단계에서든 토큰 출력을 스트리밍으로 전달 가능제어가 어려우며, 별도의 콜백(Callback) 핸들러를 구현해야 함
비동기(Async) 처리ainvoke, astream 등의 메서드를 통해 모든 구성 요소에서 일관되게 비동기 지원객체마다 비동기 지원 여부가 다르거나 불안정함
병렬 실행 및 라우팅RunnableParallel, RunnableBranch 등을 통해 분기 처리 및 복수 작업의 병렬 실행이 용이함복잡한 조건부 분기나 병렬 처리를 위해 직접 커스텀 사용자 코드를 작성해야 함
관측성 및 추적실행 과정의 모든 하위 단계에 대한 추적이 자동화되어 LangSmith 인프라와의 통합이 단순함단일 블랙박스처럼 동작하는 경우가 많아 중간 과정 디버깅이 까다로움

출처 (Sources): * LangChain Documentation, “LangChain Expression Language (LCEL)”. Available at: https://python.langchain.com/docs/concepts/lcel/ * LangChain Documentation, “Runnable interface”. Available at: https://python.langchain.com/docs/concepts/runnables/

Entities