LangChain 체인의 복잡성: 현대 AI 워크플로의 힘을 끌어내기
Updated on
LangChain은 지금도 빠르게 진화하고 있으며, 그중에서도 체인(Chain) 은 가장 핵심적인 개념 중 하나로 남아 있습니다. 이 업데이트된 가이드에서는 2025년 시점에서 LangChain 체인이 실제로 무엇을 의미하는지, 새로운 LCEL (LangChain Expression Language) 을 사용해 어떻게 동작하는지, 그리고 어떻게 신뢰할 수 있는 다단계 AI 애플리케이션을 만드는 데 도움을 주는지 살펴봅니다.
이 글에서는 예제들을 모두 최신 LangChain 표준에 맞게 수정하여, LLMChain 같은 더 이상 권장되지 않는 클래스 대신 Runnables, PromptTemplate, ChatModels, 그리고 순차 파이프라인을 사용합니다.
LangChain이란 무엇인가? (2025 개요)
LangChain은 다음과 같은 요소들을 활용해 AI 애플리케이션을 만들 수 있게 도와주는 강력한 Python/JavaScript 프레임워크입니다:
- Large language models (LLMs)
- Prompt templates
- Memory
- Tools & agents
- Retrieval (RAG)
- Workflow graphs (LangGraph)
LangChain의 가장 상징적인 개념은 바로 체인(Chain) 입니다:
프롬프트, 모델, 도구, 변환, 출력 파서들을 단계별로 통과시키는 재사용 가능하고 합성 가능한 파이프라인.
📘 기초 입문이 필요하다면? LangChain 입문 글을 참고하세요.
LangChain 체인이란?
2023년에는 체인을 주로 LLMChain 과 사용자 정의 Python 클래스로 만들었습니다.
2025년에는 권장 방식이 LCEL로 바뀌었고, 함수형 파이프라인 문법을 사용합니다:
chain = prompt | model | output_parser체인(Chain) 은 단순히 이렇게 이해할 수 있습니다:
- 여러 단계의 시퀀스
- 하나의 호출 가능한 단위로 연결된 구조
- 이전 단계의 출력이 다음 단계의 입력 이 되는 구조
LangChain은 이제 다음과 같은 체인들을 제공합니다:
- Simple Chains (단일 모델 + 프롬프트)
- Sequential Chains (여러 단계가 순차적으로 연결된 체인)
- Parallel Chains (분기형 워크플로)
- Agents (도구를 동적으로 선택하는 체인)
이제 최신 예제들을 통해 살펴보겠습니다.
기본 체인 (2025 버전)
기본 체인은 하나의 프롬프트로 하나의 모델을 호출합니다.
from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
prompt = PromptTemplate.from_template(
"Describe a perfect day in {city}."
)
model = ChatOpenAI(model="gpt-4o-mini")
chain = prompt | model
chain.invoke({"city": "Paris"})내부에서 무슨 일이 일어나나?
- PromptTemplate이
"Describe a perfect day in Paris."로 포맷합니다. - LLM이 해당 설명을 생성합니다.
- 설정에 따라 출력이 ChatMessage 또는 문자열로 반환됩니다.
이것이 현대 LangChain에서 가능한 가장 단순한 형태의 체인입니다.
고급 체인: 다단계 파이프라인
다단계 체인은 여러 작업을 결합합니다.
예시: LCEL을 사용한
요약 → 번역 파이프라인:
from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
summarize_prompt = PromptTemplate.from_template(
"Summarize this text:\n\n{text}"
)
translate_prompt = PromptTemplate.from_template(
"Translate this into Spanish:\n\n{summary}"
)
model = ChatOpenAI(model="gpt-4o-mini")
summarize_chain = summarize_prompt | model
translate_chain = translate_prompt | model
full_chain = summarize_chain | (lambda x: {"summary": x.content}) | translate_chain
full_chain.invoke({"text": "Climate change is causing rapid ocean warming..."})왜 중요한가
이 예제는 최신 LangChain 모범 사례를 잘 보여줍니다:
- 기존 체인 클래스 대신 Runnables 사용
|연산자를 통한 함수형 합성- Python 함수를 이용한 중간 데이터 매핑
LLM 없이 구성하는 체인 (Transform + Clean 파이프라인)
모든 체인에 LLM이 필요하지는 않습니다. 전처리 또는 후처리용 파이프라인도 만들 수 있습니다.
예시: 공백 제거 → 소문자 변환 → LLM에 전달:
def cleanup(text):
return text.strip().lower()
chain = cleanup | model
chain(" WHAT is the WEATHER LIKE? ")입력과 출력을 직렬화할 수 있는 데이터로 주고받기만 하면, 어떤 Python 함수든 체인에 포함시킬 수 있습니다.
Sequential Chains (SimpleSequentialChain 대체)
SimpleSequentialChain 과 SequentialChain 은 더 이상 권장되지 않습니다.
LCEL에서의 대응은 아주 간단합니다:
chain = step1 | step2 | step3예시: 프롬프트 정리 → 다시 쓰기 → 질문에 답하기
from langchain_openai import ChatOpenAI
clean = lambda x: x.strip()
rewrite_prompt = PromptTemplate.from_template(
"Rewrite this more clearly: {text}"
)
answer_prompt = PromptTemplate.from_template(
"Answer this question: {question}"
)
model = ChatOpenAI(model="gpt-4o-mini")
rewrite_chain = rewrite_prompt | model
answer_chain = answer_prompt | model
chain = clean | (lambda x: {"text": x}) | rewrite_chain | (lambda x: {"question": x.content}) | answer_chain
chain.invoke(" What is LangChain used for? ")이 패턴이 SimpleSequentialChain 을 대체하는 현대적인 방식입니다.
LangChain에서 에이전트의 역할 (2025 버전)
에이전트는 LLM이 도구를 동적으로 선택해서 사용하는 기능을 제공합니다:
- 검색 엔진
- 코드 실행
- 계산기
- 다양한 API
- Retrievers
- 커스텀 함수
예시 (최신 문법):
from langchain.agents import AgentExecutor, load_tools, create_react_agent
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o-mini")
tools = load_tools(["llm-math"], llm=llm)
agent = create_react_agent(llm, tools)
executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
executor.invoke({"input": "If I'm half my dad's age and he'll be 60 next year, how old am I?"})에이전트는 다음과 같은 상황에 가장 적합합니다:
- 추론이 필요할 때
- 적절한 도구를 골라야 할 때
- 여러 번의 의사결정 단계가 필요할 때
반대로, 단계가 고정된 작업에는 단순 체인이 더 깔끔합니다.
실전 예시: 영화 추천 워크플로 (업데이트 버전)
기존의 “LLM 두 개를 연결한 체인” 예제를 LCEL로 현대화해 보겠습니다.
1단계 — 사용자에게 장르 질문하기
from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
ask_prompt = PromptTemplate.from_template(
"Ask the user about their favorite movie genres."
)
ask_chain = ask_prompt | ChatOpenAI(model="gpt-4o-mini")2단계 — 영화 추천하기
recommend_prompt = PromptTemplate.from_template(
"Based on these genres: {genres}, recommend 5 movies."
)
recommend_chain = recommend_prompt | ChatOpenAI(model="gpt-4o-mini")두 체인 결합하기
chain = ask_chain | (lambda x: {"genres": x.content}) | recommend_chain
chain.invoke({})메모리 추가하기 (최신 방식)
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory(return_messages=True)
# pipelines can load memory before passing to next step마무리
현대 LangChain(2024–2025)은 LCEL 파이프라인, Runnables, 에이전트를 통해 확장 가능한 AI 워크플로를 그 어느 때보다 쉽게 구축할 수 있게 합니다. 여러분이:
- 텍스트를 전처리하든
- 다단계 워크플로를 만들든
- 다양한 도구를 통합하든
- 동적인 에이전트를 설계하든
LangChain은 이 모든 것을 깔끔하고 신뢰성 있게 연결할 수 있는 빌딩 블록을 제공합니다.
가볍게 실험해 보세요 — 단순한 체인도 금세 강력한 AI 애플리케이션으로 진화할 수 있습니다.
FAQ (업데이트)
-
LangChain이란?
LangChain은 프롬프트, 모델, 도구, 메모리, 워크플로 그래프를 사용해 AI 애플리케이션을 구축하는 프레임워크입니다. -
SimpleSequentialChain은 무엇으로 대체되었나요?
|연산자를 사용하는 LCEL 파이프라인이 순차 처리 방식의 대체제입니다. -
메모리는 어떻게 추가하나요?
ConversationBufferMemory,SummaryMemory또는 직접 구현한 메모리를 체인에 주입해서 사용할 수 있습니다. -
에이전트는 여전히 유용한가요?
네. 도구를 동적으로 선택해야 하는 작업에는 여전히 적합합니다. 단계가 고정된 경우에는 체인이 더 단순하고 명확합니다. -
더 배우려면 어디를 참고해야 하나요?
LangChain 공식 문서나 LangGraph를 참고해 워크플로 기반 에이전트 오케스트레이션을 살펴보세요.