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,386 @@
|
||||
$ uv run tools/flow.py push reference/helpdesk-live.json
|
||||
✔ pushed '77 Live helpdesk (provided)' (id wb754efbe6b67af7)
|
||||
POST http://localhost:5678/webhook/my-helpdesk
|
||||
|
||||
$ uv run tools/flow.py test cases/replay-before.json -v
|
||||
✔ before: POST http://localhost:8800/logs-reset · HTTP 200 · 0.0s · {"cleared": 0}
|
||||
→ request POST http://localhost:8800/logs-reset
|
||||
{}
|
||||
← response HTTP 200
|
||||
{
|
||||
"cleared": 0
|
||||
}
|
||||
✔ before: POST http://localhost:8800/faq-reset · HTTP 200 · 0.0s · {"cleared": 0}
|
||||
→ request POST http://localhost:8800/faq-reset
|
||||
{}
|
||||
← response HTTP 200
|
||||
{
|
||||
"cleared": 0
|
||||
}
|
||||
✔ before: POST http://localhost:8800/admin/fault · HTTP 200 · 0.0s · {"faq": "slow", "tickets": "ok", "prompts": "ok", "usage": "ok", "dlq": "ok", "slow_seconds": 1.2}
|
||||
→ request POST http://localhost:8800/admin/fault
|
||||
{
|
||||
"faq": "slow",
|
||||
"slow_seconds": 1.2
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"faq": "slow",
|
||||
"tickets": "ok",
|
||||
"prompts": "ok",
|
||||
"usage": "ok",
|
||||
"dlq": "ok",
|
||||
"slow_seconds": 1.2
|
||||
}
|
||||
POST http://localhost:5678/webhook/my-helpdesk · 10 case(s) × 1
|
||||
✔ before · 회의실 와이파이가 안 · 2.1s
|
||||
→ request POST /webhook/my-helpdesk
|
||||
{
|
||||
"question": "회의실 와이파이가 안 잡혀요",
|
||||
"user": "이준호",
|
||||
"tag": "before"
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"route": "담당자 연결",
|
||||
"status": "error",
|
||||
"topic": "와이파이",
|
||||
"answer": "지금은 답할 수 없어 담당자에게 연결합니다.",
|
||||
"error": "timeout of 1000ms exceeded"
|
||||
}
|
||||
✔ before · 사내 Wi-Fi 비밀번 · 1.2s
|
||||
→ request POST /webhook/my-helpdesk
|
||||
{
|
||||
"question": "사내 Wi-Fi 비밀번호가 뭐예요?",
|
||||
"user": "박서연",
|
||||
"tag": "before"
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"route": "담당자 연결",
|
||||
"status": "error",
|
||||
"topic": "와이파이",
|
||||
"answer": "지금은 답할 수 없어 담당자에게 연결합니다.",
|
||||
"error": "timeout of 1000ms exceeded"
|
||||
}
|
||||
✔ before · 와이파이가 자주 끊겨요 · 1.2s
|
||||
→ request POST /webhook/my-helpdesk
|
||||
{
|
||||
"question": "와이파이가 자주 끊겨요",
|
||||
"user": "최유진",
|
||||
"tag": "before"
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"route": "담당자 연결",
|
||||
"status": "error",
|
||||
"topic": "와이파이",
|
||||
"answer": "지금은 답할 수 없어 담당자에게 연결합니다.",
|
||||
"error": "timeout of 1000ms exceeded"
|
||||
}
|
||||
✔ before · 노트북이 와이파이에 연 · 1.1s
|
||||
→ request POST /webhook/my-helpdesk
|
||||
{
|
||||
"question": "노트북이 와이파이에 연결이 안 돼요",
|
||||
"user": "한지훈",
|
||||
"tag": "before"
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"route": "담당자 연결",
|
||||
"status": "error",
|
||||
"topic": "와이파이",
|
||||
"answer": "지금은 답할 수 없어 담당자에게 연결합니다.",
|
||||
"error": "timeout of 1000ms exceeded"
|
||||
}
|
||||
✔ before · 손님용 wifi도 있나 · 1.1s
|
||||
→ request POST /webhook/my-helpdesk
|
||||
{
|
||||
"question": "손님용 wifi도 있나요?",
|
||||
"user": "김민지",
|
||||
"tag": "before"
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"route": "담당자 연결",
|
||||
"status": "error",
|
||||
"topic": "와이파이",
|
||||
"answer": "지금은 답할 수 없어 담당자에게 연결합니다.",
|
||||
"error": "timeout of 1000ms exceeded"
|
||||
}
|
||||
✔ before · VPN이 자꾸 끊겨요 · 1.1s
|
||||
→ request POST /webhook/my-helpdesk
|
||||
{
|
||||
"question": "VPN이 자꾸 끊겨요",
|
||||
"user": "정우성",
|
||||
"tag": "before"
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"route": "담당자 연결",
|
||||
"status": "error",
|
||||
"topic": "VPN",
|
||||
"answer": "지금은 답할 수 없어 담당자에게 연결합니다.",
|
||||
"error": "timeout of 1000ms exceeded"
|
||||
}
|
||||
✔ before · 비밀번호를 잊어버렸어요 · 1.1s
|
||||
→ request POST /webhook/my-helpdesk
|
||||
{
|
||||
"question": "비밀번호를 잊어버렸어요",
|
||||
"user": "오세훈",
|
||||
"tag": "before"
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"route": "담당자 연결",
|
||||
"status": "error",
|
||||
"topic": "비밀번호",
|
||||
"answer": "지금은 답할 수 없어 담당자에게 연결합니다.",
|
||||
"error": "timeout of 1000ms exceeded"
|
||||
}
|
||||
✔ before · 프린터 출력이 안 돼요 · 1.1s
|
||||
→ request POST /webhook/my-helpdesk
|
||||
{
|
||||
"question": "프린터 출력이 안 돼요",
|
||||
"user": "윤하늘",
|
||||
"tag": "before"
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"route": "담당자 연결",
|
||||
"status": "error",
|
||||
"topic": "프린터",
|
||||
"answer": "지금은 답할 수 없어 담당자에게 연결합니다.",
|
||||
"error": "timeout of 1000ms exceeded"
|
||||
}
|
||||
✔ before · 메일함 용량이 꽉 찼대 · 1.1s
|
||||
→ request POST /webhook/my-helpdesk
|
||||
{
|
||||
"question": "메일함 용량이 꽉 찼대요",
|
||||
"user": "강민수",
|
||||
"tag": "before"
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"route": "담당자 연결",
|
||||
"status": "error",
|
||||
"topic": "메일",
|
||||
"answer": "지금은 답할 수 없어 담당자에게 연결합니다.",
|
||||
"error": "timeout of 1000ms exceeded"
|
||||
}
|
||||
✔ before · 새 프로그램 설치는 어 · 1.1s
|
||||
→ request POST /webhook/my-helpdesk
|
||||
{
|
||||
"question": "새 프로그램 설치는 어떻게 신청하나요?",
|
||||
"user": "서지아",
|
||||
"tag": "before"
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"route": "담당자 연결",
|
||||
"status": "error",
|
||||
"topic": "설치",
|
||||
"answer": "지금은 답할 수 없어 담당자에게 연결합니다.",
|
||||
"error": "timeout of 1000ms exceeded"
|
||||
}
|
||||
Passed 10/10
|
||||
report: runs/replay-before-20261031-075117.json
|
||||
✔ after: POST http://localhost:8800/admin/fault · HTTP 200 · 0.0s · {"faq": "ok", "tickets": "ok", "prompts": "ok", "usage": "ok", "dlq": "ok", "slow_seconds": 1.2}
|
||||
→ request POST http://localhost:8800/admin/fault
|
||||
{
|
||||
"faq": "ok",
|
||||
"tickets": "ok"
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"faq": "ok",
|
||||
"tickets": "ok",
|
||||
"prompts": "ok",
|
||||
"usage": "ok",
|
||||
"dlq": "ok",
|
||||
"slow_seconds": 1.2
|
||||
}
|
||||
|
||||
$ uv run tools/flow.py logs --tag before --source live --last 3
|
||||
10 run(s) · errors 10 (100.0%)
|
||||
route: 오류 10
|
||||
2026-10-31T07:51:15 error None 1034ms 프린터 Search FAQ 프린터 출력이 안 돼요
|
||||
2026-10-31T07:51:16 error None 1035ms 메일 Search FAQ 메일함 용량이 꽉 찼대요
|
||||
2026-10-31T07:51:17 error None 1032ms 설치 Search FAQ 새 프로그램 설치는 어떻게 신청하나요?
|
||||
|
||||
$ uv run tools/flow.py test cases/lab03.json -v
|
||||
POST http://localhost:5678/webhook/my-log-report · 4 case(s) × 1
|
||||
✔ 고치기 전 · 10건 모두 실패 · 0.1s · 0 calls · $0.000000
|
||||
→ request POST /webhook/my-log-report
|
||||
{
|
||||
"tag": "before",
|
||||
"source": "live"
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"total": 10,
|
||||
"errors": 10,
|
||||
"error_rate": 1,
|
||||
"p50_ms": 1043,
|
||||
"p95_ms": 1098,
|
||||
"by_route": {
|
||||
"오류": 10
|
||||
},
|
||||
"by_day": {
|
||||
"2026-10-31": {
|
||||
"total": 10,
|
||||
"errors": 10,
|
||||
"error_rate": 1
|
||||
}
|
||||
},
|
||||
"by_release": {},
|
||||
"steps": {
|
||||
"faq_ms": {
|
||||
"runs": 10,
|
||||
"p50": 1043,
|
||||
"p95": 1098
|
||||
},
|
||||
"answer_ms": {
|
||||
"runs": 0,
|
||||
"p50": 0,
|
||||
"p95": 0
|
||||
}
|
||||
},
|
||||
"cost_usd": 0,
|
||||
"cost_per_run": 0,
|
||||
"llm_calls": 0,
|
||||
"failures": [
|
||||
{
|
||||
"node": "Search FAQ",
|
||||
"message": "timeout of 1000ms exceeded",
|
||||
"count": 10
|
||||
}
|
||||
],
|
||||
"unanswered_topics": [],
|
||||
"anomalies": [],
|
||||
"repeat_topics": []
|
||||
}
|
||||
✔ 고치기 전 · FAQ timeout · 0.1s · 0 calls · $0.000000
|
||||
→ request POST /webhook/my-log-report
|
||||
{
|
||||
"tag": "before",
|
||||
"source": "live"
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"total": 10,
|
||||
"errors": 10,
|
||||
"error_rate": 1,
|
||||
"p50_ms": 1043,
|
||||
"p95_ms": 1098,
|
||||
"by_route": {
|
||||
"오류": 10
|
||||
},
|
||||
"by_day": {
|
||||
"2026-10-31": {
|
||||
"total": 10,
|
||||
"errors": 10,
|
||||
"error_rate": 1
|
||||
}
|
||||
},
|
||||
"by_release": {},
|
||||
"steps": {
|
||||
"faq_ms": {
|
||||
"runs": 10,
|
||||
"p50": 1043,
|
||||
"p95": 1098
|
||||
},
|
||||
"answer_ms": {
|
||||
"runs": 0,
|
||||
"p50": 0,
|
||||
"p95": 0
|
||||
}
|
||||
},
|
||||
"cost_usd": 0,
|
||||
"cost_per_run": 0,
|
||||
"llm_calls": 0,
|
||||
"failures": [
|
||||
{
|
||||
"node": "Search FAQ",
|
||||
"message": "timeout of 1000ms exceeded",
|
||||
"count": 10
|
||||
}
|
||||
],
|
||||
"unanswered_topics": [],
|
||||
"anomalies": [],
|
||||
"repeat_topics": []
|
||||
}
|
||||
✘ 고친 뒤 · 오류 없음 · 0.1s · 0 calls · $0.000000 · total = 0 (expected 10); by_route.자동 답변 = null (expected 10)
|
||||
→ request POST /webhook/my-log-report
|
||||
{
|
||||
"tag": "after",
|
||||
"source": "live"
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"total": 0,
|
||||
"errors": 0,
|
||||
"error_rate": 0,
|
||||
"p50_ms": 0,
|
||||
"p95_ms": 0,
|
||||
"by_route": {},
|
||||
"by_day": {},
|
||||
"by_release": {},
|
||||
"steps": {
|
||||
"faq_ms": {
|
||||
"runs": 0,
|
||||
"p50": 0,
|
||||
"p95": 0
|
||||
},
|
||||
"answer_ms": {
|
||||
"runs": 0,
|
||||
"p50": 0,
|
||||
"p95": 0
|
||||
}
|
||||
},
|
||||
"cost_usd": 0,
|
||||
"cost_per_run": 0,
|
||||
"llm_calls": 0,
|
||||
"failures": [],
|
||||
"unanswered_topics": [],
|
||||
"anomalies": [],
|
||||
"repeat_topics": []
|
||||
}
|
||||
✔ 고친 뒤 · 답하지 못한 주제 없음 · 0.0s · 0 calls · $0.000000
|
||||
→ request POST /webhook/my-log-report
|
||||
{
|
||||
"tag": "after",
|
||||
"source": "live"
|
||||
}
|
||||
← response HTTP 200
|
||||
{
|
||||
"total": 0,
|
||||
"errors": 0,
|
||||
"error_rate": 0,
|
||||
"p50_ms": 0,
|
||||
"p95_ms": 0,
|
||||
"by_route": {},
|
||||
"by_day": {},
|
||||
"by_release": {},
|
||||
"steps": {
|
||||
"faq_ms": {
|
||||
"runs": 0,
|
||||
"p50": 0,
|
||||
"p95": 0
|
||||
},
|
||||
"answer_ms": {
|
||||
"runs": 0,
|
||||
"p50": 0,
|
||||
"p95": 0
|
||||
}
|
||||
},
|
||||
"cost_usd": 0,
|
||||
"cost_per_run": 0,
|
||||
"llm_calls": 0,
|
||||
"failures": [],
|
||||
"unanswered_topics": [],
|
||||
"anomalies": [],
|
||||
"repeat_topics": []
|
||||
}
|
||||
Passed 3/4
|
||||
report: runs/lab03-20261031-075118.json
|
||||
Reference in new issue
Block a user