fingu-tips KSEL 종합 리포트

13. raw 데이터 전체 dump

2026-05-19 06:43~06:46 UTC · 7 KPI × 3 iter sample 호출 raw JSON 21건 + docker logs request_id 매칭 trace · 각 항목 클릭하여 펼침

개요

21건 raw JSON 응답 + 47라인 docker logs trace 임베드. 모든 항목은 ▶ 클릭으로 펼침/접힘. 상단 "모두 펼치기" 버튼으로 일괄.

KPI 1 — 재무 F1

input
저는 매달 50만원을 저축하고 싶습니다. 1년 후에 여행을 가기 위해 얼마나 저축해야 할까요?
expected
savings_strategy
iter 1 · request_id bc77e2720b464804… · elapsed 27,428.48 ms · HTTP 200
{
  "input": "저는 매달 50만원을 저축하고 싶습니다. 1년 후에 여행을 가기 위해 얼마나 저축해야 할까요?",
  "expected": "savings_strategy",
  "actual": "budget_planning",
  "is_correct": false,
  "assertion": "exact_match",
  "details": {}
}
iter 2 · request_id 3304170b93e34054… · elapsed 26,564.46 ms · HTTP 200
{
  "input": "저는 매달 50만원을 저축하고 싶습니다. 1년 후에 여행을 가기 위해 얼마나 저축해야 할까요?",
  "expected": "savings_strategy",
  "actual": "budget_planning",
  "is_correct": false,
  "assertion": "exact_match",
  "details": {}
}
iter 3 · request_id 40c61ca9b1174e7a… · elapsed 27,132.32 ms · HTTP 200
{
  "input": "저는 매달 50만원을 저축하고 싶습니다. 1년 후에 여행을 가기 위해 얼마나 저축해야 할까요?",
  "expected": "savings_strategy",
  "actual": "budget_planning",
  "is_correct": false,
  "assertion": "exact_match",
  "details": {}
}

KPI 2 — 텍스트 분류

input
내 잔고가 얼마나 되는지 확인해 주세요.
expected
check_balance
iter 1 · request_id 8116cbd9875646c9… · elapsed 140.71 ms · HTTP 200
{
  "input": "내 잔고가 얼마나 되는지 확인해 주세요.",
  "expected": "check_balance",
  "actual": "check_balance",
  "is_correct": true,
  "assertion": "exact_match",
  "details": {}
}
iter 2 · request_id 48e961c96b484b4c… · elapsed 117.28 ms · HTTP 200
{
  "input": "내 잔고가 얼마나 되는지 확인해 주세요.",
  "expected": "check_balance",
  "actual": "check_balance",
  "is_correct": true,
  "assertion": "exact_match",
  "details": {}
}
iter 3 · request_id 1a17deb48df94ee3… · elapsed 116.61 ms · HTTP 200
{
  "input": "내 잔고가 얼마나 되는지 확인해 주세요.",
  "expected": "check_balance",
  "actual": "check_balance",
  "is_correct": true,
  "assertion": "exact_match",
  "details": {}
}

KPI 3 — BLEU

input
한국에서 주식 투자할 때 세금은 어떻게 되나요?
expected
한국에서 주식 투자로 얻은 양도소득에 대해서는 2023년 기준으로 20%의 세율이 적용됩니다. 단, 연간 250만 원까지는 비과세 혜택이 주어집니다.
iter 1 · request_id 2f6dc29a11fe4d8e… · elapsed 871.11 ms · HTTP 200
{"input":"한국에서 주식 투자할 때 세금은 어떻게 되나요?","expected":"한국에서 주식 투자로 얻은 양도소득에 대해서는 2023년 기준으로 20%의 세율이 적용됩니다. 단, 연간 250만 원까지는 비과세 혜택이 주어집니다.","actual":"한국에서 주식 투자로 얻은 양도소득은 기본적으로 22%의 세율이 적용됩니다. 단, 2023년 기준으로 연 5천만 원 이하의 양도소득에 대해서는 특정 세금 면제 조건이 있을 수 있습니다.","is_correct":true,"assertion":"bleu_4","details":{"bleu":0.5803602808713563}}
HTTP 200 · 1.436334s
iter 2 · request_id d1f8603a38834b6e… · elapsed 853.39 ms · HTTP 200
{"input":"한국에서 주식 투자할 때 세금은 어떻게 되나요?","expected":"한국에서 주식 투자로 얻은 양도소득에 대해서는 2023년 기준으로 20%의 세율이 적용됩니다. 단, 연간 250만 원까지는 비과세 혜택이 주어집니다.","actual":"한국에서 주식 투자로 얻은 양도소득은 기본적으로 22%의 세율이 적용됩니다. 단, 2023년 기준으로 연 5천만 원 이하의 양도소득에 대해서는 특정 세금 면제 조건이 있을 수 있습니다.","is_correct":true,"assertion":"bleu_4","details":{"bleu":0.5803602808713563}}
HTTP 200 · 1.425431s
iter 3 · request_id e07c59814fb940d4… · elapsed 857.84 ms · HTTP 200
{"input":"한국에서 주식 투자할 때 세금은 어떻게 되나요?","expected":"한국에서 주식 투자로 얻은 양도소득에 대해서는 2023년 기준으로 20%의 세율이 적용됩니다. 단, 연간 250만 원까지는 비과세 혜택이 주어집니다.","actual":"한국에서 주식 투자로 얻은 양도소득은 기본적으로 22%의 세율이 적용됩니다. 단, 2023년 기준으로 연 5천만 원 이하의 양도소득에 대해서는 특정 세금 면제 조건이 있을 수 있습니다.","is_correct":true,"assertion":"bleu_4","details":{"bleu":0.5803602808713563}}
HTTP 200 · 1.460736s

KPI 5 — 개인화

input
{"age":25,"income_band":"mid","goals":["investment_growth","travel"],"risk_tolerance":"high"}
expected
(없음 — 4 전략 비교)
iter 1 · request_id 5706ae71d6464582… · elapsed 1.38 ms · HTTP 200
{
  "input": {
    "age": 25,
    "income_band": "mid",
    "goals": [
      "investment_growth",
      "travel"
    ],
    "risk_tolerance": "high"
  },
  "expected": {},
  "actual": {
    "score": 0.27888146818833726,
    "strategy_scores": {
      "basic": 0.19967208455254679,
      "rec_driven": 0.2642731304397953,
      "engagement_guided": 0.30130615583945874,
      "rec_engagement": 0.357522587979313
    }
  },
  "is_correct": false,
  "assertion": "llm_rec_match",
  "details": {
    "score": 0.27888146818833726,
    "strategy_scores": {
      "basic": 0.19967208455254679,
      "rec_driven": 0.2642731304397953,
      "engagement_guided": 0.30130615583945874,
      "rec_engagement": 0.357522587979313
    }
  }
}
iter 2 · request_id 38afbf02e9a544e1… · elapsed 1.58 ms · HTTP 200
{
  "input": {
    "age": 25,
    "income_band": "mid",
    "goals": [
      "investment_growth",
      "travel"
    ],
    "risk_tolerance": "high"
  },
  "expected": {},
  "actual": {
    "score": 0.27888146818833726,
    "strategy_scores": {
      "basic": 0.19967208455254679,
      "rec_driven": 0.2642731304397953,
      "engagement_guided": 0.30130615583945874,
      "rec_engagement": 0.357522587979313
    }
  },
  "is_correct": false,
  "assertion": "llm_rec_match",
  "details": {
    "score": 0.27888146818833726,
    "strategy_scores": {
      "basic": 0.19967208455254679,
      "rec_driven": 0.2642731304397953,
      "engagement_guided": 0.30130615583945874,
      "rec_engagement": 0.357522587979313
    }
  }
}
iter 3 · request_id 8b2efd5281e84058… · elapsed 1.47 ms · HTTP 200
{
  "input": {
    "age": 25,
    "income_band": "mid",
    "goals": [
      "investment_growth",
      "travel"
    ],
    "risk_tolerance": "high"
  },
  "expected": {},
  "actual": {
    "score": 0.27888146818833726,
    "strategy_scores": {
      "basic": 0.19967208455254679,
      "rec_driven": 0.2642731304397953,
      "engagement_guided": 0.30130615583945874,
      "rec_engagement": 0.357522587979313
    }
  },
  "is_correct": false,
  "assertion": "llm_rec_match",
  "details": {
    "score": 0.27888146818833726,
    "strategy_scores": {
      "basic": 0.19967208455254679,
      "rec_driven": 0.2642731304397953,
      "engagement_guided": 0.30130615583945874,
      "rec_engagement": 0.357522587979313
    }
  }
}

KPI 6 — NQ 검색

input
신용카드 발급 기준은 무엇인가요?
expected
["소득증명","신용평가","만 20세 이상"]
iter 1 · request_id b4efcc2057d24c87… · elapsed 2.11 ms · HTTP 200
{
  "input": "신용카드 발급 기준은 무엇인가요?",
  "expected": [
    "소득증명",
    "신용평가",
    "만 20세 이상"
  ],
  "actual": [
    "신용도",
    "5월 말",
    "결제일 맞추기",
    "10%~50%",
    "50000만원"
  ],
  "is_correct": false,
  "assertion": "substring_intersect",
  "details": {
    "recall_at_5": 0.0,
    "matched": 0
  }
}
iter 2 · request_id a5f7b52840a54d18… · elapsed 1.70 ms · HTTP 200
{
  "input": "신용카드 발급 기준은 무엇인가요?",
  "expected": [
    "소득증명",
    "신용평가",
    "만 20세 이상"
  ],
  "actual": [
    "신용도",
    "5월 말",
    "결제일 맞추기",
    "10%~50%",
    "50000만원"
  ],
  "is_correct": false,
  "assertion": "substring_intersect",
  "details": {
    "recall_at_5": 0.0,
    "matched": 0
  }
}
iter 3 · request_id e87a0fc1646242e1… · elapsed 1.70 ms · HTTP 200
{
  "input": "신용카드 발급 기준은 무엇인가요?",
  "expected": [
    "소득증명",
    "신용평가",
    "만 20세 이상"
  ],
  "actual": [
    "신용도",
    "5월 말",
    "결제일 맞추기",
    "10%~50%",
    "50000만원"
  ],
  "is_correct": false,
  "assertion": "substring_intersect",
  "details": {
    "recall_at_5": 0.0,
    "matched": 0
  }
}

KPI 7 — 상품 추천 F1@10

input
(user_id=user_0000 메타로 자동 조회)
expected
["credit_card_dining","insurance_auto","crypto_staking_basic","fund_balanced","checking_business","fund_tech","fund_dividend","stock_account_basic","crypto_wallet"]
iter 1 · request_id 4190d412054948a5… · elapsed 1.40 ms · HTTP 200
{
  "input": {
    "user_id": "user_0000"
  },
  "expected": [
    "credit_card_dining",
    "insurance_auto",
    "crypto_staking_basic",
    "fund_balanced",
    "checking_business",
    "fund_tech",
    "fund_dividend",
    "stock_account_basic",
    "crypto_wallet"
  ],
  "actual": [
    "crypto_staking_basic",
    "savings_high_yield",
    "fund_dividend",
    "checking_business",
    "fund_tech",
    "stock_account_basic",
    "fund_balanced",
    "insurance_auto",
    "credit_card_dining",
    "crypto_wallet"
  ],
  "is_correct": true,
  "assertion": "topk_f1",
  "details": {
    "f1": 0.9473684210526316,
    "precision": 0.9,
    "recall": 1.0,
    "tp": 9
  }
}
iter 2 · request_id 03ff38558a4243a6… · elapsed 1.55 ms · HTTP 200
{
  "input": {
    "user_id": "user_0000"
  },
  "expected": [
    "credit_card_dining",
    "insurance_auto",
    "crypto_staking_basic",
    "fund_balanced",
    "checking_business",
    "fund_tech",
    "fund_dividend",
    "stock_account_basic",
    "crypto_wallet"
  ],
  "actual": [
    "crypto_staking_basic",
    "savings_high_yield",
    "fund_dividend",
    "checking_business",
    "fund_tech",
    "stock_account_basic",
    "fund_balanced",
    "insurance_auto",
    "credit_card_dining",
    "crypto_wallet"
  ],
  "is_correct": true,
  "assertion": "topk_f1",
  "details": {
    "f1": 0.9473684210526316,
    "precision": 0.9,
    "recall": 1.0,
    "tp": 9
  }
}
iter 3 · request_id ad35532a4ac24f5b… · elapsed 1.56 ms · HTTP 200
{
  "input": {
    "user_id": "user_0000"
  },
  "expected": [
    "credit_card_dining",
    "insurance_auto",
    "crypto_staking_basic",
    "fund_balanced",
    "checking_business",
    "fund_tech",
    "fund_dividend",
    "stock_account_basic",
    "crypto_wallet"
  ],
  "actual": [
    "crypto_staking_basic",
    "savings_high_yield",
    "fund_dividend",
    "checking_business",
    "fund_tech",
    "stock_account_basic",
    "fund_balanced",
    "insurance_auto",
    "credit_card_dining",
    "crypto_wallet"
  ],
  "is_correct": true,
  "assertion": "topk_f1",
  "details": {
    "f1": 0.9473684210526316,
    "precision": 0.9,
    "recall": 1.0,
    "tp": 9
  }
}

docker logs trace 전체 (47 라인)

시간 범위: 06:43:11 ~ 06:46:00 UTC · health polling + KPI sample call boundary

전체 펼치기 (47 라인)
{"ts": "2026-05-19T06:43:11.822Z", "level": "INFO", "logger": "src.api", "event": "api.request.done", "request_id": "e412254a495444f185cc74a29be71acf", "method": "GET", "path": "/api/health", "status": 200, "elapsed_ms": 0.74}
{"ts": "2026-05-19T06:43:41.921Z", "level": "INFO", "logger": "src.api", "event": "api.request.done", "request_id": "d574159365004fef968f49ae884d8cdb", "method": "GET", "path": "/api/health", "status": 200, "elapsed_ms": 0.79}
{"ts": "2026-05-19T06:44:12.051Z", "level": "INFO", "logger": "src.api", "event": "api.request.done", "request_id": "072ee80f86b64cba80b840f82b1fc3a1", "method": "GET", "path": "/api/health", "status": 200, "elapsed_ms": 9.82}
{"ts": "2026-05-19T06:44:16.921Z", "level": "INFO", "logger": "src.api", "event": "kpi.single.measured", "request_id": "bc77e2720b464804b15d80f486f0988c", "source": "sample", "kpi": 1, "score": 0.0, "verdict": "no_label", "is_correct": false, "sample_id": "None"}
{"ts": "2026-05-19T06:44:16.921Z", "level": "INFO", "logger": "src.api", "event": "api.request.done", "request_id": "bc77e2720b464804b15d80f486f0988c", "method": "POST", "path": "/api/kpi/1/sample", "status": 200, "elapsed_ms": 27428.48}
{"ts": "2026-05-19T06:44:18.306Z", "level": "INFO", "logger": "src.api", "event": "kpi.single.measured", "request_id": "8116cbd9875646c9b609538226c68f99", "source": "sample", "kpi": 2, "score": 0.0, "verdict": "no_label", "is_correct": true, "sample_id": "None"}
{"ts": "2026-05-19T06:44:18.307Z", "level": "INFO", "logger": "src.api", "event": "api.request.done", "request_id": "8116cbd9875646c9b609538226c68f99", "method": "POST", "path": "/api/kpi/2/sample", "status": 200, "elapsed_ms": 140.71}
{"ts": "2026-05-19T06:44:19.593Z", "level": "INFO", "logger": "src.api", "event": "api.request.done", "request_id": "d58a9fbe49a9464ea9725e7137504d99", "method": "POST", "path": "/api/kpi/3/sample", "status": 422, "elapsed_ms": 0.82}
{"ts": "2026-05-19T06:44:20.829Z", "level": "INFO", "logger": "src.api", "event": "kpi.single.measured", "request_id": "5706ae71d646458289130b8a5e912983", "source": "sample", "kpi": 5, "score": 0.0, "verdict": "no_label", "is_correct": false, "sample_id": "None"}
{"ts": "2026-05-19T06:44:20.829Z", "level": "INFO", "logger": "src.api", "event": "api.request.done", "request_id": "5706ae71d646458289130b8a5e912983", "method": "POST", "path": "/api/kpi/5/sample", "status": 200, "elapsed_ms": 1.38}
{"ts": "2026-05-19T06:44:22.063Z", "level": "INFO", "logger": "src.api", "event": "kpi.single.measured", "request_id": "b4efcc2057d24c87bb0100dde5fe8505", "source": "sample", "kpi": 6, "score": 0.0, "verdict": "no_label", "is_correct": false, "sample_id": "None"}
{"ts": "2026-05-19T06:44:22.064Z", "level": "INFO", "logger": "src.api", "event": "api.request.done", "request_id": "b4efcc2057d24c87bb0100dde5fe8505", "method": "POST", "path": "/api/kpi/6/sample", "status": 200, "elapsed_ms": 2.11}
{"ts": "2026-05-19T06:44:22.973Z", "level": "INFO", "logger": "src.api", "event": "kpi.single.measured", "request_id": "4190d412054948a580809936f72e8707", "source": "sample", "kpi": 7, "score": 0.0, "verdict": "no_label", "is_correct": true, "sample_id": "user_0000"}
{"ts": "2026-05-19T06:44:22.974Z", "level": "INFO", "logger": "src.api", "event": "api.request.done", "request_id": "4190d412054948a580809936f72e8707", "method": "POST", "path": "/api/kpi/7/sample", "status": 200, "elapsed_ms": 1.4}
{"ts": "2026-05-19T06:44:42.191Z", "level": "INFO", "logger": "src.api", "event": "api.request.done", "request_id": "08431b483cea40479d48a71bd29207b8", "method": "GET", "path": "/api/health", "status": 200, "elapsed_ms": 16.01}
{"ts": "2026-05-19T06:44:50.499Z", "level": "INFO", "logger": "src.api", "event": "kpi.single.measured", "request_id": "3304170b93e340549aaf56eba225b7c1", "source": "sample", "kpi": 1, "score": 0.0, "verdict": "no_label", "is_correct": false, "sample_id": "None"}
{"ts": "2026-05-19T06:44:50.499Z", "level": "INFO", "logger": "src.api", "event": "api.request.done", "request_id": "3304170b93e340549aaf56eba225b7c1", "method": "POST", "path": "/api/kpi/1/sample", "status": 200, "elapsed_ms": 26564.46}
{"ts": "2026-05-19T06:44:51.586Z", "level": "INFO", "logger": "src.api", "event": "kpi.single.measured", "request_id": "48e961c96b484b4ca09315f01a6bbc17", "source": "sample", "kpi": 2, "score": 0.0, "verdict": "no_label", "is_correct": true, "sample_id": "None"}
{"ts": "2026-05-19T06:44:51.586Z", "level": "INFO", "logger": "src.api", "event": "api.request.done", "request_id": "48e961c96b484b4ca09315f01a6bbc17", "method": "POST", "path": "/api/kpi/2/sample", "status": 200, "elapsed_ms": 117.28}
{"ts": "2026-05-19T06:44:52.523Z", "level": "INFO", "logger": "src.api", "event": "api.request.done", "request_id": "3987581d7a4d40b69c3474a754a336a1", "method": "POST", "path": "/api/kpi/3/sample", "status": 422, "elapsed_ms": 0.67}
{"ts": "2026-05-19T06:44:53.445Z", "level": "INFO", "logger": "src.api", "event": "kpi.single.measured", "request_id": "38afbf02e9a544e183ed85873df520c4", "source": "sample", "kpi": 5, "score": 0.0, "verdict": "no_label", "is_correct": false, "sample_id": "None"}
{"ts": "2026-05-19T06:44:53.445Z", "level": "INFO", "logger": "src.api", "event": "api.request.done", "request_id": "38afbf02e9a544e183ed85873df520c4", "method": "POST", "path": "/api/kpi/5/sample", "status": 200, "elapsed_ms": 1.58}
{"ts": "2026-05-19T06:44:54.399Z", "level": "INFO", "logger": "src.api", "event": "kpi.single.measured", "request_id": "a5f7b52840a54d1883f635fe0e5f073f", "source": "sample", "kpi": 6, "score": 0.0, "verdict": "no_label", "is_correct": false, "sample_id": "None"}
{"ts": "2026-05-19T06:44:54.400Z", "level": "INFO", "logger": "src.api", "event": "api.request.done", "request_id": "a5f7b52840a54d1883f635fe0e5f073f", "method": "POST", "path": "/api/kpi/6/sample", "status": 200, "elapsed_ms": 1.7}
{"ts": "2026-05-19T06:44:55.311Z", "level": "INFO", "logger": "src.api", "event": "kpi.single.measured", "request_id": "03ff38558a4243a6ba25eb74abbbfaae", "source": "sample", "kpi": 7, "score": 0.0, "verdict": "no_label", "is_correct": true, "sample_id": "user_0000"}
{"ts": "2026-05-19T06:44:55.312Z", "level": "INFO", "logger": "src.api", "event": "api.request.done", "request_id": "03ff38558a4243a6ba25eb74abbbfaae", "method": "POST", "path": "/api/kpi/7/sample", "status": 200, "elapsed_ms": 1.55}
{"ts": "2026-05-19T06:45:12.334Z", "level": "INFO", "logger": "src.api", "event": "api.request.done", "request_id": "e89b872d150941299d8ebe24aabc0d98", "method": "GET", "path": "/api/health", "status": 200, "elapsed_ms": 6.08}
{"ts": "2026-05-19T06:45:23.379Z", "level": "INFO", "logger": "src.api", "event": "kpi.single.measured", "request_id": "40c61ca9b1174e7a9acd216956020aab", "source": "sample", "kpi": 1, "score": 0.0, "verdict": "no_label", "is_correct": false, "sample_id": "None"}
{"ts": "2026-05-19T06:45:23.380Z", "level": "INFO", "logger": "src.api", "event": "api.request.done", "request_id": "40c61ca9b1174e7a9acd216956020aab", "method": "POST", "path": "/api/kpi/1/sample", "status": 200, "elapsed_ms": 27132.32}
{"ts": "2026-05-19T06:45:24.461Z", "level": "INFO", "logger": "src.api", "event": "kpi.single.measured", "request_id": "1a17deb48df94ee38b0f2f3d9dca3d10", "source": "sample", "kpi": 2, "score": 0.0, "verdict": "no_label", "is_correct": true, "sample_id": "None"}
{"ts": "2026-05-19T06:45:24.462Z", "level": "INFO", "logger": "src.api", "event": "api.request.done", "request_id": "1a17deb48df94ee38b0f2f3d9dca3d10", "method": "POST", "path": "/api/kpi/2/sample", "status": 200, "elapsed_ms": 116.61}
{"ts": "2026-05-19T06:45:25.410Z", "level": "INFO", "logger": "src.api", "event": "api.request.done", "request_id": "0874acc04b144905957e0fc8bf956028", "method": "POST", "path": "/api/kpi/3/sample", "status": 422, "elapsed_ms": 0.68}
{"ts": "2026-05-19T06:45:26.340Z", "level": "INFO", "logger": "src.api", "event": "kpi.single.measured", "request_id": "8b2efd5281e840588d3732cd25876cf7", "source": "sample", "kpi": 5, "score": 0.0, "verdict": "no_label", "is_correct": false, "sample_id": "None"}
{"ts": "2026-05-19T06:45:26.341Z", "level": "INFO", "logger": "src.api", "event": "api.request.done", "request_id": "8b2efd5281e840588d3732cd25876cf7", "method": "POST", "path": "/api/kpi/5/sample", "status": 200, "elapsed_ms": 1.47}
{"ts": "2026-05-19T06:45:27.670Z", "level": "INFO", "logger": "src.api", "event": "kpi.single.measured", "request_id": "e87a0fc1646242e1b5e098527781e59c", "source": "sample", "kpi": 6, "score": 0.0, "verdict": "no_label", "is_correct": false, "sample_id": "None"}
{"ts": "2026-05-19T06:45:27.671Z", "level": "INFO", "logger": "src.api", "event": "api.request.done", "request_id": "e87a0fc1646242e1b5e098527781e59c", "method": "POST", "path": "/api/kpi/6/sample", "status": 200, "elapsed_ms": 1.7}
{"ts": "2026-05-19T06:45:28.669Z", "level": "INFO", "logger": "src.api", "event": "kpi.single.measured", "request_id": "ad35532a4ac24f5bba035877cd246120", "source": "sample", "kpi": 7, "score": 0.0, "verdict": "no_label", "is_correct": true, "sample_id": "user_0000"}
{"ts": "2026-05-19T06:45:28.669Z", "level": "INFO", "logger": "src.api", "event": "api.request.done", "request_id": "ad35532a4ac24f5bba035877cd246120", "method": "POST", "path": "/api/kpi/7/sample", "status": 200, "elapsed_ms": 1.56}
{"ts": "2026-05-19T06:45:42.431Z", "level": "INFO", "logger": "src.api", "event": "api.request.done", "request_id": "a4f342ca347d40e2b2a268d592e078c1", "method": "GET", "path": "/api/health", "status": 200, "elapsed_ms": 0.78}
{"ts": "2026-05-19T06:45:55.265Z", "level": "INFO", "logger": "src.api", "event": "kpi.single.measured", "request_id": "2f6dc29a11fe4d8ebcf6d2b3ebbd1a81", "source": "sample", "kpi": 3, "score": 0.0, "verdict": "no_label", "is_correct": true, "sample_id": "None"}
{"ts": "2026-05-19T06:45:55.265Z", "level": "INFO", "logger": "src.api", "event": "api.request.done", "request_id": "2f6dc29a11fe4d8ebcf6d2b3ebbd1a81", "method": "POST", "path": "/api/kpi/3/sample", "status": 200, "elapsed_ms": 871.11}
{"ts": "2026-05-19T06:45:57.728Z", "level": "INFO", "logger": "src.api", "event": "kpi.single.measured", "request_id": "d1f8603a38834b6e858255aa27ecb614", "source": "sample", "kpi": 3, "score": 0.0, "verdict": "no_label", "is_correct": true, "sample_id": "None"}
{"ts": "2026-05-19T06:45:57.729Z", "level": "INFO", "logger": "src.api", "event": "api.request.done", "request_id": "d1f8603a38834b6e858255aa27ecb614", "method": "POST", "path": "/api/kpi/3/sample", "status": 200, "elapsed_ms": 853.39}
{"ts": "2026-05-19T06:46:00.206Z", "level": "INFO", "logger": "src.api", "event": "kpi.single.measured", "request_id": "e07c59814fb940d4a99c00fbf6cc60f2", "source": "sample", "kpi": 3, "score": 0.0, "verdict": "no_label", "is_correct": true, "sample_id": "None"}
{"ts": "2026-05-19T06:46:00.207Z", "level": "INFO", "logger": "src.api", "event": "api.request.done", "request_id": "e07c59814fb940d4a99c00fbf6cc60f2", "method": "POST", "path": "/api/kpi/3/sample", "status": 200, "elapsed_ms": 857.84}
{"ts": "2026-05-19T06:46:12.513Z", "level": "INFO", "logger": "src.api", "event": "api.request.done", "request_id": "8b00758b736f48508c43bf1c40849372", "method": "GET", "path": "/api/health", "status": 200, "elapsed_ms": 1.18}
{"ts": "2026-05-19T06:46:42.581Z", "level": "INFO", "logger": "src.api", "event": "api.request.done", "request_id": "364b92e367fe4536acd0ddcd978e8bb5", "method": "GET", "path": "/api/health", "status": 200, "elapsed_ms": 0.79}

측정 환경 메타 (호출 시점)

환경 메타 펼치기
{
  "client": "curl 8.x · macOS",
  "endpoint": "https://fingu.grinda.ai (Cloudflare proxy → EC2 t4g.xlarge AL2023)",
  "tls": "nginx Cloudflare Origin Certificate",
  "container": "fingu-tips-api (Python 3.12.13 · FastAPI 0.136.1 · Uvicorn 0.46)",
  "env": {
    "ENABLE_REAL_PIPELINE": "true",
    "ENABLE_FINETUNED_PIPELINE": "true",
    "ENABLE_API_PIPELINE": "(unset → false)",
    "SEED": "(unset → default 20260514)",
    "KPI4_STUB_LATENCY_MS": "3",
    "KPI_NDJSON_DUMP": "(unset → OFF)"
  },
  "deploy_id": "97f6660cf170751ded9a42f435bbe02333ae4960 (PR #61 머지된 alpha HEAD)",
  "agent_model": "claude-sonnet-4-5",
  "finetuned_vllm": {
    "kpi2_url": "http://210.91.154.131:20443/deployment2/ccd06756046a5b20/v1",
    "kpi3_url": "http://210.91.154.131:20443/deployment2/09097b7f9d1e85c5/v1",
    "served_model": "unsloth/Qwen3-8B-unsloth-bnb-4bit (alias: kpi2 / kpi3)"
  }
}

요청 body 전체 (참고용)

요청 body 6건 펼치기
KPI 1: {"input":"저는 매달 50만원을 저축하고 싶습니다. 1년 후에 여행을 가기 위해 얼마나 저축해야 할까요?","expected":"savings_strategy","persona_id":"jiyu"}
KPI 2: {"input":"내 잔고가 얼마나 되는지 확인해 주세요.","expected":"check_balance","persona_id":"jiyu"}
KPI 3: {"input":"한국에서 주식 투자할 때 세금은 어떻게 되나요?","expected":"한국에서 주식 투자로 얻은 양도소득에 대해서는 2023년 기준으로 20%의 세율이 적용됩니다. 단, 연간 250만 원까지는 비과세 혜택이 주어집니다.","persona_id":"jiyu"}
KPI 5: {"input":{"age":25,"income_band":"mid","goals":["investment_growth","travel"],"risk_tolerance":"high"},"persona_id":"jiyu"}
KPI 6: {"input":"신용카드 발급 기준은 무엇인가요?","expected":["소득증명","신용평가","만 20세 이상"],"persona_id":"jiyu"}
KPI 7: {"meta":{"id":"user_0000"},"persona_id":"jiyu"}