Agent 통신 패턴
Agent 간 효과적인 정보 교환 방법
주요 통신 패턴
Agent 간 메시지 교환 방식
멀티에이전트 시스템에서 Agent 간 통신 방식은 시스템의 효율성과 확장성에 큰 영향을 미칩니다.
Agent가 특정 Agent에게 직접 메시지를 전송합니다. 가장 단순한 통신 방식.
+ 단순함, 빠른 응답, 명확한 흐름
- 확장성 제한, 결합도 높음
하나의 Agent가 모든 Agent에게 메시지를 전송합니다. 공지나 상태 변경 알림에 적합.
+ 동시 알림, 간단한 구현
- 네트워크 부하, 불필요한 수신
Agent가 관심 있는 토픽을 구독하고, 해당 토픽의 메시지만 수신합니다.
+ 느슨한 결합, 확장성, 효율적
- 복잡한 설정, 메시지 순서 보장 어려움
동기적 통신. 요청을 보내고 응답을 기다립니다. RPC 스타일.
+ 직관적, 디버깅 용이
- 블로킹, 병렬 처리 어려움
모든 Agent가 공유 공간(블랙보드)에 정보를 읽고 씁니다.
+ 전역 상태 공유, 느슨한 결합
- 동시성 관리, 병목 가능성
메시지를 큐에 넣고 Consumer가 순차적으로 처리합니다.
+ 비동기, 부하 분산, 신뢰성
- 인프라 복잡성, 지연 가능
메시지 형식
표준화된 메시지 구조
Agent 간 교환되는 메시지는 표준화된 형식을 따르는 것이 좋습니다.
구조화된 메시지 예시
from pydantic import BaseModel from typing import Optional, Any from datetime import datetime class AgentMessage(BaseModel): # 메시지 식별 message_id: str timestamp: datetime # 발신/수신 정보 sender: str # 발신 Agent ID receiver: str # 수신 Agent ID (또는 "broadcast") # 메시지 유형 msg_type: str # "request", "response", "event", "error" # 내용 content: str # 자연어 메시지 data: Optional[Any] # 구조화된 데이터 # 메타데이터 correlation_id: Optional[str] # 관련 메시지 추적용 priority: int = 0 # 우선순위
상태 공유 방법
Agent 간 공통 상태 관리
멀티에이전트 시스템에서 Agent들은 공통 상태를 공유해야 하는 경우가 많습니다.
LangGraph State 예시
from langgraph.graph import StateGraph from typing import TypedDict, Annotated import operator # 공유 상태 정의 class TeamState(TypedDict): # 메시지 히스토리 (append-only) messages: Annotated[list, operator.add] # 현재 작업 상태 current_task: str task_status: str # 결과물 research_result: str draft: str final_output: str # 다음 실행할 Agent next_agent: str # 각 Agent는 state를 읽고 업데이트된 부분만 반환 def researcher(state: TeamState) -> TeamState: result = do_research(state["current_task"]) return { "research_result": result, "messages": [{"agent": "researcher", "content": result}] }
통신 패턴 비교
상황별 적합한 패턴 선택
| 패턴 | 동기/비동기 | 결합도 | 확장성 | 적합한 경우 |
|---|---|---|---|---|
| Direct Messaging | 동기 | 높음 | 낮음 | 소규모, 단순 협업 |
| Broadcast | 비동기 | 낮음 | 중간 | 상태 변경 알림 |
| Pub-Sub | 비동기 | 낮음 | 높음 | 대규모, 이벤트 기반 |
| Request-Response | 동기 | 중간 | 중간 | RPC 스타일 호출 |
| Blackboard | 비동기 | 낮음 | 중간 | 협업 문제 해결 |
| Message Queue | 비동기 | 낮음 | 높음 | 워크로드 분산, 신뢰성 |
대부분의 멀티에이전트 프레임워크(AutoGen, CrewAI)는 내부적으로 Direct Messaging이나 Blackboard 패턴을 사용합니다. 시스템이 커지면 Pub-Sub이나 Message Queue로 전환을 고려하세요.
참고 자료
Documentation & Guides
핵심 요약
- 통신 패턴: Direct, Broadcast, Pub-Sub, Request-Response, Blackboard, Message Queue
- 메시지 형식: 표준화된 스키마로 일관된 통신 보장
- 상태 공유: Shared Object, Message Passing, External DB, Event Sourcing
- 패턴 선택: 시스템 규모, 결합도, 확장성 요구사항 고려
- 대부분의 프레임워크는 Direct Messaging이나 Blackboard 패턴 사용