Files
aio-01d4-stu/Last3Mon/77/answers/17-lab03-before.txt
T

387 lines
11 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
$ 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