이것은 Agent2Agent (A2A) protocol 기반 숫자 맞추기 게임 예제로, 3개의 가벼운 A2A 에이전트가 어떻게 협력하여 고전적인 숫자 맞추기 게임을 완성하는지 시연합니다. 이 프로젝트는 A2A protocol과 Python SDK의 실용적인 입문 예제로 기능하며, 다음과 같은 특징이 있습니다:
| 에이전트 | 역할 | 기능 |
|---|---|---|
| AgentAlice | 평가자 | 1-100의 비밀 숫자 선택, 추측 평가 및 힌트 제공 |
| AgentBob | CLI 프론트엔드 | 플레이어 추측 중계, Alice의 힌트 표시, Carol과 협상 |
| AgentCarol | 시각화 | 추측 기록의 텍스트 시각화 생성, 요청 시 기록을 무작위 셔플 |
config.py)AGENT_ALICE_PORT = 8001
AGENT_BOB_PORT = 8002
AGENT_CAROL_PORT = 8003
기능: 포트 설정을 중앙 관리하여 포트 충돌 방지. 모든 에이전트가 이 모듈에서 설정을 가져와 포트 할당의 일관성 보장.
agent_Alice.py)핵심 기능:
NumberGuessExecutor 클래스를 구현하여 추측 평가 처리AgentExecutor 인터페이스를 통해 메시지 처리주요 메서드:
execute(): 새로 수신된 메시지 처리, process_guess()를 호출하여 추측 평가cancel(): 지정된 작업 거부응답 유형:
"Go higher" - 추측이 비밀 숫자보다 작음"Go lower" - 추측이 비밀 숫자보다 큼"correct! attempts: <n>" - 추측이 정확함, 시도 횟수 표시agent_Bob.py)핵심 기능:
주요 메서드:
_handle_guess(): 추측을 Alice에게 전달하고 피드백 반환_negotiate_sorted_history(): 기록이 정렬될 때까지 Carol과 협상_visualise_history(): 포맷된 기록 시각화 요청 및 출력play_game(): 대화형 CLI 루프 실행협상 로직:
agent_Carol.py)핵심 기능:
주요 메서드:
_handle_initial(): 새 대화에서 초기 메시지 처리_handle_followup(): 기존 작업을 참조하는 후속 메시지 처리execute(): 메시지 유형에 따라 적절한 핸들러로 디스패치스킬 정의:
history_visualiser: 포맷된 추측 기록 요약 생성history_shuffler: 기록 항목 순서를 무작위 셔플utils/)game_logic.py핵심 기능:
process_guess(): 개별 추측을 평가하고 피드백 반환build_visualisation(): 사람이 읽을 수 있는 기록 렌더링 생성is_sorted_history(): 기록이 추측 값으로 정렬되었는지 확인process_history_payload(): 기록 관련 요청 처리protocol_wrappers.py핵심 기능:
send_text(): 대상 에이전트에 텍스트 메시지 동기 전송send_followup(): 후속 메시지 전송, 대화 컨텍스트 유지cancel_task(): 원격 에이전트에서 작업 취소extract_text(): Task 또는 Message 객체에서 일반 텍스트 추출server.py핵심 기능:
run_agent_blocking(): 블로킹 에이전트 서버 시작graph TD
A[Player] --> B[AgentBob CLI]
B --> C[AgentAlice Evaluator]
B --> D[AgentCarol Visualizer]
C --> E[Secret Number 1-100]
C --> F[Evaluate Guess]
F --> G{Guess Result}
G -->|Too Low| H[Return Go higher]
G -->|Too High| I[Return Go lower]
G -->|Correct| J[Return correct! attempts: N]
B --> K[Game History]
K --> L[Send to Carol for Visualization]
L --> M[Generate Formatted Table]
M --> N[Display to Player]
B --> O[Negotiate Sorting]
O --> P[Send Shuffle Request]
P --> Q[Carol Random Shuffle]
Q --> R{Check if Sorted}
R -->|Not Sorted| S[Send Try again]
R -->|Sorted| T[Send Well done!]
S --> Q
T --> U[Update History]
style A fill:#e1f5fe
style B fill:#f3e5f5
style C fill:#e8f5e8
style D fill:#fff3e0
style E fill:#ffebee
style F fill:#e8f5e8
style K fill:#f3e5f5
style O fill:#f3e5f5
sequenceDiagram
participant Player as Player
participant Bob as AgentBob
participant Alice as AgentAlice
participant Carol as AgentCarol
Note over Player,Carol: Game Start
Player->>Bob: Input guess number
Bob->>Alice: Send guess
Alice->>Bob: Return evaluation result
Bob->>Player: Display hint
Note over Player,Carol: Record History
Bob->>Bob: Add to game history
Note over Player,Carol: Visualize History
Bob->>Carol: Send history records
Carol->>Bob: Return formatted table
Bob->>Player: Display history visualization
Note over Player,Carol: Negotiate Sorting
Bob->>Carol: Send shuffle request
Carol->>Bob: Return shuffled list
Bob->>Bob: Check if sorted
alt Not Sorted
Bob->>Carol: Send "Try again"
Carol->>Bob: Shuffle list again
Bob->>Bob: Recheck sorting
else Sorted
Bob->>Carol: Send "Well done!"
Carol->>Bob: Complete task
Bob->>Bob: Update history
end
Note over Player,Carol: Continue Game or End
alt Guess Correct
Bob->>Player: Display victory message
else Guess Incorrect
Player->>Bob: Continue inputting guesses
end
uv가 설치되어 있는지 확인:
# uv 설치 (아직 설치되지 않은 경우)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 프로젝트 클론
git clone https://github.com/a2aproject/a2a-samples.git
cd a2a-samples/samples/python/agents/number_guessing_game
# uv를 사용하여 가상 환경 생성 및 의존성 설치
uv venv
source .venv/bin/activate # Linux/macOS
# 또는 .venv\Scripts\activate # Windows
# 의존성 설치
uv pip install -r requirements.txt
3개의 터미널 창을 열고 각각에서 가상 환경 활성화:
# 터미널 1 - Alice (평가자) 시작
uv run python agent_Alice.py
# 터미널 2 - Carol (시각화) 시작
uv run python agent_Carol.py
# 터미널 3 - Bob (CLI 프론트엔드) 시작
uv run python agent_Bob.py
Bob의 터미널에서 게임이 1-100 사이의 숫자를 입력하라고 안내합니다. 올바르게 추측할 때까지 Alice의 피드백을 바탕으로 계속 추측하세요.
게임 플로우 예제:
Guess the number AgentAlice chose (1-100)!
Your guess: 50
Alice says: Go higher
=== Carol's visualisation (sorted) ===
Guesses so far:
1. 50 -> Go higher
============================
Your guess: 75
Alice says: Go lower
=== Carol's visualisation (sorted) ===
Guesses so far:
1. 50 -> Go higher
2. 75 -> Go lower
============================
Your guess: 62
Alice says: correct! attempts: 3
You won! Exiting…
A2A Protocol 실습:
모듈러 설계:
오류 처리:
프로젝트 문서에서 언급했듯이 프로덕션 환경에서는:
이 예제는 개발자에게 A2A protocol을 학습하고 실험할 수 있는 안전하고 제어된 환경을 제공하며, 분산 에이전트 시스템 구축의 기본 패턴을 시연합니다.
A2A Samples: Hello World Agent
A2A SDK Currency Agent Tutorial
A2A Python Example: GitHub Agent
A2A Example: Travel Planning Assistant
A2A Inspector: Agent2Agent 통신 디버깅 설명
이러한 케이스 스터디를 통해 간단한 Hello World 예제부터 복잡한 멀티 에이전트 시스템까지 다양한 시나리오에서의 A2A protocol 애플리케이션에 대한 깊은 통찰을 얻을 수 있으며, A2A 개발 여정에 풍부한 참고 자료를 제공합니다.