
A2A (Agent2Agent) 프로토콜은 AI 에이전트들이 구조화된 방식으로 서로 통신할 수 있는 표준화된 접근 방식을 나타냅니다. AI 시스템이 더욱 복잡하고 상호 연결됨에 따라, 이러한 통신을 디버깅, 검사 및 검증할 수 있는 강력한 도구를 갖는 것이 중요해집니다. 이 글은 개발자가 A2A 에이전트 상호작용을 이해하고 문제를 해결하는 데 도움이 되도록 설계된 웹 기반 디버깅 도구인 A2A Inspector의 아키텍처와 구현을 탐구합니다.
A2A Inspector는 개발자가 다음을 수행할 수 있게 해주는 포괄적인 웹 도구입니다:
이 도구는 복잡한 에이전트 통신과 개발자 이해 사이의 격차를 메우며, 이전에는 에이전트 간 상호작용의 블랙박스였던 것에 대한 가시성을 제공합니다.
인스펙터는 현대적인 3계층 아키텍처를 따릅니다:
연결 프로세스는 에이전트 카드 발견 메커니즘으로 시작됩니다:
# backend/app.py에서
async with httpx.AsyncClient(timeout=30.0) as client:
card_resolver = A2ACardResolver(client, agent_url)
card = await card_resolver.get_agent_card()
시스템은 잘 알려진 엔드포인트 /.well-known/agent-card에서 에이전트 카드를 가져오며, 이는 에이전트의 기능, 지원되는 입력/출력 모드, 사용 가능한 기술에 대한 필수 메타데이터를 제공합니다.
인스펙터의 주요 기능 중 하나는 포괄적인 검증 시스템입니다. validators.py 모듈은 다음에 대한 엄격한 검사를 구현합니다:
에이전트 카드 검증:
name, description, url, version 등)메시지 검증:
task, status-update, artifact-update, message)def validate_message(data: dict[str, Any]) -> list[str]:
"""종류에 따라 에이전트로부터 들어오는 메시지를 검증합니다."""
if 'kind' not in data:
return ["에이전트의 응답에 필수 'kind' 필드가 없습니다."]
kind = data.get('kind')
validators = {
'task': _validate_task,
'status-update': _validate_status_update,
'artifact-update': _validate_artifact_update,
'message': _validate_message,
}
validator = validators.get(str(kind))
if validator:
return validator(data)
return [f"알 수 없는 메시지 종류를 받았습니다: '{kind}'."]
인스펙터는 양방향 통신을 위해 Socket.IO를 사용하여 실시간 메시지 교환과 디버깅을 가능하게 합니다:
연결 관리:
# 클라이언트 세션을 위한 전역 상태 관리
clients: dict[str, tuple[httpx.AsyncClient, A2AClient, AgentCard]] = {}
@sio.on('initialize_client')
async def handle_initialize_client(sid: str, data: dict[str, Any]) -> None:
"""세션을 위한 A2A 클라이언트 연결을 초기화합니다."""
# 나중에 사용하기 위해 세션 ID와 함께 클라이언트 연결 저장
메시지 프록시:
백엔드는 지능형 프록시 역할을 하여 사용자 메시지를 A2A 에이전트로 전달하면서 포괄적인 로깅과 검증을 제공합니다:
@sio.on('send_message')
async def handle_send_message(sid: str, json_data: dict[str, Any]) -> None:
"""검증과 디버깅을 통한 메시지 전송을 처리합니다."""
# A2A 에이전트로 메시지 전달
# 프로토콜에 대해 응답 검증
# 디버그 로그와 형식화된 응답 방출
TypeScript 프론트엔드는 여러 관심사를 동시에 관리합니다:
소켓 이벤트 처리:
socket.on('agent_response', (event: AgentResponseEvent) => {
const messageId = `msg-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
messageJsonStore[messageId] = event;
const validationErrors = event.validation_errors || [];
if (event.error) {
appendMessage('agent error', `[error] 오류: ${event.error}`, messageId, false, validationErrors);
return;
}
// 다양한 메시지 타입 처리: task, status-update, artifact-update, message
});
디버그 콘솔 통합:
인스펙터는 원시 JSON-RPC 통신을 보여주는 크기 조절 가능한 디버그 콘솔을 제공하여 개발자가 정확한 프로토콜 교환을 이해할 수 있게 합니다.
다음 시퀀스 다이어그램은 완전한 통신 흐름을 보여줍니다:
sequenceDiagram
participant User as 사용자
participant Frontend as 프론트엔드 (TypeScript)
participant Backend as 백엔드 (FastAPI)
participant A2AAgent as A2A 에이전트 서버
User->>Frontend: 에이전트 URL 입력 및 연결 클릭
Frontend->>Backend: POST /agent-card (URL과 socket ID 포함)
Backend->>A2AAgent: HTTP GET /.well-known/agent-card
A2AAgent-->>Backend: 에이전트 카드 JSON
Backend->>Backend: 에이전트 카드 검증
Backend-->>Frontend: 에이전트 카드 + 검증 결과
Frontend->>Frontend: 에이전트 카드 표시
Frontend->>Backend: Socket.IO: initialize_client
Backend->>A2AAgent: A2A 클라이언트 연결 초기화
Backend-->>Frontend: Socket.IO: client_initialized
User->>Frontend: 메시지 입력 및 전송
Frontend->>Backend: Socket.IO: send_message
Backend->>A2AAgent: JSON-RPC 2.0: sendMessage
A2AAgent-->>Backend: JSON-RPC 응답 (작업/메시지/등)
Backend->>Backend: 응답 검증
Backend-->>Frontend: Socket.IO: agent_response + debug_log
Frontend->>Frontend: 메시지 및 검증 결과 표시
Note over Backend,A2AAgent: 실시간 양방향 통신
Note over Frontend,Backend: 실시간 업데이트를 위한 WebSocket
각 클라이언트 연결은 Socket.IO 세션 ID를 통해 관리되어 여러 동시 디버깅 세션이 서로 간섭 없이 가능합니다.
모든 JSON-RPC 상호작용은 타임스탬프와 검증 결과와 함께 로그되어 에이전트 통신의 완전한 추적 가능성을 제공합니다.
시스템은 네트워크 오류, 프로토콜 위반, 에이전트 실패를 우아하게 처리하여 개발자에게 의미 있는 피드백을 제공합니다.
모든 에이전트 응답은 A2A 사양에 대해 실시간으로 검증되어 프로토콜 준수 문제를 즉시 강조 표시합니다.
git clone https://github.com/google-a2a/a2a-inspector.git
cd a2a-inspector
uv sync
cd frontend && npm install && cd ..
# 터미널 1: 프론트엔드 빌드 프로세스
cd frontend && npm run build -- --watch
# 터미널 2: 백엔드 서버
cd backend && uv run app.py
http://127.0.0.1:5001로 이동합니다.에이전트에 연결: A2A 에이전트의 기본 URL을 입력합니다 (예: http://localhost:5555)
에이전트 카드 검사: 자동으로 가져온 에이전트 기능을 검토하고 검증 오류를 확인합니다
디버깅 시작: 채팅 인터페이스를 사용하여 메시지를 보내고 에이전트 응답을 관찰합니다
프로토콜 준수 모니터링: 각 메시지 교환에 대한 검증 결과를 확인합니다
원시 통신 분석: 디버그 콘솔을 사용하여 JSON-RPC 메시지를 검사합니다
크기 조절 가능한 디버그 콘솔은 다음에 대한 실시간 접근을 제공합니다:
내장 검증 엔진은 다음을 확인합니다:
인스펙터는 여러 에이전트와의 동시 연결을 유지할 수 있으며, 각각은 별도의 브라우저 탭이나 세션에서 작동합니다.
A2A Inspector는 에이전트 간 통신을 투명하고 디버깅 가능하게 만드는 데 있어 중요한 진전을 나타냅니다. 실시간 검증, 포괄적인 로깅, 직관적인 인터페이스를 제공함으로써 개발자가 더 강력하고 준수하는 A2A 시스템을 구축할 수 있게 해줍니다.
이 도구의 아키텍처는 현대적인 프론트엔드 기술과 강력한 백엔드 검증을 결합하여 실시간 웹 애플리케이션의 모범 사례를 보여줍니다. A2A 프로토콜이 발전함에 따라, 이 인스펙터는 에이전트 간 통신을 다루는 개발자들에게 필수적인 도구로 계속 역할할 것입니다.
첫 번째 A2A 에이전트를 구축하든 복잡한 다중 에이전트 상호작용을 디버깅하든, A2A Inspector는 신뢰할 수 있고 사양을 준수하는 에이전트 통신을 보장하는 데 필요한 가시성과 검증 도구를 제공합니다.