LangChain Agents
Source: langchain-agents Type: 공식 문서 (Documentation) By: LangChain Team Valid as of: 2026-04-27
핵심 Takeaway
- Agent = Reasoning Engine + Tool Executor + Memory Loop: LLM이 의사결정 중추이고 도구는 외부 실행, 메시지 상태가 기억을 관리하는 폐쇄 루프 구조
- ReAct 패턴 구현: 에이전트는 reasoning 단계와 action(tool call) 단계를 반복; 단일 모델 호출로 다중 도구 호출 지원
- 정적 vs 동적 구성: 모델·도구·시스템프롬프트를 정적(고정)으로 설정하거나 런타임 조건(복잡도, 역할)에 따라 동적으로 선택 가능
- Middleware 확장성: 상태 전처리, 응답 수정, 도구 오류 처리, 동적 모델 선택, 로깅을 hooks로 자유롭게 삽입 가능
- LangChain SDK의 수렴점:
create_agent()함수와 AgentState 스키마로 프로덕션 에이전트의 boilerplate를 표준화
상세 요약
1. Agent 아키텍처
LangChain Agent는 message-driven loop 구조다. 사용자 입력이 message 상태에 추가되면, 모델이 다음 action을 결정한다.
루프 사이클:
- 사용자 메시지 입력 → Agent 상태에 추가
- 모델이 상태를 읽고 다음 도구 호출 또는 최종 답변 결정
- 도구 실행 → observation을 상태에 추가
- 모델이 새로운 상태를 읽고 재판단
- 반복 (최대 iteration 수 또는 모델이 종료 신호 전송)
이 메커니즘은 ReAct (Reasoning + Acting) 패턴을 자연스럽게 구현한다. 각 사이클에서 모델은 “왜 이 도구를 쓰는가”를 판단하고, 그 결과를 통합해 다음 도구를 선택한다.
2. 핵심 컴포넌트: Model
모델은 reasoning engine이다. LangChain은 두 가지 설정 패턴을 지원한다.
정적 모델 선택
모델을 agent 생성 시점에 고정:
- 문자열로 지정:
"openai:gpt-5.4" - 직접 인스턴스:
ChatAnthropic(model="claude-opus", temperature=0.5)
파라미터 (temperature, max_tokens, timeout 등)를 세밀하게 제어할 수 있다.
동적 모델 선택
런타임 조건에 따라 모델을 변경:
@wrap_model_call데코레이터로 미들웨어 작성- 조건: 대화 복잡도, 메시지 누적 수, 사용자 권한 등
- 효과: 단순 질문은 저가 모델, 복잡 추론은 고가 모델로 자동 라우팅
3. 핵심 컴포넌트: Tools
핵심 원칙: “정확성이 중요하면 LLM이 계산하면 안 된다”
도구는 Python 함수 또는 coroutine이다. LangChain은 @tool 데코레이터로 함수를 자동으로 등록하고, 모델이 도구를 호출할 수 있게 스키마를 생성한다.
정적 도구
agent 생성 시 미리 정의:
tools = [calculator, wikipedia_search, database_query]
agent = create_agent(model, tools)동적 도구
런타임에 도구를 추가/필터링:
- 사용자 권한에 따라 일부 도구 비활성화
- MCP (Model Context Protocol) 서버에서 외부 도구 자동 발견
- 이전 도구 호출 결과에 따라 새로운 도구 등록
도구 호출 전략
- 순차 호출: 첫 도구 결과 후 다음 도구 호출 (기본)
- 병렬 호출: 여러 도구를 동시 실행 (I/O 작업 효율화)
- 조건부 호출: 이전 결과에 따라 도구 선택
- 재시도 로직: 도구 오류 시 자동 재실행
4. 핵심 컴포넌트: System Prompt
시스템 프롬프트는 에이전트 행동 가이드다. LangChain은 다음을 지원한다.
정적 프롬프트
문자열로 고정:
system_prompt = "You are a helpful assistant. Always use tools when needed."
agent = create_agent(model, tools, system_prompt=system_prompt)또는 Anthropic 특화 SystemMessage로 prompt caching 활성화 가능.
동적 프롬프트
@dynamic_prompt 데코레이터로 런타임 프롬프트 생성:
- 사용자 역할에 따른 지시사항 추가 (admin vs user)
- 현재 컨텍스트에 따른 행동 조정
5. 고급 기능
Structured Output (응답 포맷 지정)
에이전트가 반환할 결과를 JSON 스키마로 정의:
- ToolStrategy: 모든 모델에서 작동 (도구 호출 활용)
- ProviderStrategy: 특정 모델 네이티브 지원 (OpenAI structured outputs, Anthropic beta)
Memory (대화 이력 관리)
에이전트는 자동으로 message 상태에서 대화 이력을 유지한다.
커스텀 메모리를 추가하려면 AgentState 스키마 확장:
class CustomState(AgentState):
user_preferences: dict
previous_goals: list[str]
sentiment: str # 사용자 감정 추적Streaming (점진적 결과 표시)
agent.stream(state, stream_mode="values")로 중간 단계 표시:
- 사용자가 에이전트의 사고 과정을 실시간 관찰
- 다중 도구 호출 시 각 호출의 진행상황 노출
Middleware (확장 훅)
LangChain 에이전트는 다양한 지점에 미들웨어를 삽입할 수 있다:
- 모델 호출 전: 상태 전처리, 토큰 수 제한, 조건부 라우팅
- 모델 호출 후: 응답 검증, 환각 감지, 토큰 사용량 로깅
- 도구 오류 처리: 도구 실패 시 재시도, fallback 도구 실행
- 동적 모델 선택: 복잡도 기반 라우팅
- 카스텀 로깅: 감사 추적(audit trail) 기록
6. Agent 호출
에이전트를 실행하는 최소 코드:
agent.invoke({
"messages": [
{
"role": "user",
"content": "What is the capital of France?"
}
]
})이 호출은 메시지를 agent 상태에 추가하고, ReAct 루프를 시작한다. 모델은 필요시 도구를 호출하고, 최종 답변을 생성한다.
연결되는 위키 페이지
- agentic-ai-patterns — 에이전트 설계의 4가지 패턴(Reflection, Tool Use, Routing, Hierarchical)과 LangChain 구현의 대응 관계
- langchain-agents-architecture — 신규 페이지: LangChain 에이전트의 구체적 아키텍처와 프로덕션 패턴
- langchain — 신규 페이지: LangChain 프레임워크 개요, SDK 구성, 생태계