반응형
LCEL (LangChain Expression Language): 선언형 LangChain 구성 방식
LCEL(LangChain Expression Language)은 LangChain의 컴포넌트들을 함수형으로 연결할 수 있도록 지원하는 선언적 표현 방식이다. LangChain v0.1 이후부터 공식 도입되었으며, 체인 구성 시 가독성과 재사용성을 높이고, 실행 흐름의 추적 및 디버깅을 용이하게 한다.
LCEL 도입 배경
- 기존 LangChain 구성 방식은 Imperative(명령형) 스타일로 가독성이 떨어지는 경우가 많았다.
- 체인(Chain) 간 연결 구조를 함수형으로 선언할 수 있는 방식을 제공하여 코드의 명확성과 유지보수성을 개선했다.
- LangSmith와의 통합을 통해 실행 흐름 추적도 자연스럽게 가능해졌다.
기본 개념
- 각 LangChain 컴포넌트(Prompt, LLM, Output Parser 등)를 파이프라인처럼 연결한다.
|
또는invoke()
메서드를 사용하여 순차적으로 연결한다.- 전체 체인을 하나의 구성 요소처럼 재사용할 수 있다.
LCEL 구성 요소
- PromptTemplate: 입력값을 포맷팅하는 역할
- LLM: 대형 언어 모델 호출
- OutputParser: 모델 응답을 구조화된 형태로 파싱
- Runnable: 위 구성 요소들을 실행 가능한 체인으로 연결
LCEL 코드 예제
from langchain.prompts import PromptTemplate
from langchain.chat_models import ChatOpenAI
from langchain.output_parsers import StrOutputParser
# 1. 컴포넌트 정의
prompt = PromptTemplate.from_template("Q: {question}\nA:")
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
parser = StrOutputParser()
# 2. LCEL 방식으로 체인 연결
chain = prompt | llm | parser
# 3. 실행
result = chain.invoke({"question": "LangChain Expression Language란?"})
파이프라인 구성 방식
LCEL에서는 체인 연결 시 각 컴포넌트가 Runnable 형태를 갖는다. 입력 → 프롬프트 → LLM → 파서 → 출력 형태로 파이프라인을 형성한다.
예시 구조:
[dict] → PromptTemplate → ChatOpenAI → OutputParser → [str]
invoke, stream, batch 메서드
LCEL은 다양한 실행 메서드를 제공한다.
invoke(input)
: 단일 입력 실행batch(inputs)
: 다중 입력 동시 실행stream(input)
: 토큰 스트리밍 응답 처리
LCEL의 장점
- 체인 구성을 선언형으로 표현 가능
- 코드 간결화 및 가독성 향상
- 실행 흐름 재사용성 증가
- LangSmith와의 통합 시 추적 용이
주의 사항
- 모든 LangChain 구성 요소가 LCEL을 완벽히 지원하는 것은 아니다
- Legacy 방식과 혼용 시 실행 방식이 달라질 수 있으므로 주의 필요
- LCEL에서 사용되는 각 컴포넌트는
Runnable
을 구현해야 연결 가능
반응형
'AI > LangChain' 카테고리의 다른 글
LangChain 프롬프트 구성: Partial Variables 및 load_prompt 사용법 (0) | 2025.03.28 |
---|---|
LangChain LCEL 컴포넌트: RunnablePassthrough, RunnableParallel, RunnableLambda (0) | 2025.03.28 |
LCEL 인터페이스 정리: Runnable 구조와 주요 메서드 (0) | 2025.03.28 |
LangSmith: LangChain 기반 애플리케이션의 디버깅 및 추적 도구 (0) | 2025.03.28 |
LangChain: LLM 기반 애플리케이션 프레임워크 (1) | 2025.03.28 |