AI/LangChain
LangChain LCEL 컴포넌트: RunnablePassthrough, RunnableParallel, RunnableLambda
불타는고굼이
2025. 3. 28. 14:48
반응형
LangChain 고급 LCEL 컴포넌트: RunnablePassthrough, RunnableParallel, RunnableLambda
LangChain Expression Language(LCEL)에서는 다양한 Runnable
계열의 유틸리티 클래스들을 제공한다. 이 글에서는 그 중에서도 실무에서 자주 활용되는 RunnablePassthrough
, RunnableParallel
, RunnableLambda
세 가지 컴포넌트를 개별적으로 정리한다.
1. RunnablePassthrough
정의: 입력을 그대로 출력으로 반환하는 가장 단순한 형태의 Runnable
구현체이다.
용도
- 체인 구조 테스트 시 플레이스홀더 역할
- 전처리 또는 후처리를 생략하고 기본 입력값을 유지할 때
- 병렬 실행 시 특정 경로에서 처리가 필요 없는 경우
예제 코드
from langchain.schema.runnable import RunnablePassthrough
passthrough = RunnablePassthrough()
result = passthrough.invoke("LCEL 테스트") # 결과: "LCEL 테스트"
비동기 실행
result = await passthrough.ainvoke("비동기 실행 테스트")
---
2. RunnableParallel
정의: 여러 개의 Runnable
을 병렬로 실행하고 결과를 병합하여 반환하는 구조이다. 입력은 동일하게 전달되며, 결과는 dict
형식으로 구성된다.
용도
- 프롬프트 버전 비교 (A/B 테스트)
- 동일 입력에 대한 멀티 모델 응답 수집
- 다양한 파이프라인 실행 결과의 병렬 처리
예제 코드
from langchain.prompts import PromptTemplate
from langchain.chat_models import ChatOpenAI
from langchain.output_parsers import StrOutputParser
from langchain.schema.runnable import RunnableParallel
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
prompt1 = PromptTemplate.from_template("질문1: {question}")
prompt2 = PromptTemplate.from_template("질문2: {question}")
chain1 = prompt1 | llm | StrOutputParser()
chain2 = prompt2 | llm | StrOutputParser()
parallel = RunnableParallel({
"ver1": chain1,
"ver2": chain2
})
result = parallel.invoke({"question": "LangChain이란?"})
# 결과: {"ver1": "...", "ver2": "..."}
비동기 실행
result = await parallel.ainvoke({"question": "LCEL 비교"})
---
3. RunnableLambda
정의: Python의 람다 함수 또는 커스텀 함수를 Runnable
로 감싸 체인에 삽입할 수 있게 해주는 유틸리티 컴포넌트이다.
용도
- 입력값 전처리 또는 출력값 후처리
- 간단한 수식 계산, 텍스트 포맷 변환
- 조건 분기 및 커스텀 로직 삽입
예제 코드
from langchain.schema.runnable import RunnableLambda
multiply = RunnableLambda(lambda x: x * 10)
result = multiply.invoke(3) # 결과: 30
체인 내 삽입 예시
chain = prompt | RunnableLambda(lambda x: {"prompt": x["question"].upper()}) | llm
비동기 실행
result = await multiply.ainvoke(5)
728x90
반응형