77일차 실행 기록 분석: 실습 15개 · 강의(개요 30장 · 단계 문서 · 4단계 정리 · 05 바이브), 정답본 LAB-A · answers · VIBE-A · tlog 포함
This commit is contained in:
1 parent
036eae1c6a
commit
dcd4cdd66b
148 files changed
+40344
No files matched your search
@@ -0,0 +1,540 @@
|
||||
$ uv run tools/flow.py push reference/lab03-example2-slo.json
|
||||
! unpublished '77 Log report + repeat topics (answer)' (wf3d06e3d30eeee6): it used the same webhook path
|
||||
✔ pushed '77 Log report + SLO (reference)' (id wfed832ca6c81732)
|
||||
POST http://localhost:5678/webhook/my-log-report
|
||||
|
||||
$ uv run tools/flow.py test cases/lab03-slo.json -v
|
||||
POST http://localhost:5678/webhook/my-log-report · 4 case(s) × 1
|
||||
✔ 둘째 주 · SLO 못 지킴 · 0.9s · 304 calls · $0.039810
|
||||
→ request POST /webhook/my-log-report
|
||||
{
|
||||
"from": "2026-10-26",
|
||||
"to": "2026-10-30"
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"total": 357,
|
||||
"errors": 21,
|
||||
"error_rate": 0.0588,
|
||||
"p50_ms": 1171,
|
||||
"p95_ms": 2598,
|
||||
"by_route": {
|
||||
"오류": 21,
|
||||
"자동 답변": 299,
|
||||
"담당자 연결": 17,
|
||||
"잠시 후": 20
|
||||
},
|
||||
"by_day": {
|
||||
"2026-10-26": {
|
||||
"total": 70,
|
||||
"errors": 16,
|
||||
"error_rate": 0.2286
|
||||
},
|
||||
"2026-10-27": {
|
||||
"total": 62,
|
||||
"errors": 0,
|
||||
"error_rate": 0
|
||||
},
|
||||
"2026-10-28": {
|
||||
"total": 64,
|
||||
"errors": 0,
|
||||
"error_rate": 0
|
||||
},
|
||||
"2026-10-29": {
|
||||
"total": 97,
|
||||
"errors": 5,
|
||||
"error_rate": 0.0515
|
||||
},
|
||||
"2026-10-30": {
|
||||
"total": 64,
|
||||
"errors": 0,
|
||||
"error_rate": 0
|
||||
}
|
||||
},
|
||||
"by_release": {
|
||||
"1.0.0": {
|
||||
"answers": 110,
|
||||
"repeats": 3,
|
||||
"repeat_rate": 0.0273
|
||||
},
|
||||
"1.1.0": {
|
||||
"answers": 181,
|
||||
"repeats": 14,
|
||||
"repeat_rate": 0.0773
|
||||
},
|
||||
"1.2.0": {
|
||||
"answers": 8,
|
||||
"repeats": 5,
|
||||
"repeat_rate": 0.625
|
||||
}
|
||||
},
|
||||
"steps": {
|
||||
"faq_ms": {
|
||||
"runs": 337,
|
||||
"p50": 28,
|
||||
"p95": 40
|
||||
},
|
||||
"answer_ms": {
|
||||
"runs": 304,
|
||||
"p50": 1162,
|
||||
"p95": 2532
|
||||
}
|
||||
},
|
||||
"cost_usd": 0.03981,
|
||||
"cost_per_run": 0.000112,
|
||||
"llm_calls": 304,
|
||||
"failures": [
|
||||
{
|
||||
"node": "Search FAQ",
|
||||
"message": "timeout of 1000ms exceeded",
|
||||
"count": 16
|
||||
},
|
||||
{
|
||||
"node": "Answer",
|
||||
"message": "429 Rate limit reached for requests",
|
||||
"count": 5
|
||||
}
|
||||
],
|
||||
"unanswered_topics": [
|
||||
{
|
||||
"topic": "와이파이",
|
||||
"count": 17
|
||||
}
|
||||
],
|
||||
"anomalies": [
|
||||
{
|
||||
"hour": "2026-10-26T09",
|
||||
"total": 16,
|
||||
"errors": 16,
|
||||
"error_rate": 1
|
||||
},
|
||||
{
|
||||
"hour": "2026-10-29T15",
|
||||
"total": 7,
|
||||
"errors": 5,
|
||||
"error_rate": 0.7143
|
||||
}
|
||||
],
|
||||
"repeat_topics": [
|
||||
{
|
||||
"topic": "프린터",
|
||||
"answers": 36,
|
||||
"repeats": 4,
|
||||
"repeat_rate": 0.1111
|
||||
},
|
||||
{
|
||||
"topic": "설치",
|
||||
"answers": 24,
|
||||
"repeats": 2,
|
||||
"repeat_rate": 0.0833
|
||||
},
|
||||
{
|
||||
"topic": "비밀번호",
|
||||
"answers": 70,
|
||||
"repeats": 5,
|
||||
"repeat_rate": 0.0714
|
||||
},
|
||||
{
|
||||
"topic": "접수 현황",
|
||||
"answers": 56,
|
||||
"repeats": 4,
|
||||
"repeat_rate": 0.0714
|
||||
},
|
||||
{
|
||||
"topic": "메일",
|
||||
"answers": 48,
|
||||
"repeats": 3,
|
||||
"repeat_rate": 0.0625
|
||||
},
|
||||
{
|
||||
"topic": "VPN",
|
||||
"answers": 65,
|
||||
"repeats": 4,
|
||||
"repeat_rate": 0.0615
|
||||
}
|
||||
],
|
||||
"unanswered_rate": 0.0476,
|
||||
"slo": {
|
||||
"ok": false,
|
||||
"breaches": [
|
||||
"error_rate",
|
||||
"unanswered_rate"
|
||||
],
|
||||
"limits": {
|
||||
"error_rate": 0.01,
|
||||
"p95_ms": 3000,
|
||||
"unanswered_rate": 0.02
|
||||
}
|
||||
}
|
||||
}
|
||||
✔ 첫 주 · 답 못 함만 · 0.1s · 292 calls · $0.038550
|
||||
→ request POST /webhook/my-log-report
|
||||
{
|
||||
"from": "2026-10-19",
|
||||
"to": "2026-10-23"
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"total": 309,
|
||||
"errors": 0,
|
||||
"error_rate": 0,
|
||||
"p50_ms": 1252,
|
||||
"p95_ms": 2525,
|
||||
"by_route": {
|
||||
"자동 답변": 292,
|
||||
"담당자 연결": 17
|
||||
},
|
||||
"by_day": {
|
||||
"2026-10-19": {
|
||||
"total": 73,
|
||||
"errors": 0,
|
||||
"error_rate": 0
|
||||
},
|
||||
"2026-10-20": {
|
||||
"total": 57,
|
||||
"errors": 0,
|
||||
"error_rate": 0
|
||||
},
|
||||
"2026-10-21": {
|
||||
"total": 60,
|
||||
"errors": 0,
|
||||
"error_rate": 0
|
||||
},
|
||||
"2026-10-22": {
|
||||
"total": 55,
|
||||
"errors": 0,
|
||||
"error_rate": 0
|
||||
},
|
||||
"2026-10-23": {
|
||||
"total": 64,
|
||||
"errors": 0,
|
||||
"error_rate": 0
|
||||
}
|
||||
},
|
||||
"by_release": {
|
||||
"1.0.0": {
|
||||
"answers": 292,
|
||||
"repeats": 16,
|
||||
"repeat_rate": 0.0548
|
||||
}
|
||||
},
|
||||
"steps": {
|
||||
"faq_ms": {
|
||||
"runs": 309,
|
||||
"p50": 27,
|
||||
"p95": 39
|
||||
},
|
||||
"answer_ms": {
|
||||
"runs": 292,
|
||||
"p50": 1200,
|
||||
"p95": 2470
|
||||
}
|
||||
},
|
||||
"cost_usd": 0.03855,
|
||||
"cost_per_run": 0.000125,
|
||||
"llm_calls": 292,
|
||||
"failures": [],
|
||||
"unanswered_topics": [
|
||||
{
|
||||
"topic": "와이파이",
|
||||
"count": 17
|
||||
}
|
||||
],
|
||||
"anomalies": [],
|
||||
"repeat_topics": [
|
||||
{
|
||||
"topic": "프린터",
|
||||
"answers": 45,
|
||||
"repeats": 4,
|
||||
"repeat_rate": 0.0889
|
||||
},
|
||||
{
|
||||
"topic": "VPN",
|
||||
"answers": 59,
|
||||
"repeats": 4,
|
||||
"repeat_rate": 0.0678
|
||||
},
|
||||
{
|
||||
"topic": "비밀번호",
|
||||
"answers": 69,
|
||||
"repeats": 4,
|
||||
"repeat_rate": 0.058
|
||||
},
|
||||
{
|
||||
"topic": "접수 현황",
|
||||
"answers": 40,
|
||||
"repeats": 2,
|
||||
"repeat_rate": 0.05
|
||||
},
|
||||
{
|
||||
"topic": "메일",
|
||||
"answers": 42,
|
||||
"repeats": 2,
|
||||
"repeat_rate": 0.0476
|
||||
}
|
||||
],
|
||||
"unanswered_rate": 0.055,
|
||||
"slo": {
|
||||
"ok": false,
|
||||
"breaches": [
|
||||
"unanswered_rate"
|
||||
],
|
||||
"limits": {
|
||||
"error_rate": 0.01,
|
||||
"p95_ms": 3000,
|
||||
"unanswered_rate": 0.02
|
||||
}
|
||||
}
|
||||
}
|
||||
✔ 기준을 바꾸면 · 첫 주 · 0.1s · 292 calls · $0.038550
|
||||
→ request POST /webhook/my-log-report
|
||||
{
|
||||
"from": "2026-10-19",
|
||||
"to": "2026-10-23",
|
||||
"slo": {
|
||||
"unanswered_rate": 0.06
|
||||
}
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"total": 309,
|
||||
"errors": 0,
|
||||
"error_rate": 0,
|
||||
"p50_ms": 1252,
|
||||
"p95_ms": 2525,
|
||||
"by_route": {
|
||||
"자동 답변": 292,
|
||||
"담당자 연결": 17
|
||||
},
|
||||
"by_day": {
|
||||
"2026-10-19": {
|
||||
"total": 73,
|
||||
"errors": 0,
|
||||
"error_rate": 0
|
||||
},
|
||||
"2026-10-20": {
|
||||
"total": 57,
|
||||
"errors": 0,
|
||||
"error_rate": 0
|
||||
},
|
||||
"2026-10-21": {
|
||||
"total": 60,
|
||||
"errors": 0,
|
||||
"error_rate": 0
|
||||
},
|
||||
"2026-10-22": {
|
||||
"total": 55,
|
||||
"errors": 0,
|
||||
"error_rate": 0
|
||||
},
|
||||
"2026-10-23": {
|
||||
"total": 64,
|
||||
"errors": 0,
|
||||
"error_rate": 0
|
||||
}
|
||||
},
|
||||
"by_release": {
|
||||
"1.0.0": {
|
||||
"answers": 292,
|
||||
"repeats": 16,
|
||||
"repeat_rate": 0.0548
|
||||
}
|
||||
},
|
||||
"steps": {
|
||||
"faq_ms": {
|
||||
"runs": 309,
|
||||
"p50": 27,
|
||||
"p95": 39
|
||||
},
|
||||
"answer_ms": {
|
||||
"runs": 292,
|
||||
"p50": 1200,
|
||||
"p95": 2470
|
||||
}
|
||||
},
|
||||
"cost_usd": 0.03855,
|
||||
"cost_per_run": 0.000125,
|
||||
"llm_calls": 292,
|
||||
"failures": [],
|
||||
"unanswered_topics": [
|
||||
{
|
||||
"topic": "와이파이",
|
||||
"count": 17
|
||||
}
|
||||
],
|
||||
"anomalies": [],
|
||||
"repeat_topics": [
|
||||
{
|
||||
"topic": "프린터",
|
||||
"answers": 45,
|
||||
"repeats": 4,
|
||||
"repeat_rate": 0.0889
|
||||
},
|
||||
{
|
||||
"topic": "VPN",
|
||||
"answers": 59,
|
||||
"repeats": 4,
|
||||
"repeat_rate": 0.0678
|
||||
},
|
||||
{
|
||||
"topic": "비밀번호",
|
||||
"answers": 69,
|
||||
"repeats": 4,
|
||||
"repeat_rate": 0.058
|
||||
},
|
||||
{
|
||||
"topic": "접수 현황",
|
||||
"answers": 40,
|
||||
"repeats": 2,
|
||||
"repeat_rate": 0.05
|
||||
},
|
||||
{
|
||||
"topic": "메일",
|
||||
"answers": 42,
|
||||
"repeats": 2,
|
||||
"repeat_rate": 0.0476
|
||||
}
|
||||
],
|
||||
"unanswered_rate": 0.055,
|
||||
"slo": {
|
||||
"ok": true,
|
||||
"breaches": [],
|
||||
"limits": {
|
||||
"error_rate": 0.01,
|
||||
"p95_ms": 3000,
|
||||
"unanswered_rate": 0.06
|
||||
}
|
||||
}
|
||||
}
|
||||
✔ 고친 뒤 · 오류 · 답 못 함 기준은 지킴 · 0.2s · 10 calls · $0.000000
|
||||
→ request POST /webhook/my-log-report
|
||||
{
|
||||
"tag": "after",
|
||||
"source": "live"
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"total": 10,
|
||||
"errors": 0,
|
||||
"error_rate": 0,
|
||||
"p50_ms": 2342,
|
||||
"p95_ms": 3560,
|
||||
"by_route": {
|
||||
"자동 답변": 10
|
||||
},
|
||||
"by_day": {
|
||||
"2026-10-31": {
|
||||
"total": 10,
|
||||
"errors": 0,
|
||||
"error_rate": 0
|
||||
}
|
||||
},
|
||||
"by_release": {
|
||||
"1.1.0": {
|
||||
"answers": 10,
|
||||
"repeats": 0,
|
||||
"repeat_rate": 0
|
||||
}
|
||||
},
|
||||
"steps": {
|
||||
"faq_ms": {
|
||||
"runs": 10,
|
||||
"p50": 1238,
|
||||
"p95": 1278
|
||||
},
|
||||
"answer_ms": {
|
||||
"runs": 10,
|
||||
"p50": 1103,
|
||||
"p95": 2282
|
||||
}
|
||||
},
|
||||
"cost_usd": 0,
|
||||
"cost_per_run": 0,
|
||||
"llm_calls": 10,
|
||||
"failures": [],
|
||||
"unanswered_topics": [],
|
||||
"anomalies": [],
|
||||
"repeat_topics": [],
|
||||
"unanswered_rate": 0,
|
||||
"slo": {
|
||||
"ok": false,
|
||||
"breaches": [
|
||||
"p95_ms"
|
||||
],
|
||||
"limits": {
|
||||
"error_rate": 0.01,
|
||||
"p95_ms": 3000,
|
||||
"unanswered_rate": 0.02
|
||||
}
|
||||
}
|
||||
}
|
||||
Passed 4/4
|
||||
report: runs/lab03-slo-20261031-075213.json
|
||||
|
||||
$ uv run tools/flow.py call my-log-report '{"tag": "after", "source": "live"}'
|
||||
HTTP 200 · 0.0s
|
||||
{
|
||||
"total": 10,
|
||||
"errors": 0,
|
||||
"error_rate": 0,
|
||||
"p50_ms": 2342,
|
||||
"p95_ms": 3560,
|
||||
"by_route": {
|
||||
"자동 답변": 10
|
||||
},
|
||||
"by_day": {
|
||||
"2026-10-31": {
|
||||
"total": 10,
|
||||
"errors": 0,
|
||||
"error_rate": 0
|
||||
}
|
||||
},
|
||||
"by_release": {
|
||||
"1.1.0": {
|
||||
"answers": 10,
|
||||
"repeats": 0,
|
||||
"repeat_rate": 0
|
||||
}
|
||||
},
|
||||
"steps": {
|
||||
"faq_ms": {
|
||||
"runs": 10,
|
||||
"p50": 1238,
|
||||
"p95": 1278
|
||||
},
|
||||
"answer_ms": {
|
||||
"runs": 10,
|
||||
"p50": 1103,
|
||||
"p95": 2282
|
||||
}
|
||||
},
|
||||
"cost_usd": 0,
|
||||
"cost_per_run": 0,
|
||||
"llm_calls": 10,
|
||||
"failures": [],
|
||||
"unanswered_topics": [],
|
||||
"anomalies": [],
|
||||
"repeat_topics": [],
|
||||
"unanswered_rate": 0,
|
||||
"slo": {
|
||||
"ok": false,
|
||||
"breaches": [
|
||||
"p95_ms"
|
||||
],
|
||||
"limits": {
|
||||
"error_rate": 0.01,
|
||||
"p95_ms": 3000,
|
||||
"unanswered_rate": 0.02
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$ uv run tools/flow.py test cases/lab02-challenge.json
|
||||
POST http://localhost:5678/webhook/my-log-report · 5 case(s) × 1
|
||||
✔ 두 주 · 다시 묻는 비율이 가장 높은 주제 · 0.1s · 596 calls · $0.078360
|
||||
✔ 두 주 · 수로는 비밀번호가 가장 많지만 비율은 2위 · 0.1s · 596 calls · $0.078360
|
||||
✔ 두 주 · 다시 물은 주제는 6개 · 0.1s · 596 calls · $0.078360
|
||||
✔ 첫 주 · 설치는 다시 묻지 않음 · 0.1s · 292 calls · $0.038550
|
||||
✔ 앞의 지표는 그대로 · 0.1s · 596 calls · $0.078360
|
||||
Passed 5/5
|
||||
report: runs/lab02-challenge-20261031-075213.json
|
||||
Reference in new issue
Block a user