LangChain에서 자주 쓰이는 AgentType 정리 (250819)

WonTerry·2025년 8월 19일

LLM

목록 보기
16/66

복습 : 에이전트 초기화 (initialize_agent)에서,

# 도구 목록
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)

Agent Type

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 서버

차이의 핵심 포인트

1. Zero-shot vs Conversational

  • Zero-shot: 매번 독립적으로 도구 선택 → 과거 대화 맥락 반영 ❌

  • Conversational: 대화 맥락 반영하여 더 자연스럽게 도구 사용 가능 ✅

2. Chat 기반 여부

  • CHAT_ZERO_SHOT_REACT_DESCRIPTION, CONVERSATIONAL_REACT_DESCRIPTION → Chat 모델용

  • ZERO_SHOT_REACT_DESCRIPTION → 일반 LLM(OpenAI text-davinci 등)에도 사용 가능

3. Structured 여부

  • 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: 혼자 질문을 잘게 쪼개서 검색하고 답을 찾는 연구원


각 AgentType 별로 동일한 질문(예: "서울 날씨 어때?")을 했을 때 프롬프트와 응답 흐름이 어떻게 다른지를 시뮬레이션 결과

1️⃣ ZERO_SHOT_REACT_DESCRIPTION

(Zero-shot + ReAct / 도구 설명만 활용)

User: 서울 날씨 어때?
Agent Thought: 사용자가 날씨를 묻고 있다. 날씨 API를 호출해야 한다.
Action: WeatherAPI
Action Input: "Seoul"
Observation: "Seoul, 28°C, 맑음"
Final Answer: 현재 서울은 맑고 28도입니다.

👉 특징: 대화 맥락은 기억하지 않고, 매번 독립적으로 도구를 고름.

2️⃣ CHAT_ZERO_SHOT_REACT_DESCRIPTION

(Chat 모델 기반 Zero-shot ReAct)

User: 서울 날씨 어때?
Agent Thought: 사용자가 날씨를 물어봄 → Chat 모델 기반 ReAct 패턴으로 도구 선택
Action: WeatherAPI
Action Input: "Seoul"
Observation: "Seoul, 28°C, 맑음"
Final Answer: 서울의 현재 기온은 28도이고, 맑은 날씨입니다 ☀️

👉 특징: Chat 모델이라 답변 톤이 더 자연스럽고 대화체.

3️⃣ CONVERSATIONAL_REACT_DESCRIPTION

(대화 맥락 반영)

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도이며, 맑은 하늘입니다.

👉 특징: 질문을 쪼개서 스스로 보조 질문 후 검색 → 정보 검색에 강함.

5️⃣ STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION

(Chat + Zero-shot ReAct + 구조화된 출력)

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 서버, 프론트엔드 연결에 적합.


📝 요약

ZERO_SHOT_REACT_DESCRIPTION

→ 단발성 질문, 도구 설명만 보고 선택.

CHAT_ZERO_SHOT_REACT_DESCRIPTION

→ Chat 모델 기반, 더 자연스러운 답변.

CONVERSATIONAL_REACT_DESCRIPTION

→ 대화 맥락 기억, 비교·연속 질문 대응.

→ 질문 세분화 + 검색, 정보 수집 최적화.

STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION

→ JSON 등 구조화 출력, 시스템 연동에 최적.


profile
Hello, I'm Terry! 👋 Enjoy every moment of your life! 🌱 My current interests are Signal processing, Machine learning, Python, Database, LLM & RAG, MCP & ADK, Multi-Agents, Physical AI, ROS2...

0개의 댓글