콘텐츠로 이동

M4. 관측·평가 — Observability + Evaluations + 판정 티어 모델 비교

M4에서는 M1–M3 에이전트가 남긴 세션 스팬을 CloudWatch에서 다운로드해 빌트인 evaluator 두 개(Builtin.Helpfulness, Builtin.ToolSelectionAccuracy)로 품질을 측정하고, 판정 티어 모델을 Claude Fable 5 → GPT 5.6 Sol로 교체해 같은 프롬프트에서 결과를 비교합니다.

M4 아키텍처 — Runtime의 세션 스팬이 CloudWatch(aws/spans, runtime logs)에 적재되고, run_eval.py가 스팬을 다운로드해 bedrock-agentcore.evaluate()에 넘겨 judge 모델(Claude Sonnet 5 등)이 evaluator를 실행합니다.

M4에서 만드는 부분입니다. Runtime 관측성은 배포와 함께 자동 활성화되어 있으며, Evaluations는 스팬을 입력으로 LLM-as-a-judge 채점을 수행합니다.

  • AgentCore Observability — Runtime 세션 스팬이 CloudWatch Logs (/aws/bedrock-agentcore/runtimes/{agent-id}-DEFAULT, aws/spans)에 자동 적재되고, CloudWatch GenAI Observability 콘솔에서 트레이스를 시각화합니다.
  • AgentCore Evaluations (온디맨드)bedrock-agentcore 데이터 플레인의 evaluate(evaluatorId, evaluationInput={"sessionSpans": ...}) API로 세션 스팬을 채점합니다. 실측 기준일 2026-07-16, 이 계정 리전에서 노출된 빌트인 evaluator는 총 16종(Correctness / Faithfulness / Helpfulness / ResponseRelevance / Conciseness / Coherence / InstructionFollowing / Refusal / GoalSuccessRate / ToolSelectionAccuracy / ToolParameterAccuracy / Harmfulness / Stereotyping / TrajectoryExactOrderMatch / TrajectoryInOrderMatch / TrajectoryAnyOrderMatch)이며, 이 워크샵은 그중 두 개를 사용합니다.
    • Builtin.Helpfulness — 트레이스 레벨 (실측: baseline 세션에서 1.00 / “Above And Beyond” 관측).
    • Builtin.ToolSelectionAccuracy — 툴 콜 레벨 (spanIds로 지목 가능).
  • 판정 티어 모델 비교 — Claude Fable 5(기본)와 GPT 5.6 Sol(비교 대상). 두 모델은 클래스(BedrockModel ↔ OpenAIResponsesModel)와 base_url이 다르므로 단순 sed 치환으로 끝나지 않고, lab-src/m4/compare_models.sh가 자동 교체·재배포·재평가를 안내합니다.
  1. CloudWatch Transaction Search를 활성화합니다 (계정당 1회).

    CloudWatch 콘솔 > Application Signals > Transaction Search에서 활성화해 주세요. 활성화되어 있어야 aws/spans 로그 그룹이 채워집니다.

  2. 평가 대상 세션 정보를 확인합니다.

    Terminal window
    # M1에서 기록한 agent-id 재확인
    cd aiopstriageagent
    agentcore status

    기존 M2/M3 실습에서 사용한 세션 ID 하나를 baseline으로 골라 두세요. 없다면 invoke를 한 번 더 실행해 새 세션을 만듭니다.

    Terminal window
    agentcore invoke --session-id aiops-eval-baseline-$(date +%s)-000000000000000 \
    '{"prompt": "지난 24시간 특정 IP 대역의 401 인증 실패 알람이 폭증했습니다. 원인과 대응 절차를 조사해 주세요."}'

    세션 스팬은 호출 직후 몇 분 지연될 수 있습니다 (run_eval.py의 기본 조회 윈도우는 60분이므로 즉시 실행해도 대부분 잡힙니다).

  3. 온디맨드 평가를 실행합니다.

    Terminal window
    cd lab-src/m4
    python3 run_eval.py \
    --agent-id <M1 agent-id> \
    --session-id <위에서 사용한 세션 ID> \
    --minutes 60 \
    --json-out result.json

    출력의 표에서 evaluator별 value / label / explanation을 확인합니다. explanation은 표에서 60자로 잘리므로, judge의 근거 전문이 필요하면 --json-out result.json을 붙여 전체 응답을 저장하세요.

    실측 출력 원문입니다 — 2026-07-16, baseline 세션 77e0515e-591f-4bd4-baf3-13223df9d04b 기준(합성 데모 값).

    [1/2] CloudWatch 에서 세션 스팬을 조회합니다
    (agent-id=aiopstriage_aiopstriageagent-twR5Co6yOC,
    session-id=77e0515e-591f-4bd4-baf3-13223df9d04b)
    Downloaded 3 runtime-log entries
    Downloaded 5 aws/span entries
    Returning 8 total records
    [2/2] Evaluate API 를 호출합니다
    (evaluators=['Builtin.Helpfulness', 'Builtin.ToolSelectionAccuracy'])
    ===== Evaluator: Builtin.Helpfulness =====
    결과 수: 1
    ----------------------------------------------------------------------------
    evaluatorName value label explanation
    ----------------------------------------------------------------------------
    Builtin.Helpfulness 1.00 Above And Beyond The user's goal is to:
    1) determine if the 500+
    401 response...
    ----------------------------------------------------------------------------
    ===== Evaluator: Builtin.ToolSelectionAccuracy =====
    결과 수: 0
    ----------------------------------------------------------------------------
    evaluatorName value label explanation
    ----------------------------------------------------------------------------
    ----------------------------------------------------------------------------
    평가 응답 전체(explanation 전문 포함)를 저장했습니다: result.json
  4. CloudWatch GenAI Observability에서 트레이스를 확인합니다.

    콘솔 경로: CloudWatch > GenAI Observability > Bedrock AgentCore > Agents > <agent> > Traces / Evaluations 탭. 세션별 스팬 흐름과 evaluator 결과가 함께 표시됩니다.

  5. 판정 티어 모델 비교 — Claude Fable 5 vs GPT 5.6 Sol.

    lab-src/m4/compare_models.sh가 다음을 자동으로 수행합니다.

    1. M1 프로젝트의 main.py판정 티어만 GPT 5.6 Sol(Mantle Responses)로 교체한 상태로 백업 후 재작성 (main.py.bak으로 원본 보존).
    2. agentcore deploy -y로 재배포.
    3. 동일 프롬프트 3종을 새 세션 ID로 invoke.
    4. baseline(Fable 5) 세션과 Sol 세션을 각각 run_eval.py로 채점.
    Terminal window
    bash compare_models.sh \
    ../m1/aiopstriageagent \
    <M1 agent-id> \
    <baseline Fable 5 세션 ID>

    결과 비교 시 다음 원칙을 지켜 주세요.

  6. 원복합니다.

    비교가 끝나면 M5/M6를 위해 판정 티어를 Claude Fable 5로 되돌려 주세요.

    Terminal window
    mv ../m1/aiopstriageagent/app/aiopstriageagent/main.py.bak \
    ../m1/aiopstriageagent/app/aiopstriageagent/main.py
    (cd ../m1/aiopstriageagent && agentcore deploy -y)

프로덕션 에이전트는 프롬프트·모델·도구 조합이 자주 바뀝니다. “새 조합이 이전보다 낫다”를 정성적 인상이 아니라 숫자로 말할 수 있어야 릴리스 결정을 내릴 수 있습니다. AgentCore Evaluations는 트레이스 스팬을 입력으로 LLM-as-a-judge 채점을 수행하므로, 에이전트 코드 변경 없이 같은 세션 데이터에 여러 evaluator를 반복 적용할 수 있습니다.

  • run_eval.py 표에 두 evaluator의 value/label/explanation이 출력됩니다.
  • CloudWatch GenAI Observability의 Evaluations 탭에도 같은 결과가 보입니다.
  • (선택) compare_models.sh로 두 판정 티어 모델의 값이 나란히 나옵니다.
  • 판정 티어를 Claude Fable 5로 원복한 상태로 M5에 진입합니다.

다음은 M5. 보너스 — 인시던트 리포트 자동화 + 멀티에이전트 브릿지입니다.