LangChain에서 체인을 만들 수 있는 문법이다.
LCEL로 만든 체인은 Runnable 인터페이스를 따른다.
병렬 실행 최적화: RunnableParallel 클래스를 사용해 여러 Runnable을 동시에 실행 가능(병렬 실행)하고, Runnable Batch API로 많은 요청을 동시에 처리할 수 있음. 이를 통해 지연시간이 크게 줄어듬.
비동기 실행 지원: 많은 요청을 동시에 처리해야 하는 서버 환경에서 체인을 실행할 때 유용하다. 서버 환경에서 Runnable Async API로 많은 요청을 동시에 처리할 수 있음.
스트리밍 단순화: 출력 결과를 실시간 스트리밍 가능. 첫 번째 토큰까지의 시간을 최소화
LangSmith 연동: 디버깅 및 추적이 쉬워짐
표준화 API: Runnable 인터페이스를 따르기 때문에 호환성이 좋음
LangServe 배포: LCEL 체인을 배포할 수 있음
Runnable
LangChain의 Runnable은 사용자 정의 체인을 생성하고 관리할 수 있는 프로토콜이다.
Runnable 주요 메서드

Chain = prompt | model
'|' 연산자는 서로 다른 구성 요소를 연결하고 한 구성 요소의 출력을 다음 구성 요소의 입력으로 전달한다.
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
# template 정의
template = "{subject}의 개념에 대해 20글자 이내로 설명하세요."
# Prompt를 PromptTemplate 객체로 생성
prompt = PromptTemplate.from_template(template)
model = ChatOpenAI(
model = "gpt-4.1-nano",
temperature = 0.1
)
# Chain 생성
chain = prompt | model
# 호출
input = {"subject": "LCEL"}
chain.invoke(input)

호출 결과 LLM이 헛소리하는 환각(Hallucination) 발생
LCEL을 저전력 연산 기술이라고 설명했다.
AIMessage 객체 없이 content만 문자열로 출력하기 위해
출력파서(Output Parser)를 연결
# 출력파서(Output Parser)
from langchain_core.output_parsers import StrOutputParser
# 문자열 출력 파서를 초기화
output_parser = StrOutputParser()
Runnable 주요 메서드 중에 stream()이 있다.
호출 결과를 토큰 단위로 출력하는 스트리밍 코드를 작성해봤다.
# template 정의
template = """
당신은 금융 용어를 쉽게 설명해주는 선생님입니다.
주어진 용어를 초등학생도 이해하기 쉽게 설명해주세요.
답변 형식은 <FORMAT>을 참고하세요.
# 질문
{question}
# FORMAT
용어:
설명:
"""
# template을 PromptTemplate 객체로 생성
prompt = PromptTemplate.from_template(template)
model = ChatOpenAI(
model_name = "gpt-4.1-nano",
temperature = 0.1,
streaming = True #stream 설정
)
# Chain 생성
chain = prompt | model | output_parser
# 스트리밍 출력을 위한 요청
stream_answer = chain.stream({"question": "손해율"})
final_answer = ""
# 스트리밍 출력
for token in stream_answer:
print(token, end = "", flush = True)
final_answer += token
LangSmith 추적 Trace

LLM에게 금융 용어인 손해율에 대해 이해하기 쉽게 설명해달라고 요청해봤다.
손해율이란 보험사의 수입인 보험료에서 보험금 지급액이 차지하는 비율을 뜻한다.
답변 상태를 보니 금융 분야는 파인튜닝이 필수인 것 같다.

입력 토큰으로 94, 답변 생성하는데 173개 토큰 사용
답변 생성하는데 2.33초 걸림

중간에 input만 있고, output은 null값이 보이는데
스트리밍 코드를 잘못 짜서 다시 작성했는데, 잘못 작성한 코드로 인해
호출이 여러 번 이어진 것 같다. 맙소사 내 $...
오늘 저녁 테디노트 특강(주주총회)이었는데, 깜빡잊고 놓쳤다.
특강 내용이 궁금한데 녹화본이라도 뿌려주면 좋겠는데
그런 건 없는 것 같다.