
LangChain은 LLM 애플리케이션 개발을 위한 대표적인 프레임워크로, 최근 v1 업데이트를 통해 구조적 변화를 맞이했습니다. 이번 버전에서는 패키지 네임스페이스가 대폭 간소화되고, create_agent 중심의 새로운 에이전트 구조가 도입되었으며, 기존 체인 기능은 langchain-classic으로 분리되었습니다.
이 글에서는 LangChain v1의 주요 변경사항, 코드 마이그레이션 방법, 그리고 새 구조의 특징과 장점을 정리합니다.
LangChain v1 개요 – 업데이트의 핵심 목적
LangChain v1의 가장 큰 변화는 “단순화(Simplification)”입니다.
그동안 langchain 패키지는 에이전트, 체인, 리트리버, 임베딩 등 다양한 기능이 혼재되어 있었지만, 이제는 핵심 빌딩 블록(agents, messages, tools, embeddings) 중심으로 정리되었습니다.
이제 LangChain은 에이전트 중심 구조로 통합되어, 사용자는 불필요한 모듈 혼잡 없이 핵심 로직에 집중할 수 있습니다.
핵심 변경 요약
1. 패키지 네임스페이스 간소화
기존의 복잡한 모듈 구조가 단순화되어 주요 기능들이 다음과 같이 정리되었습니다.
| 모듈 | 주요 기능 | 비고 |
| langchain.agents | create_agent, AgentState | 에이전트 생성의 중심 |
| langchain.messages | 메시지 타입, trim_messages | langchain-core에서 재출시 |
| langchain.tools | @tool, BaseTool | 핵심 툴 구성 요소 |
| langchain.chat_models | init_chat_model, BaseChatModel | 통합된 모델 초기화 |
| langchain.embeddings | init_embeddings | 임베딩 모델 관리 |
2. langchain-classic 분리
이전 버전의 체인(LLMChain, ConversationChain 등)이나 리트리버, 허브 모듈은 langchain-classic 패키지로 이동했습니다.
기존 코드를 계속 사용하려면 아래와 같이 설치 후 import 경로를 변경해야 합니다.
pip install langchain-classic
예시:
from langchain_classic.chains import LLMChain
from langchain_classic.retrievers import ...
from langchain_classic.indexes import ...
from langchain_classic import hub
create_agent로의 전환: 새로운 에이전트 구조
이전에는 langgraph.prebuilt.create_react_agent를 사용했지만, 이제는 다음과 같이 langchain.agents.create_agent를 사용해야 합니다.
from langgraph.prebuilt import create_react_agent
from langchain.agents import create_agent
주요 변경점
| 항목 | 변경 내용 |
| Import 경로 | langgraph.prebuilt → langchain.agents |
| 함수명 | create_react_agent → create_agent |
| 프롬프트 | prompt → system_prompt 로 변경 |
| Hook | before_model, after_model 메서드를 갖는 middleware로 대체 |
| Custom State | TypedDict 기반으로 변경 |
예시:
from langchain.agents import create_agent
agent = create_agent(
model="anthropic:claude-sonnet-4-5",
tools=[check_weather],
system_prompt="You are a helpful assistant"
)
middleware의 도입: 더 유연해진 에이전트 설계
LangChain v1에서는 hook 방식이 middleware로 대체되었습니다.
이 방식은 모델 호출 전후에 여러 개의 미들웨어를 순차적으로 실행할 수 있게 하여, 확장성과 유지보수성을 높입니다.
1. Dynamic Prompt Middleware
대화 컨텍스트에 따라 시스템 프롬프트를 동적으로 변경할 수 있습니다.
from dataclasses import dataclass
from langchain.agents import create_agent
from langchain.agents.middleware import dynamic_prompt, ModelRequest
from langgraph.runtime import Runtime
@dataclass
class Context:
user_role: str = "user"
@dynamic_prompt
def dynamic_prompt(request: ModelRequest) -> str:
user_role = request.runtime.context.user_role
base_prompt = "You are a helpful assistant."
if user_role == "expert":
prompt = f"{base_prompt} Provide detailed technical responses."
elif user_role == "beginner":
prompt = f"{base_prompt} Explain concepts simply and avoid jargon."
else:
prompt = base_prompt
return prompt
agent = create_agent(
model="openai:gpt-4o",
tools=tools,
middleware=[dynamic_prompt],
context_schema=Context
)
2. Pre-model & Post-model Middleware
before_model과 after_model 메서드를 통해 모델 실행 전후 작업을 수행합니다.
예를 들어, 대화 이력 요약이나 사람 검토(Human in the loop) 기능을 추가할 수 있습니다.
from langchain.agents import create_agent
from langchain.agents.middleware import SummarizationMiddleware, HumanInTheLoopMiddleware
# 요약 미들웨어
agent = create_agent(
model="anthropic:claude-sonnet-4-5",
tools=tools,
middleware=[
SummarizationMiddleware(
model="anthropic:claude-sonnet-4-5",
max_tokens_before_summary=1000
)
]
)
# 사람 검토 미들웨어
agent = create_agent(
model="anthropic:claude-sonnet-4-5",
tools=[read_email, send_email],
middleware=[HumanInTheLoopMiddleware(
interrupt_on={
"send_email": True,
"description": "Please review this email before sending"
},
)]
)
Custom State: 상태 확장 방식의 변화
이제 모든 state는 TypedDict 형태를 기반으로 합니다.
state_schema 또는 middleware에서 상태를 정의할 수 있습니다.
from langchain.tools import tool, ToolRuntime
from langchain.agents import create_agent, AgentState
class CustomState(AgentState):
user_name: str
@tool
def greet(runtime: ToolRuntime[CustomState]) -> str:
"""Use this to greet the user by name."""
user_name = runtime.state.get("user_name", "Unknown")
return f"Hello {user_name}!"
agent = create_agent(
model="anthropic:claude-sonnet-4-5",
tools=[greet],
state_schema=CustomState
)
Dynamic Model 선택
v1에서는 미들웨어를 통해 런타임 상황에 따라 모델을 다르게 선택할 수 있습니다.
from langchain.agents import create_agent
from langchain.agents.middleware import AgentMiddleware, ModelRequest, ModelRequestHandler
from langchain.messages import AIMessage
from langchain_openai import ChatOpenAI
basic_model = ChatOpenAI(model="gpt-5-nano")
advanced_model = ChatOpenAI(model="gpt-5")
class DynamicModelMiddleware(AgentMiddleware):
def wrap_model_call(self, request: ModelRequest, handler: ModelRequestHandler) -> AIMessage:
if len(request.state.messages) > self.messages_threshold:
model = advanced_model
else:
model = basic_model
return handler(request.replace(model=model))
def __init__(self, messages_threshold: int) -> None:
self.messages_threshold = messages_threshold
agent = create_agent(
model=basic_model,
tools=tools,
middleware=[DynamicModelMiddleware(messages_threshold=10)]
)
기타 주요 변경사항
- Python 3.9 지원 종료: 이제 Python 3.10 이상이 필요합니다.
- .text() → .text 속성 변경: 메시지의 텍스트 접근 방식이 메서드에서 속성으로 바뀌었습니다.
- Structured Output 개선: 인공적인 툴 호출(ToolStrategy)이나 제공자 네이티브 출력(ProviderStrategy)을 활용합니다.
- content_blocks 도입: 멀티모달 콘텐츠를 표준화된 블록 형태로 관리합니다.
마이그레이션 가이드라인 요약
- 패키지 구조 정리
- langchain-classic을 설치하여 기존 체인 및 리트리버 기능을 유지
- 새로운 기능은 langchain.agents 중심으로 재작성
- 에이전트 전환
- create_react_agent → create_agent로 교체
- prompt 파라미터를 system_prompt로 수정
- middleware 적용
- before_model, after_model 로직을 middleware로 이관
- 필요한 기능별로 별도 미들웨어 작성
LangChain v1이 의미하는 변화
LangChain v1은 단순한 업데이트가 아니라 구조적 혁신에 가깝습니다.
패키지가 간결해졌고, 에이전트 중심으로 통합되었으며, middleware를 통해 확장성과 유지보수성이 크게 향상되었습니다.
기존 사용자에게는 일부 import 수정과 코드 리팩토링이 필요하지만, 한 번 정리하고 나면 훨씬 명확하고 일관된 개발 환경을 경험할 수 있습니다.
지금이 바로 LangChain v1으로 전환할 최적의 시점입니다.
https://docs.langchain.com/oss/python/migrate/langchain-v1
LangChain v1 migration guide - Docs by LangChain
This guide outlines the major changes between LangChain v1 and previous versions. Simplified package The langchain package namespace has been significantly reduced in v1 to focus on essential building blocks for agents. The streamlined package makes it eas
docs.langchain.com

'인공지능' 카테고리의 다른 글
| Agentic Context Engineering: AI 에이전트의 자율 학습을 실현하는 새로운 패러다임 (0) | 2025.10.28 |
|---|---|
| Excel, 이제 AI가 진짜로 이해한다: Claude for Excel 완전 분석 (0) | 2025.10.28 |
| AI가 세상을 상상하고 예측한다: 월드 파운데이션 모델(WFM)의 시대 (0) | 2025.10.28 |
| MiniMax-M2: 작지만 강력한 오픈소스 AI 모델의 탄생― 효율성과 성능을 모두 잡은 차세대 MoE 기반 모델 (0) | 2025.10.27 |
| AI 시대의 개발자 법칙: 인간과 에이전트가 함께 만드는 새로운 개발 패러다임 (0) | 2025.10.27 |