LCEL

1. 개념

image.png

  • LangChain Expression Language
  • 랭체인의 선언적 표현 방식으로, 프롬프트, 모델, 후처리(파서 포함)를 파이프라인처럼 연결하는 방식을 의미합니다.

2. LCEL 의 목적

  • (1) 체인을 간결하게 만들고 가시성 좋게 한다.
  • (2) 체인 간 조합이 가능하고 확장성을 확보한다.
  • (3) Runnable 을 기반으로 통합한다.

3. 기본 문법

1
2
chain = prompt | model | parser
# 여기서 파이프(`|`)는 앞 단계의 출력을 다음 단계의 입력으로 이어준다.  
  • 위 예시를 풀어보면 다음과 같습니다.
  • (1) 미리 prompt, model, parser를 정의해둡니다.
  • (2) 미리 정의된 promptmodel 에 전달하여 LLM 응답을 받아옵니다.
  • (3) 받아온 응답을 parser에 전달하여 원하는 형식으로 반환 받습니다.

파이프체이닝 : https://whdrns2013.github.io/python/20260131_002_python_pipe_chaining/

4. 기존 방식과의 차이

  • LCEL 이전의 전통적 chain 은 클래스 중심이며, 확장과 조합이 어렵다는 한계가 있었습니다.
1
2
3
4
5
chain = LLMChain(
    llm = model,
    prompt = prompt
    ...
)
  • 반면 LCEL 방식은 표현식 중심이며, 함수형 파이프라인을 지향합니다. 따라서 중간 단계 삽입이 쉽고, 각 부분별로의 수정도 쉬운 편입니다.
1
chain = prompt | model | parser

4. 구성 요소

  • Prompt : 요청할 때 사용되는 프롬프트를 의미합니다.
  • LLM(model) : 추론에 사용할 LLM 모델(또는 모델과 연결하는 클라이언트)입니다.
  • Parser : 모델의 답변을 원하는 형식에 맞게 출력하는 역할을 담당합니다.

5. 실습

  • 가장 기본적인 Prompt, LLM(model), Parser 로 예시를 들어보겠습니다.
  • 각각의 구성요소들은 이어지는 다음 포스팅들에서 자세히 다뤄볼 예정입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate

os.environ["OPENAI_API_KEY"] = "MyAPIKey"
system_template = "당신은 {story}에 나오는 {character_a} 역할입니다. 그 캐릭터에 맞게 사용자와 대화하세요."
human_template = "안녕? 저는 {character_b}입니다. 오늘 시간 괜찮으시면 {activity} 같이 할까요?"
prompt = ChatPromptTemplate([("system", system_template), ("user", human_template)])
model = ChatOpenAI(model="gpt-4o-mini")
parser = StrOutputParser()

chain = prompt | model | parser
result = chain.invoke(
    {"story" : "어벤져스", "character_a" : "타노스", "character_b" : "아이언맨", "activity" : "등산"}
)
print(result)
1
2
3
4
5
6
7
8
안녕, 아이언맨. 네가 그런 제안을  줄은 몰랐군.
그러나 나는 이미 지구의 운명을 손에 쥐고 있는 존재다.
 시간에 내가   있는 것들은 많다.

하지만... 괜찮은 아이디어다.
등산을 통해 내가 자연의 균형을 이루는 방법에 대해 깊이 생각할  있을지도 모르겠다.
네가 준비가 되어 있다면, 같이 가보자.
그리고 네가 우주를 위한 진정한 희생이 무엇인지 깨달을 기회를 줬으면 좋겠다.

Reference

Do it! LLM을 활용한 AI 에이전트 개발 입문 (이성용 저)

Comments