LCEL은 선언형 방식으로 체인을 구성할 수 있게 해주며, 여러 "runnable"들을 파이프 연산자(|) 등을 통해 연결할 수 있습니다. 여기서 runnable은 입력을 받아 변환하거나 처리한 후 출력을 반환하는 독립 실행 단위입니다. LCEL은 이러한 runnable을 조합해 복잡한 체인을 구성할 수 있도록 도와줍니다. 쉽게말해 커스터마이징을 할 수 있다는 이야기입니다. (여담이지만 chain을 구성하는 작업이 약간은 과거의 Tensorflow 1.x 시절의 graph session을 만드는 작업이랑 유사한 측면도 있는 것 같습니다)
1. RunnablePassthrough
입력값을 그대로 통과시킵니다. 체인 내에서 별도의 처리가 필요 없거나, 디버깅 또는 기본 값을 확인할 때 유용합니다.
예를 들어서
prompt = PromptTemplate.from_template("{integer} x 5는?")
llm = ChatOpenAI()
chain = prompt | llm | StrOutputParser()
response = chain.invoke({"integer": 5})
print(response)
위와 같은 코드를 RunnablePassthrough를 이용해서 쓰면 아래와 같이 바꿔쓸 수 있는 것이죠.
prompt = PromptTemplate.from_template("{integer} x 5는?")
llm = ChatOpenAI()
chain = {"integer" : RunnablePassthrough()} | prompt | llm | StrOutputParser()
response = chain.invoke(5)
print(response)
2. RunnableLambda
Python의 람다 함수(또는 일반 함수)를 runnable로 감싸서 체인 내에서 사용할 수 있게 해줍니다. 간단한 변환 작업이나 텍스트 처리, 데이터 포맷 변경 등에 적합합니다.
from langchain_core.runnables import RunnableLambda
# 람다 함수를 이용해 입력을 대문자로 변환하는 runnable 생성
runnable_lambda = RunnableLambda(lambda x: x.upper())
# invoke()를 통해 입력 전달
result = runnable_lambda.invoke("hello world")
print(result) # 출력: "HELLO WORLD"
3. RunnableParallel
여러 runnable을 동시에(병렬로) 실행할 수 있습니다. 입력은 동일하게 전달되며, 각 runnable의 결과는 이름으로 매핑되어 딕셔너리 형태로 반환됩니다. 서로 다른 변환이나 처리를 동시에 적용해야 하는 경우에 유용합니다.
from langchain_core.runnables import RunnableParallel, RunnableLambda
# 두 개의 runnable 생성: 각기 다른 문자열 추가 작업
runnable1 = RunnableLambda(lambda x: x + " from runnable1")
runnable2 = RunnableLambda(lambda x: x + " from runnable2")
# RunnableParallel을 이용해 두 runnable을 병렬 실행
parallel_runnable = RunnableParallel(
runnable1=runnable1,
runnable2=runnable2
)
# 동일한 입력이 두 runnable에 병렬로 전달됨
result = parallel_runnable.invoke("Test")
print(result)
# 출력 예시:
# {
# "runnable1": "Test from runnable1",
# "runnable2": "Test from runnable2"
# }
'Data & Research' 카테고리의 다른 글
[Langchain & Langgraph] Table of Contents (0) | 2025.04.03 |
---|---|
[LLM & RAG] Langchain 기초 - Agent와 Tools (0) | 2025.04.03 |
[LLM & RAG] Langchain 기초 - Memory (0) | 2025.04.03 |
[LLM & RAG] Langchain 기초 - Output Parser (0) | 2025.04.03 |
[LLM & RAG] Langchain 기초 - LLM (0) | 2025.04.03 |