본문 바로가기

인공지능

LangChain Expression Language(LCEL)과 Runnable의 강력한 활용 방법: 더 간결하고 효율적인 코드 작성하기

728x90
반응형

LCEL이란 무엇인가?

LCEL(LangChain Expression Language)은 LangChain에서 체인을 보다 쉽게 구성할 수 있도록 도와주는 선언적 언어입니다. 이를 통해 복잡한 체인을 단순하고 명료하게 작성할 수 있으며, 특히 프로덕션 환경에서 빠르게 프로토타입을 구축하고 배포하는 데 유용합니다. LCEL은 동기 및 비동기 실행을 지원하며, 코드 병렬화를 쉽게 처리할 수 있도록 설계되어 성능 최적화에 강력한 도구가 됩니다​​.

LCEL이 중요한 이유

LCEL은 코드의 간결성과 가독성을 크게 개선합니다. 기존 체인 설정 방식과 달리, LCEL을 사용하면 명령어 흐름을 하나의 파이프라인처럼 작성할 수 있기 때문에 더 직관적인 코드를 작성할 수 있습니다. 이로 인해 팀 간 협업 시 코드 이해도가 높아지고, 유지 보수가 쉬워집니다. 또한 LCEL은 비동기병렬 처리를 기본적으로 지원하여 복잡한 워크플로우를 효율적으로 실행할 수 있습니다​​.

반응형

LCEL의 장점 요약

  1. 간결한 코드 작성: 선언적 방식으로 체인을 구성해 코드가 직관적이며 간결합니다.
  2. 가독성 향상: 흐름이 명확하여 누구나 쉽게 이해할 수 있습니다.
  3. 병렬 처리 및 비동기 지원: 체인의 성능을 극대화할 수 있습니다.
  4. 프로덕션 환경 적합: 프로토타입에서 프로덕션까지 코드 변환 없이 바로 사용 가능합니다​​.

LCEL 사용 예제

다음은 간단한 LCEL 체인 예제입니다. 이 예제는 특정 질문을 입력받아 답변을 생성하는 체인을 보여줍니다.

from langchain.prompts import ChatPromptTemplate
from langchain_community.chat_models import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser

# 프롬프트 템플릿과 모델 설정
prompt = ChatPromptTemplate.from_template("어떤 질문을 하고 싶은가요?")
model = ChatOpenAI()
parser = StrOutputParser()

# LCEL 체인을 생성
chain = prompt | model | parser

# 체인을 실행
chain.invoke({"question": "LCEL은 무엇인가요?"})

Runnable의 소개

LangChain에서 Runnable은 입력을 받아서 처리를 수행한 후, 다음 컴포넌트로 전달하는 개체입니다. Runnable을 통해 다양한 체인 구성 요소를 쉽게 연결할 수 있으며, 데이터 변환, 추가 처리 등을 할 수 있습니다​. Runnable에는 다양한 형태가 있으며, 주로 RunnablePassthrough, RunnableParallel, RunnableLambda가 사용됩니다.

1. RunnablePassthrough

RunnablePassthrough는 입력을 그대로 전달하거나, 추가적인 필드를 더해 전달하는 역할을 합니다. 주로 데이터 구조를 변환하거나 다른 컴포넌트에 데이터를 전달할 때 사용됩니다​​.

from langchain_core.runnables import RunnablePassthrough

# 입력 그대로 전달
passthrough = RunnablePassthrough()
result = passthrough.invoke({"num": 5})
print(result)  # {'num': 5}

2. RunnableParallel

RunnableParallel은 여러 컴포넌트를 병렬로 실행하여 각각의 결과를 결합하는 기능을 제공합니다. 이 기능을 통해 여러 처리 단계를 동시에 실행할 수 있습니다​.

from langchain_core.runnables import RunnableParallel
from langchain_community.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate

# 두 개의 체인을 병렬로 실행
prompt1 = ChatPromptTemplate.from_template("주제 {topic}에 대해 농담을 만들어 주세요")
prompt2 = ChatPromptTemplate.from_template("{topic}에 대해 2줄 시를 지어 주세요")
model = ChatOpenAI()

parallel_chain = RunnableParallel(joke=prompt1 | model, poem=prompt2 | model)
result = parallel_chain.invoke({"topic": "고양이"})
print(result)

3. RunnableLambda

RunnableLambda는 사용자 정의 처리를 위해 함수를 직접 작성하여 사용할 수 있는 기능입니다. 복잡한 로직을 처리하거나 기존 기능을 확장하는 데 유용합니다​​.

from langchain_core.runnables import RunnableLambda

# 람다 함수를 이용한 처리
lambda_runnable = RunnableLambda(lambda x: x["num"] * 2)
result = lambda_runnable.invoke({"num": 5})
print(result)  # 10
728x90

LCEL과 Runnable을 활용하면 LangChain에서 효율적이고 직관적인 체인을 작성할 수 있습니다. 복잡한 워크플로우도 쉽게 관리할 수 있으며, 가독성과 성능을 동시에 잡을 수 있습니다. 이를 통해 더 나은 애플리케이션을 개발할 수 있을 것입니다.

728x90
반응형