AWS 기술 블로그
오픈소스 Arize Phoenix 를 활용한 멀티 에이전트 AI시스템 쉽고 빠르게 모니터링하기
개요
최근 생성형 AI는 Agentic Workflow와 함께 유사 MSA 형태의 구성으로 동작되고 있습니다. 많은 시스템은 이미 여러 AI 에이전트가 사용자의 질문에 따라 유기적으로 협업하며 문제를 추리하고 생각하며 결과에 도달하고 있습니다. 이 과정속에 AI Agent는 서로 여러번 되묻고 필요한 경우 MCP(Model Context Protocol) Tool을 호출하거나 RAG(Retrieval-Augmented Generation)를 참조하기도 합니다. 이러한 에이전트는 사용자를 위한 작업을 자동화 하고 질문에 답변하기 위한 최적의 방향을 스스로 결정하고 수행합니다. 예를 들어, 여행 예약을 돕는 에이전트를 만든다고 가정해 보겠습니다. 사용자는 인프라, 맞춤형 코드 작성 필요 없이 AI 에이전트에게 요청하여 생성할 수 있습니다.
AI 에이전트는 애플리케이션을 개발하고 업무를 처리하는 방식에 근본적인 변화를 가져왔습니다. 전통적인 소프트웨어의 정해진 방식을 규칙에 따라 수행하는 것과 달리 AI 에이전트는 규칙적이지 않으며 복잡한 추론을 수행하며 이 과정은 일반적으로 블랙박스처럼 자세히 나타나지 않습니다. 특히, 최근 Anthropic의 SHADE-Arena: Evaluating Sabotage and monitoring in LLM Agents 논문에서 이야기 한것과 같이 CoT(Chain-of-Thought)와 같은 구성에서 AI 에이전트는 사용자가 의도하지 않은 행위를 하는 위험을 보다 면밀하게 관찰해야할 필요성이 높아지고 있습니다. 또한, 복잡한 AI 에이전트간의 협업으로 하나의 업무당 호출되는 LLM 모델의 토큰과 비용 추적이 매우 중요해 졌습니다.
AI 에이전트를 모니터링 하는 것은 신뢰성, 효율성, 보안성, 최적의 성능을 유지하려는 조직에게 이제는 필수적인 요소로 다가왔습니다.
Arize AI는 Amazon Bedrock Agents와 통합을 지원하는 관측 가능성 도구를 제공합니다. 생성형 AI의 관측 가능성은 Amazon Bedrock Agents가 어떻게 수행하고, 상호 작용하고, 작업을 실행하는지에 대한 깊은 통찰력을 제공하는 AI 시스템 운영의 중요한 측면입니다. 이는 고수준 사용자 요청부터 개별 API 호출 및 도구 호출까지 에이전트 활동의 계층적 추적을 추적하고 분석하는 것을 포함합니다. 이러한 추적은 구조화된 이벤트 트리를 형성하여 개발자가 에이전트의 의사 결정 과정을 통한 사용자 상호 작용의 전체 여정을 이해하는 데 도움을 줍니다. 주목해야 할 주요 지표에는 응답 지연 시간, 토큰 사용량, 런타임 예외 및 함수 호출 검사가 포함됩니다. 조직이 개념 증명에서 프로덕션으로 AI 구현을 확장함에 따라 AI 에이전트 동작을 이해하고 모니터링하는 것이 점점 더 중요해지고 있습니다.
Arize AI는 이러한 AI 에이전트 애플리케이션을 추적, 평가 및 모니터링하기 위한 포괄적인 관측 가능성 도구를 제공합니다. 이 솔루션은 아래의 세 가지 주요 이점을 제공합니다.
- 포괄적인 추적 가능성 – 초기 사용자 쿼리부터 지식 검색 및 작업 실행에 이르기까지 에이전트의 실행 경로의 모든 단계에 대한 가시성 확보
- 체계적인 평가 프레임워크 – 일관된 평가 방법론을 적용하여 에이전트 성능을 측정하고 이해
- 데이터 기반 최적화 – 구조화된 실험을 실행하여 다양한 에이전트 구성을 비교하고 최적의 설정 식별
Arize AI 서비스는 두 가지 버전으로 제공됩니다.
- Arize AX – 고급 모니터링 기능을 제공하는 엔터프라이즈 솔루션
- Arize Phoenix – 개발자가 추적 및 평가에 접근할 수 있게 해주는 오픈 소스 서비스
이 게시물에서는 추적 및 평가를 위한 Arize Phoenix 시스템을 소개합니다. Phoenix는 로컬 머신, Jupyter 노트북, 컨테이너화된 배포 또는 클라우드에서 실행할 수 있습니다.
솔루션 개요
생성형 AI의 Agentic Workflow 추적은 여러 단계, 구성요소 간의 전달되는 요청 그리고 경로를 기록합니다. 이는 시스템의 상태를 더 명확하게 파악하고 로컬에서 재현하기 어려운 동작을 디버그 하는 것을 가능하게 합니다. 생성형 AI 시스템 분석을 위해 추적을 생성하기 위해선 추적 도구가 구성되어야 합니다. Arize Phoenix는 애플리케이션 시작시 프로세스와 함께 추적할 수 있는 플러그인을 제공합니다.
Arize Phoenix Server는 애플리케이션에서 발생하는 추적을 수집하고 시각화를 제공합니다. Phoenix는 수집기를 통해 애플리케이션으로부터 추적을 수신하기 시작합니다. Phoenix에서는 Instrumentation이 OpenInference라는 단일 리포지토리를 통해 관리됩니다. OpenInference는 다양한 언어의 인기 있는 머신 러닝(ML) SDK 및 프레임워크를 위한 일련의 측정 도구 세트를 제공합니다. 이는 OpenTelemetry 및 온라인 트랜잭션 처리(OLTP)와 호환되는 컨벤션과 플러그인의 집합으로, AI 애플리케이션의 추적을 가능하게 합니다. Phoenix는 현재 HTTP를 통해 OTLP를 지원합니다.
실제 추적의 가시성을 보기 위하여 이 게시글에서는 Amazon Bedrock Agents와 multi-agent collaboration 패턴으로 샘플 서비스를 구성하였습니다. 이러한 Agent 애플리케이션은 사용자 요청에 따라 프로세스의 다양한 측면을 처리하는 전문화된 Agent를 유기적으로 사용할 수 있으며, 이는 요청을 분석하고, 작업을 위임하며, 출력을 통합하는 Supervisor agent에 의해 조정 됩니다.
MCP(Model Context Protocol)는 애플리케이션이 생성형 AI에 컨텍스트를 제공하는 방법을 표준화하는 개방형 프로토콜입니다.
MCP를 사용하는 개체는 클라이언트와 서버로 나누어집니다. 클라이언트는 MCP를 이용하여 서버로부터 리소스, 도구, 프롬프트의 형태로 컨텍스트를 제공받을 수 있습니다. 더 나아가, MCP는 생성형 AI에게 다양한 도구를 통합하여 여러 작업을 수행할 수 있도록 기능을 확장할 수 있습니다.
아키텍처
아래는 이번 게시글에서 Arize Phoenix를 시연하기 위한 아키텍쳐 입니다.
사전 요구 사항
이 솔루션을 체험하려면 아래의 지침을 따라야 합니다.
- Amazon Bedrock에 액세스할 수 있는 AWS 계정.
- Arize Phoenix Self-Hosting 서버
- 샘플 Agentic Workflow 애플리케이션
Tracing 기능을 활용해 Bedrock Multi Agent Collaboration 통합 관측 가능성 확보하기
앞서 살펴본 바와 같이 현대의 생성형 AI 에이전트 시스템은 복잡한 상호작용과 의사결정 과정을 거쳐 작업을 수행합니다. 이러한 시스템에서 각 에이전트의 동작을 추적하고 전체 워크플로우를 이해하는 것은 매우 중요합니다. Arize AI Phoenix 의 Tracing 기능은 Amazon Bedrock Agent들의 복잡한 실행 경로를 투명하게 추적할 수 있게 해주어 개발자와 운영팀이 시스템의 동작을 보다 명확히 이해할 수 있도록 지원합니다.
Multi-Agent 협업 시나리오에서의 추적 복잡성
Bedrock Agents의 Multi-Agent Collaboration 기능이 GA된 뒤, 하나의 invoke_agent 호출 안에 오케스트레이터(Supervisor), 여러 서브 에이전트, Knowledge Base 조회, Action Group(Tool) 실행까지 포함된 계층적인 트레이스가 탄생했습니다.
앞서 개요에서 예시로 든 여행 예약 에이전트의 동작을 다시 한번 예시로 살펴보면, 사용자가 “9월에 가족과 함께 떠날 제주도 여행을 계획해줘”라고 요청했을 때 다음과 같은 복잡한 상호작용이 발생합니다:
- Research Agent: RAG를 통해 제주도 관광 정보, 날씨 데이터, 숙박 시설 정보 수집
- Booking Agent: Action Group을 통해 실제 항공편과 숙박 시설 예약 가능 여부 확인
- Recommendation Agent: 수집된 정보를 바탕으로 개인화된 여행 일정 제안
- Validation Agent: 최종 제안의 실현 가능성과 예산 적합성 검증
- Supervisor Agent: 사용자 요청을 분석하고 필요한 하위 작업들을 식별하여 하위 에이전트들에게 업무 부여
각 에이전트는 독립적으로 동작하면서도 서로 정보를 주고 받으며, 때로는 이전 단계의 결과에 따라 추가 작업을 수행하기도 합니다. 이러한 비선형적이고 동적인 워크플로우에서 문제가 발생했을 때, 어느 지점에서 오류가 발생하고 어느 지점에서 과도하게 높은 지연시간이 발생했는지 파악하는 것은 전통적인 로깅 방식(LogFilter, 별도 스크립트를 통한 집계, 재현 코드 작성 등)으로는 매우 어렵고 복잡합니다.
Arize AI의 Phoenix는 OpenTelemery(OTel) 기반 라이브러리(OpenInference)를 통해 이러한 복잡도를 없애 줍니다.
Arize AI Phoenix 로 Multi Agent Collaboration 트레이싱하기
Phoenix 는 Bedrock Agent 호출을 자동으로 감지하여 Multi Agent 시스템의 전체 실행 경로를 하나의 통합된 뷰로 제공합니다.
동작 원리는 다음과 같습니다.
- Bedrock Agent Runtime은 스트리밍 응답에 Trace Part(JSON)를 함께 내보냅니다. 이를 위해 invoke_agent API 호출 시 enableTrace 변수값을 True 로 설정하는 작업이 필요합니다. (invoke_agent(…, enableTrace=True))
- Instrumentor가 enableTrace를 자동 주입하진 않습니다. Agent 호출 시 직접 true로 설정해야 Trace Part가 생성됩니다
- openinference-instrumentation-bedrock 라이브러리가 boto3 클라이언트를 패치하여 Trace Part를 가로채고,
Root Span → orchestrationTrace → agent_collaborator → LLM / Knowledge Base / Action Group 구조의 OTLP(OpenTelemetry Protocol) 스팬으로 변환합니다. - Phoenix Collector & 스팬은 HTTP OTLP로 Phoenix 서버에 전송되고, 스크린 샷 좌측의 트리 형태로 실시간 시각화됩니다.
설정 방법은 간단합니다. Phoenix 수집서버가 이미 launch 되었다고 가정했을 때 아래와 같이만 설치/설정하셔도 Phoenix UI에 접속했을 때 orchestrationTrace → agent_collaborator → knowledge_base / LLM… 스팬이 자동으로 추적되어 쌓입니다.
# Install
pip install openinference-instrumentation-bedrock opentelemetry-exporter-otlp
# Setup
from phoenix.otel import register
# configure the Phoenix tracer
tracer_provider = register(
project_name="my-multi-agent-collaboration-app", # Default is 'default'
auto_instrument=True # Auto-instrument your app based on installed OI dependencies
)
# 기존 bedrock agent 호출 코드 그대로 유지 (enableTrace=True 설정은 직접 주입 필요)
설정 이후엔 Phoenix UI 상에서 트레이스를 통해 아래와 같은 내용을 바로 확인하실 수가 있습니다.
- 지연시간 병목 (어느 단계가 느린가?) – Span Latency 확인
- 비용 최적화 (토큰 폭주 호출 찾기) – Span Attributes 및 트리 상 메트릭으로 확인
- Tool 선택 오류 (잘못된 Action Group 호출) – agent_collaborator 하위 Tool Span 확인
- Guardrail 차단 추적 – 별도 GuardrailTrace Span 발생 내용 확인
추가적으로 각 스팬에서 더 상세한 내용을 확인하고 싶으신 경우엔 원하는 값(Custom Attribute)을 Span에 직접 삽입해 보시거나, Knowledge Base 조회나 외부 API 호출 등 시간이 오래 걸릴 가능성이 높은 구간을 자식 Span으로 따로 감싸도록 Nesting Span을 작성하셔서 트레이싱 뷰를 모니터링 대상에 맞게 직접 최적화하실 수 있습니다.
Prompt 최적화를 위한 Token / Cost 추적
Phoenix의 추적 및 스팬 분석 기능은 프로토타이핑 및 디버깅 단계에서 유용합니다. Phoenix로 애플리케이션 코드를 추적 도구로 장비하면 팀은 실행 흐름에 대한 상세한 통찰력을 얻을 수 있어 문제를 식별하고 해결하는 것이 간편해집니다. 개발자는 특정 스팬으로 깊이 파고들어 성능 지표를 분석하고 관련 로그 및 메타데이터에 접근하여 디버깅 작업을 효율화할 수 있습니다. Phoenix의 추적 기능을 통해 다음과을 모니터링할 수 있습니다.
- 애플리케이션 지연 시간 : 애플리케이션 내 LLMs, 리트리버 및 기타 구성 요소의 지연 병목 현상을 식별하고 느린 호출을 해결하여 성능과 응답 속도를 최적화할 수 있습니다.
- 토큰 사용량 : LLM 호출의 토큰 사용량에 대한 상세한 분할 분석을 통해 가장 비용이 많이 드는 LLM 호출을 식별하고 최적화할 수 있습니다.
- 런타임 예외 : 속도 제한 이벤트 등 중요한 런타임 예외를 캡처하고 분석하여 잠재적 문제를 사전에 해결하고 완화할 수 있습니다.
- 검색된 문서 : RAG 호출 시 검색된 문서의 점수 및 반환 순서를 확인하여 검색 프로세스에 대한 통찰을 제공합니다.
- 임베딩 : 검색에 사용된 임베딩 텍스트와 기본 임베딩 모델을 분석하여 임베딩 전략을 검증하고 개선할 수 있습니다.
- LLM 매개변수 : LLM 호출 시 사용된 매개변수(예: 온도, 시스템 프롬프트)를 확인하여 최적의 구성 및 디버깅을 지원합니다.
- 프롬프트 템플릿 : 프롬프트 단계에서 사용된 프롬프트 템플릿과 적용된 변수를 이해하여 프롬프트 전략을 미세 조정하고 개선합니다.
- 도구 설명 : LLM이 액세스할 수 있는 도구들의 설명과 기능 서명을 확인하여 LLM의 기능을 더 잘 이해하고 제어합니다.
- LLM 함수 호출 : 함수 호출 기능을 지원하는 LLM(예: Anthropic의 Claude, Amazon Nova, Meta의 Llama)의 경우, LLM 입력에 포함된 함수 선택 및 함수 메시지를 확인할 수 있습니다. 이는 애플리케이션 디버깅 및 최적화에 추가적인 도움을 제공합니다.
다음 스크린샷은 Phoenix 대시보드를 통해 확인한 Amazon Bedrock Agents의 정보입니다. 이 대시보드에는 지연 시간, 토큰 사용량, 한 Trace당 사용 추정 비용이 표시됩니다.
각 모델의 토큰당 비용은 Setting > Models에서 사용자 지정 설정이 가능합니다. 테스트의 가시성을 위하여 Nova Pro 모델의 토큰 당 비용을 높게 측정하였습니다. 모델이 사용되는 토큰과 비용을 추적하는 원리는 다음과 같습니다.
- 토큰 추적 : LLM의 Response 포맷에 포함된 usage_metadata의 total_tokens값을 참조합니다.
- 비용 추적 : Phoenix로 수집되는 Tracing 정보의 Metadata를 참조하여 Pheonix 데시보드에서 설정한 모델의 토큰당 비용을 통해 계산됩니다.
만약 자체적인 모델을 실시간 추론하며 사용하는 경우 적절한 비용을 설정하여 Metadata의 ls_model_name을 이용하여 토큰당 비용을 설정한다면 사용 비용을 추적 감사할 수 있습니다
MCP 활용
MCP (Model Context Protocol)를 이용하면 생성형 AI 애플리케이션이 외부 데이터를 손쉽게 활용할 수 있습니다. 여기에서는 Phoenix를 이용하여 MCP의 서버의 동작을 모니터링 하는 방법과 함께 Phoenix MCP를 이용하여 Phoenix에 수집된 로그를 활용하는 방법에 대해 설명합니다.
Trace Decorator를 이용해 MCP 서버 동작 모니터링하기
Phoenix에서는 사용자 정의 Tracer를 정의할 수 있으므로 MCP Agent의 동작을 모니터링할 때 활용할 수 있습니다. 먼저 아래와 같이 Phoenix서버의 Endpoint를 지정하고 tracer provide를 정의합니다. 이때 arize-phoenix 패키지의 설치가 필요합니다.
from phoenix.otel import register
os.environ["PHOENIX_COLLECTOR_ENDPOINT"] = "http://localhost:6006"
tracer = None
try:
from phoenix.otel import register # pip install arize-phoenix
# configure the Phoenix tracer
tracer_provider = register(
project_name=projectName,
endpoint="http://localhost:6006/v1/traces",
auto_instrument=True
)
tracer = tracer_provider.get_tracer(__name__)
except ImportError:
pass
이후 아래와 같이 사용자 정의 MCP 서버가 활용하는 python 함수에 decorator(@tracer.chain)를 추가해 활용합니다.
@tracer.chain
def get_current_time(format: str=f"%Y-%m-%d %H:%M:%S")->str:
"""Returns the current date and time in the specified format"""
# f"%Y-%m-%d %H:%M:%S"
format = format.replace('\'','')
timestr = datetime.datetime.now(timezone('Asia/Seoul')).strftime(format)
logger.info(f"timestr: {timestr}")
return timestr
이와 같이 하면 Phoenix에서 Agent의 동작 로그와 함께 MCP 서버의 동작을 같이 확인할 수 있습니다. 아래 그림은 Agent에서 시간을 확인하는 tool(“get_current_time”)을 로딩할 때에, 해당 tool에 agent가 전달한 입력과 결과를 확인할 수 있음을 보여줍니다.
MCP Phoenix를 이용해서 수집된 로그 분석하기
Phoenix에서는 MCP 서버를 제공하고 있습니다. 이때 사용하는 json 포맷의 MCP 서버 정보는 아래와 같습니다.
{
"mcpServers": {
"phoenix": {
"command": "npx",
"args": [
"-y",
"@arizeai/phoenix-mcp@latest",
"--baseUrl",
"http://localhost:6006",
"--apiKey",
"your-api-key"
]
}
}
}
Phoenix MCP 활용하기
MCP를 지원하는 애플리케이션에 아래와 같은 json 형태의 Configuration을 추가합니다. 여기서 baseUri에 Phoenix 서버의 URL을 입력하고 필요시 apiKey를 활용할 수 있습니다.
{
"mcpServers": {
"phoenix": {
"command": "npx",
"args": [
"-y",
"@arizeai/phoenix-mcp@latest",
"--baseUrl",
"http://localhost:6006"
]
}
}
}
Phoenix MCP 서버와 연결이 되면, 아래와 같은 작업을 수행할 수 있습니다.
- 프롬프트(Prompts) 관리 및 버전 관리
- 데이터셋 관리 및 실험
- 프로젝트 관리
- OpenInference를 통한 AI 애플리케이션 추적
- 평가(Evals) 및 주석(Annotations) 관리
아래 그림은 Phoenix MCP로 테스트 결과의 예입니다. 자연어를 이용하여 수행된 테스트의 주요 내용과 모델 정보를 확인할 수 있으며, 시스템구성, 안전성과 리소스 사용 내용에 대한 이해를 쉽게 확인할 수 있습니다.
결론
본 게시물에서는 Arize Phoenix를 활용하여 Amazon Bedrock Agents의 Multi-Agent Collaboration 환경에서 포괄적인 관측 가능성을 확보하는 실전 사례에 대해 살펴봤습니다. 복잡한 Agentic Workflow에서 발생하는 지연시간 병목, 비용 최적화, 툴 선택 오류, Guardrail 차단 등의 이슈들을 OpenTelemetry 기반의 통합 추적 시스템으로 투명하게 모니터링할 수 있음을 확인했습니다. 이 과정을 통해 AI 에이전트를 개발하고 운영하는 팀들은 프로덕션 환경에서 안정적이고 효율적인 AI 시스템 운영을 위한 실질적인 모니터링 방법론과 운영 노하우를 얻을 수 있었습니다.
특히 Phoenix는 AI 에이전트 시스템의 엔지니어링 플랫폼으로서 개발팀의 생산성을 크게 향상시킵니다. 실시간 추적(트레이싱) 기능을 통해 기존의 전통적인 로깅 방식으로는 몇 시간에서 며칠이 걸리던 에이전트 간 상호작용 오류 디버깅을 몇 분 내로 단축시키고, 토큰 사용량과 비용/속도 문제를 즉시 식별하여 빠른 최적화 의사결정을 가능하게 합니다. 또한 LLM-as-a-judge 방식의 체계적인 평가 프레임워크를 통해 대량의 에이전트 응답을 정량적으로 평가함으로써, 시스템의 완성도와 성능 개선 현황을 가시적으로 파악할 수 있어 지속적인 품질 향상이 가능합니다.
AI 에이전트의 관측 가능성 확보를 이번 기회에 직접 체험해보고자 하시는 분들께서는 Arize Phoenix 공식 설치 가이드 문서를 확인해 보시기 바랍니다.