[AI Study] Multi-Agent 시스템 구축하기
여러 AI Agent가 협력하여 복잡한 문제를 해결하는 시스템 만들기
🎯 만들 것
"Multi-Agent 고객 지원 시스템"
기능:
- 자동 문의 분류 (기술/결제/일반)
- 전문 분야별 Agent 자동 배정
- 각 Agent가 전문 지식으로 답변
- 최종 품질 관리 및 답변 정리
- 투명한 처리 과정 표시
🛠️ 기술 스택
- Python 3.11+
- LangChain - AI 워크플로우 프레임워크
- OpenAI API - GPT-4o-mini
- 객체지향 설계 - Agent 클래스 분리
💡 Multi-Agent란?
하나의 Agent vs 여러 Agent:
| 구분 | 단일 Agent | Multi-Agent |
|---|---|---|
| 역할 | 모든 일 처리 | 역할 분담 |
| 전문성 | 평균적 | 높음 |
| 확장성 | 어려움 | 쉬움 |
| 유지보수 | 복잡 | 간단 |
Multi-Agent 처리 흐름:
고객 질문
↓
[접수 Agent] - "어떤 유형의 문의인가?"
↓
┌───────┼───────┐
│ │ │
🔧 💳 📞
기술 결제 일반
│ │ │
└───────┼───────┘
↓
[관리 Agent] - "답변 정리 및 품질 검토"
↓
최종 답변
📦 Step 1. 패키지 설치
1-1 가상환경 활성화
source venv/bin/activate
1-2 패키지 설치
pip install langchain langchain-openai python-dotenv
📂 Step 2. 프로젝트 구조
agent/
└── multi_agent/
├── __init__.py
├── main.py # 실행 파일
├── system.py # 전체 시스템
└── agents/
├── __init__.py
├── classifier.py # 분류 Agent
├── technical.py # 기술 Agent
├── payment.py # 결제 Agent
├── general.py # 일반 Agent
└── supervisor.py # 관리 Agent
💻 Step 3. Agent 구현
3-1. 분류 Agent (agents/classifier.py)
"""접수 Agent - 고객 문의 분류"""
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
class ClassifierAgent:
"""고객 문의를 카테고리별로 분류하는 Agent"""
CATEGORIES = ['technical', 'payment', 'general']
CATEGORY_NAMES = {
'technical': '기술 지원',
'payment': '결제/환불',
'general': '일반 문의'
}
def __init__(self, llm: ChatOpenAI):
self.llm = llm
self.prompt = """당신은 고객 문의 분류 전문가입니다.
다음 카테고리 중 하나로 정확하게 분류하세요:
1. technical - 기술 문제
예: 앱이 안 켜져요, 오류가 나요, 로그인이 안 돼요
2. payment - 결제/환불 문제
예: 환불 받고 싶어요, 결제가 안 돼요, 요금제 변경
3. general - 일반 문의
예: 영업시간, 사용법, 서비스 소개
분류 결과만 답하세요: technical, payment, general 중 정확히 하나만"""
def classify(self, question: str) -> str:
"""문의를 분류합니다."""
response = self.llm.invoke([
SystemMessage(content=self.prompt),
HumanMessage(content=f"고객 질문: {question}")
])
category = response.content.strip().lower()
# 유효성 검사
if category not in self.CATEGORIES:
category = 'general'
return category
def get_category_name(self, category: str) -> str:
"""카테고리의 한글 이름을 반환합니다."""
return self.CATEGORY_NAMES.get(category, category)
3-2. 기술 Agent (agents/technical.py)
"""기술 Agent - 기술 문제 해결"""
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
class TechnicalAgent:
"""기술 문제를 해결하는 전문 Agent"""
def __init__(self, llm: ChatOpenAI):
self.llm = llm
self.prompt = """당신은 기술 지원 전문가입니다.
고객의 기술 문제를 친절하고 명확하게 해결하세요:
1. 문제 상황 파악 및 공감
2. 가능한 원인 분석
3. 해결 방법을 단계별로 제시
- 쉬운 방법부터
- 각 단계를 명확하게
4. 해결 안 되면 추가 지원 안내
답변 형식:
- 친절한 톤
- 전문 용어는 쉽게 설명
- 단계별 번호 사용"""
def solve(self, question: str) -> str:
"""기술 문제를 해결합니다."""
response = self.llm.invoke([
SystemMessage(content=self.prompt),
HumanMessage(content=question)
])
return response.content
3-3. 관리 Agent (agents/supervisor.py)
"""관리 Agent - 최종 답변 정리 및 품질 관리"""
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
class SupervisorAgent:
"""전문가 답변을 검토하고 최종 정리하는 Agent"""
def __init__(self, llm: ChatOpenAI):
self.llm = llm
self.prompt = """당신은 고객 서비스 관리자입니다.
전문가의 답변을 검토하고 최종 정리하세요:
1. 인사말로 시작
2. 핵심 내용을 간결하게 요약
3. 전문가 답변의 주요 포인트 강조
4. 추가 도움 제안
5. 따뜻한 마무리
품질 기준:
- 명확하고 이해하기 쉽게
- 고객 만족도 최우선
- 전문적이면서도 친근하게
- 불필요한 내용 제거"""
def review(self, question: str, specialist_response: str, category: str) -> str:
"""전문가 답변을 검토하고 최종 답변을 작성합니다."""
response = self.llm.invoke([
SystemMessage(content=self.prompt),
HumanMessage(content=f"""
원래 질문: {question}
문의 유형: {category}
전문가 답변:
{specialist_response}
위 내용을 바탕으로 고품질의 최종 답변을 작성해주세요.
""")
])
return response.content
🎮 Step 4. 시스템 통합 (system.py)
"""Multi-Agent 고객 지원 시스템"""
from langchain_openai import ChatOpenAI
import os
from dotenv import load_dotenv
from agents.classifier import ClassifierAgent
from agents.technical import TechnicalAgent
from agents.payment import PaymentAgent
from agents.general import GeneralAgent
from agents.supervisor import SupervisorAgent
load_dotenv()
class CustomerSupportSystem:
"""멀티 에이전트 고객 지원 시스템"""
def __init__(self):
# LLM 초기화 (모든 Agent가 공유)
self.llm = ChatOpenAI(
model="gpt-4o-mini",
api_key=os.getenv("OPENAI_API_KEY"),
temperature=0
)
# 각 Agent 초기화
self.classifier = ClassifierAgent(self.llm)
self.technical_agent = TechnicalAgent(self.llm)
self.payment_agent = PaymentAgent(self.llm)
self.general_agent = GeneralAgent(self.llm)
self.supervisor = SupervisorAgent(self.llm)
print("✅ Multi-Agent 시스템 초기화 완료!")
def process(self, question: str) -> dict:
"""고객 질문을 Multi-Agent 시스템으로 처리합니다."""
print("\n" + "="*70)
print(f"👤 고객 질문: {question}")
print("="*70)
# Step 1: 분류
print("\n🏢 Step 1: 접수 Agent - 문의 분류 중...")
category = self.classifier.classify(question)
category_name = self.classifier.get_category_name(category)
print(f" ✅ 분류 완료: [{category_name}]")
# Step 2: 전문 Agent 처리
print(f"\n🔧 Step 2: 전문 Agent - {category_name} 처리 중...")
if category == "technical":
specialist_response = self.technical_agent.solve(question)
agent_icon = "🔧"
elif category == "payment":
specialist_response = self.payment_agent.solve(question)
agent_icon = "💳"
else:
specialist_response = self.general_agent.solve(question)
agent_icon = "📞"
print(f" ✅ {agent_icon} 전문가 답변 완료")
# Step 3: 최종 정리
print(f"\n👔 Step 3: 관리 Agent - 최종 답변 정리 및 품질 검토 중...")
final_response = self.supervisor.review(question, specialist_response, category)
print(f" ✅ 최종 답변 완성!")
# 최종 결과 출력
print("\n" + "="*70)
print("💬 최종 답변:")
print("="*70)
print(final_response)
print("="*70)
return {
'question': question,
'category': category,
'specialist_response': specialist_response,
'final_response': final_response
}
🚀 Step 5. 실행 및 테스트
5-1 프로그램 실행
python agent/multi_agent/main.py
5-2 예제 테스트
기술 문의 테스트:
============================================================
👥 Multi-Agent 고객 지원 시스템
============================================================
질문: 앱이 자꾸 꺼져요
======================================================================
👤 고객 질문: 앱이 자꾸 꺼져요
======================================================================
🏢 Step 1: 접수 Agent - 문의 분류 중...
✅ 분류 완료: [기술 지원]
🔧 Step 2: 전문 Agent - 기술 지원 처리 중...
✅ 🔧 전문가 답변 완료
👔 Step 3: 관리 Agent - 최종 답변 정리 및 품질 검토 중...
✅ 최종 답변 완성!
======================================================================
💬 최종 답변:
======================================================================
안녕하세요! 앱이 계속 종료되는 문제로 불편을 드려 죄송합니다.
다음 방법을 순서대로 시도해보세요:
1. 앱 완전 종료 후 재시작
2. 캐시 데이터 삭제 (설정 > 앱 > 저장공간 > 캐시 삭제)
3. 앱 업데이트 확인 (최신 버전 설치)
4. 기기 재시작
문제가 계속되면 고객센터(1234-5678)로 연락주세요!
추가 도움이 필요하시면 언제든 문의해주세요. 😊
======================================================================
📊 Multi-Agent의 장점
| 항목 | 설명 |
|---|---|
| 전문성 | 각 Agent가 특정 분야에 특화 |
| 확장성 | 새 Agent 추가 쉬움 |
| 유지보수 | Agent별 독립적 수정 가능 |
| 품질 | 관리 Agent의 최종 검토 |
| 투명성 | 각 단계 과정 표시 |
🎯 핵심 개념 복습
1. Agent 분리
# 각 Agent = 하나의 클래스
ClassifierAgent - 분류 전문
TechnicalAgent - 기술 전문
PaymentAgent - 결제 전문
SupervisorAgent - 품질 관리
→ 역할 분담으로 전문성 향상
2. 파이프라인 구조
질문 → 분류 → 처리 → 검토 → 답변
→ 단계별 처리로 품질 보장
3. LLM 공유
self.llm = ChatOpenAI(...) # 하나만 생성
classifier = ClassifierAgent(self.llm) # 공유
technical = TechnicalAgent(self.llm) # 공유
→ 자원 효율적 사용
✅ 완료 체크리스트
- Multi-Agent 개념 이해
- Agent별 클래스 분리
- 분류 Agent 구현
- 전문 Agent 구현 (기술/결제/일반)
- 관리 Agent 구현
- 시스템 통합
- 테스트 완료
🚀 다음 단계
다음은 LangGraph를 배웁니다!
LangGraph = 복잡한 워크플로우를 그래프로 관리
Multi-Agent:
- Agent들이 협력
- if문으로 분기
LangGraph:
- 상태 관리 자동화
- 그래프로 흐름 제어
- 반복/조건/병렬 처리
반응형
'AI' 카테고리의 다른 글
| [AI Study] 멀티모달(Multimodal) AI (1) | 2026.01.22 |
|---|---|
| [AI Study] LangGraph로 상태 기반 Agent 만들기 (0) | 2026.01.21 |
| [AI Study] LangChain으로 RAG 시스템 구축하기 (0) | 2026.01.19 |
| [AI Study] 랭체인(LangChain)과 RAG, 한 번에 이해하기 (0) | 2026.01.18 |
| [AI Study] Python + OpenAI로 AI 챗봇 만들기 (0) | 2026.01.16 |