ai-orchestration
CHAPTER 50 / 59
읽기 약 2분
FUNCTION
LangChain Expression Language (LCEL) 심화
핵심 개념
체인 파이프라인(|), RunnablePassthrough, RunnableLambda — 다단계 RAG 체인 설계 패턴.
본문
LCEL 핵심 — | 연산자
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_anthropic import ChatAnthropic
prompt = ChatPromptTemplate.from_template("Tell me a joke about {topic}")
model = ChatAnthropic(model="claude-sonnet-4-6")
parser = StrOutputParser()
# 체인 = prompt → model → parser
chain = prompt | model | parser
result = chain.invoke({"topic": "Python"})
print(result)RunnablePassthrough — 입력을 그대로 전달
from langchain_core.runnables import RunnablePassthrough
# 입력에서 일부만 추출
chain = (
{"context": RunnablePassthrough(), "question": RunnablePassthrough()}
| prompt
| model
)
# 사용
chain.invoke({"context": "...", "question": "..."})RunnableLambda — 임의 함수 통합
from langchain_core.runnables import RunnableLambda
def to_uppercase(text: str) -> str:
return text.upper()
# 체인에 함수 삽입
chain = prompt | model | parser | RunnableLambda(to_uppercase)
# 또는 직접
chain = prompt | model | parser | (lambda x: x.upper())다단계 RAG 체인
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser
from langchain_anthropic import ChatAnthropic
from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings
# 1. 벡터 DB
embeddings = OpenAIEmbeddings()
vectorstore = Chroma(embedding_function=embeddings, persist_directory="./db")
retriever = vectorstore.as_retriever(search_kwargs={"k": 4})
# 2. 프롬프트
prompt = ChatPromptTemplate.from_template("""
다음 컨텍스트만 참고해서 답변하세요. 모르면 "모릅니다"라고 답변.
컨텍스트:
{context}
질문: {question}
""")
model = ChatAnthropic(model="claude-sonnet-4-6")
# 3. RAG 체인
def format_docs(docs):
return "\n\n".join(doc.page_content for doc in docs)
rag_chain = (
{"context": retriever | format_docs, "question": RunnablePassthrough()}
| prompt
| model
| StrOutputParser()
)
# 사용
result = rag_chain.invoke("LangChain 시작 방법은?")분기 체인 (RunnableBranch)
from langchain_core.runnables import RunnableBranch
# 입력에 따라 다른 체인 실행
def is_question_about_python(input):
return "python" in input["question"].lower()
python_chain = python_prompt | model | parser
general_chain = general_prompt | model | parser
branched = RunnableBranch(
(is_question_about_python, python_chain),
general_chain, # default
)
result = branched.invoke({"question": "Python list comprehension?"})병렬 실행 (RunnableParallel)
from langchain_core.runnables import RunnableParallel
# 여러 체인을 동시에 실행
parallel = RunnableParallel(
summary=summary_chain,
keywords=keywords_chain,
sentiment=sentiment_chain,
)
result = parallel.invoke({"text": "..."})
# {
# "summary": "...",
# "keywords": [...],
# "sentiment": "positive",
# }
# 직렬보다 3배 빠름다음 챕터
CH.2 "벡터 DB 비교" — Pinecone/Chroma/Weaviate 실전 비교.
AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
무료 모델
Gemini 2.5 Flash(무료) + Claude Sonnet 4.6(무료) + Grok 4.1(무료)
무료 LLM(Gemini Flash)으로 LCEL RAG 체인 만드는 가이드와 비용 0원 구축법을 알려줘.
소자본 모델
Claude API + Cursor $20/mo + Make.com — 월 10~30만원
Claude API + Cursor로 다단계 LCEL 체인을 빠르게 빌드하는 패턴 5가지를 실전 예시로 알려줘.
프로덕션 모델
Claude Opus + CrewAI + LangGraph — 월 100만원+
LangGraph + Claude Opus로 엔터프라이즈 수준 LCEL 체인 + 모니터링 통합 아키텍처를 설계해줘.
스택 프롬프트
0원→$20/mo→$100/mo 단계별 스택 비교
0원/월20만원/월100만원 단계별 LCEL 체인 스택 비교와 ROI를 만들어줘.
⭐ 이것만 기억하세요
LangChain Expression Language (LCEL) 심화는 이 3가지만 확실히 잡으세요
1.LCEL의 | 연산자로 prompt → model → parser 체인을 한 줄로 표현
2.RunnablePassthrough/Lambda/Branch/Parallel — 복잡한 워크플로우 구성 도구
3.다음 챕터 CH.2에서 벡터 DB 3종 비교 — RAG의 저장소 선택
공유하기
진행도 50 / 59