# 도구 목록
tools = []
tools.append(get_korean_stock_price) # 메서드 이름
# 에이전트 초기화
agent = initialize_agent(
tools,
llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True
)
# 에이전트 실행
result = agent.run("삼성전자의 현재 주가를 조회해줘.")
print(result)
LangChain에서 자주 쓰이는 AgentType 들은 이름이 비슷해서 헷갈리기 쉬운데, 기본적으로 ReAct 패턴을 어떻게 구현하느냐, 대화 기록을 어떻게 다루느냐에 따라 구분됩니다.
| AgentType | 특징 | 장점 | 단점 | 사용 사례 |
|---|---|---|---|---|
| ZERO_SHOT_REACT_DESCRIPTION | - ReAct 패턴 기반 - 도구의 description 만 보고 도구 선택- Zero-shot (예시 프롬프트 없음) | - 설정 간단 - 빠르게 시작 가능 | - 도구 설명이 모호하면 잘못 선택 - 예시 기반 학습 부족 | 단순한 계산, 검색 등 소규모 프로젝트 |
| CHAT_ZERO_SHOT_REACT_DESCRIPTION | - 위와 동일하지만 Chat 모델 전용 (예: GPT-3.5/4 Chat) - 대화형 프롬프트 구조 채택 | - Chat 모델의 맥락 이해 능력 활용 가능 | - 여전히 예시 부족 - 도구 설명 의존 | ChatGPT 스타일의 대화 + 툴 호출 |
| CONVERSATIONAL_REACT_DESCRIPTION | - 대화형 ReAct - 대화 기록을 기억해서 도구 선택 | - 멀티턴 대화 지원 - 사용자가 이전에 말한 맥락 반영 | - 프롬프트 길어지면 LLM 비용↑ | FAQ, 챗봇, 상담형 서비스 |
| SELF_ASK_WITH_SEARCH | - 질문을 세분화(Self-Ask) 후 검색 도구 사용 - 복잡한 검색 질의에 강함 | - 정보 검색에 최적화 | - 특정 툴(검색)에 의존 - 유연성 부족 | 검색 기반 QA 시스템 |
| STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION | - Chat 모델 + Zero-shot ReAct - 구조화된 입력/출력 (JSON 같은 schema 기반) | - 안정적 파싱 가능 - 함수 호출 형태와 잘 맞음 | - 초기 세팅 복잡 | 함수 호출, API 연동 MCP 서버 |
Zero-shot: 매번 독립적으로 도구 선택 → 과거 대화 맥락 반영 ❌
Conversational: 대화 맥락 반영하여 더 자연스럽게 도구 사용 가능 ✅
CHAT_ZERO_SHOT_REACT_DESCRIPTION, CONVERSATIONAL_REACT_DESCRIPTION → Chat 모델용
ZERO_SHOT_REACT_DESCRIPTION → 일반 LLM(OpenAI text-davinci 등)에도 사용 가능
STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION → 결과를 JSON 같은 포맷으로 안정적으로 파싱 가능
API 호출이나 MCP 서버 같은 통합 환경에 적합
ZERO_SHOT_REACT_DESCRIPTION: 설명서만 보고 기계 작동시키는 초보 엔지니어
CHAT_ZERO_SHOT_REACT_DESCRIPTION: 설명서만 보고 기계 작동하는데, 옆에서 계속 대화하며 조언받는 엔지니어
CONVERSATIONAL_REACT_DESCRIPTION: 지난번에 무슨 문제 있었는지 기억하면서 계속 개선하는 숙련된 엔지니어
STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION: 작업 보고서를 JSON 포맷으로 딱딱 정리하는 엔지니어
SELF_ASK_WITH_SEARCH: 혼자 질문을 잘게 쪼개서 검색하고 답을 찾는 연구원
User: 서울 날씨 어때?
Agent Thought: 사용자가 날씨를 묻고 있다. 날씨 API를 호출해야 한다.
Action: WeatherAPI
Action Input: "Seoul"
Observation: "Seoul, 28°C, 맑음"
Final Answer: 현재 서울은 맑고 28도입니다.
👉 특징: 대화 맥락은 기억하지 않고, 매번 독립적으로 도구를 고름.
User: 서울 날씨 어때?
Agent Thought: 사용자가 날씨를 물어봄 → Chat 모델 기반 ReAct 패턴으로 도구 선택
Action: WeatherAPI
Action Input: "Seoul"
Observation: "Seoul, 28°C, 맑음"
Final Answer: 서울의 현재 기온은 28도이고, 맑은 날씨입니다 ☀️
👉 특징: Chat 모델이라 답변 톤이 더 자연스럽고 대화체.
User: 어제보다 오늘 서울 날씨가 어때?
Agent Thought: "어제보다" → 과거 대화 맥락 필요
기억: 어제 사용자가 서울 날씨를 물었음.
오늘과 어제 데이터를 비교해야 함.
Action: WeatherAPI
Action Input: "Seoul, today"
Observation: "28°C, 맑음"
Action: WeatherAPI
Action Input: "Seoul, yesterday"
Observation: "26°C, 흐림"
Final Answer: 어제보다 2도 높고, 맑아졌습니다 ☀️
👉 특징: 대화 이력(어제 질문) 을 기억하고 비교까지 수행.
User: 서울 날씨 어때?
Agent Thought:
Step1: "서울의 현재 날씨는 무엇인가?" → Google Search
Step2: 검색 결과를 요약
Action: GoogleSearch
Action Input: "Seoul current weather"
Observation: "Seoul, 28°C, Clear Sky"
Final Answer: 서울의 현재 기온은 28도이며, 맑은 하늘입니다.
👉 특징: 질문을 쪼개서 스스로 보조 질문 후 검색 → 정보 검색에 강함.
User: 서울 날씨 어때?
Agent Thought: 날씨 API 호출 → JSON 포맷으로 응답 구성
Action: WeatherAPI
Action Input: "Seoul"
Observation: "28°C, Clear"
Final Answer (structured JSON):
{
"location": "Seoul",
"temperature": "28",
"condition": "Clear"
}
👉 특징: 결과가 구조화되어 API 연동, MCP 서버, 프론트엔드 연결에 적합.
→ 단발성 질문, 도구 설명만 보고 선택.
→ Chat 모델 기반, 더 자연스러운 답변.
→ 대화 맥락 기억, 비교·연속 질문 대응.
→ 질문 세분화 + 검색, 정보 수집 최적화.
→ JSON 등 구조화 출력, 시스템 연동에 최적.