75일차 답 추가: 실습 정답 문서 · VIBE-A · 정답 워크플로우와 25단계 실행 기록 · tcost

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
mcchaeandClaude Opus 5.5 committed 2026-10-29 09:57:32 +09:00
1 parent 01dc892303
commit ebff58c72e
79 files changed
+18753

No files matched your search

+242
View File
@@ -0,0 +1,242 @@
$ uv run tools/flow.py push answers/75-lab03-challenge-report.json
✔ pushed '75 Cost report (answer)' (id w1f9c668c0305daf)
POST http://localhost:5678/webhook/my-cost-report
$ uv run tools/flow.py test cases/lab03-challenge.json -v
✔ before: POST http://localhost:8800/usage-clear · HTTP 200 · 0.0s · {"cleared": 0}
→ request POST http://localhost:8800/usage-clear
{}
← response HTTP 200
{
"cleared": 0
}
✔ before: POST http://localhost:8800/budget/reset · HTTP 200 · 0.0s · {"daily_usd": 1.0, "user_limit_per_min": 20, "max_question_chars": 500, "used_usd": 0, "remaining_usd": 1.0, "over": fal
→ request POST http://localhost:8800/budget/reset
{}
← response HTTP 200
{
"daily_usd": 1.0,
"user_limit_per_min": 20,
"max_question_chars": 500,
"used_usd": 0,
"remaining_usd": 1.0,
"over": false
}
✔ before: POST http://localhost:8800/usage · HTTP 200 · 0.0s · {"stored": 4, "total": 4}
→ request POST http://localhost:8800/usage
{
"items": [
{
"request_id": "r1",
"user": "이준호",
"step": "answer",
"model": "gpt-4.1-mini",
"prompt_tokens": 1000,
"completion_tokens": 100,
"cost_usd": 0.00056,
"route": "자동 답변"
},
{
"request_id": "r1",
"user": "이준호",
"step": "classify",
"model": "gpt-5.4-nano",
"prompt_tokens": 100,
"completion_tokens": 20,
"cost_usd": 4.5e-05,
"route": "자동 답변"
},
{
"request_id": "r2",
"user": "박서연",
"step": "answer",
"model": "gpt-4.1-mini",
"prompt_tokens": 2000,
"completion_tokens": 200,
"cost_usd": 0.00112,
"route": "자동 답변"
},
{
"request_id": "r3",
"user": "이준호",
"step": "answer",
"model": "gpt-4.1-mini",
"prompt_tokens": 500,
"completion_tokens": 40,
"cost_usd": 0.000264,
"route": "자동 답변"
}
]
}
← response HTTP 200
{
"stored": 4,
"total": 4
}
POST http://localhost:5678/webhook/my-cost-report · 5 case(s) × 1
✔ 요약 숫자 · 0.8s · $0.001989
→ request POST /webhook/my-cost-report
{
"requests_per_day": 100,
"workdays": 22
}
← response HTTP 200
{
"requests": 3,
"calls": 4,
"cost_usd": 0.001989,
"avg_usd": 0.000663,
"by_model": {
"gpt-4.1-mini": 0.001944,
"gpt-5.4-nano": 4.5e-05
},
"top_user": "박서연",
"projected_month_usd": 1.4586,
"daily_budget_usd": 1,
"remaining_usd": 0.998011,
"over_budget": false
}
✔ 모델별 · 한 달 예상 · 0.0s · $0.001989
→ request POST /webhook/my-cost-report
{
"requests_per_day": 100,
"workdays": 22
}
← response HTTP 200
{
"requests": 3,
"calls": 4,
"cost_usd": 0.001989,
"avg_usd": 0.000663,
"by_model": {
"gpt-4.1-mini": 0.001944,
"gpt-5.4-nano": 4.5e-05
},
"top_user": "박서연",
"projected_month_usd": 1.4586,
"daily_budget_usd": 1,
"remaining_usd": 0.998011,
"over_budget": false
}
✔ 작은 모델 몫 · 0.1s · $0.001989
→ request POST /webhook/my-cost-report
{}
← response HTTP 200
{
"requests": 3,
"calls": 4,
"cost_usd": 0.001989,
"avg_usd": 0.000663,
"by_model": {
"gpt-4.1-mini": 0.001944,
"gpt-5.4-nano": 4.5e-05
},
"top_user": "박서연",
"projected_month_usd": 0.043758,
"daily_budget_usd": 1,
"remaining_usd": 0.998011,
"over_budget": false
}
✔ 예산 남은 금액 · 0.0s · $0.001989
→ request POST /webhook/my-cost-report
{}
← response HTTP 200
{
"requests": 3,
"calls": 4,
"cost_usd": 0.001989,
"avg_usd": 0.000663,
"by_model": {
"gpt-4.1-mini": 0.001944,
"gpt-5.4-nano": 4.5e-05
},
"top_user": "박서연",
"projected_month_usd": 0.043758,
"daily_budget_usd": 1,
"remaining_usd": 0.998011,
"over_budget": false
}
✔ before: POST http://localhost:8800/budget · HTTP 200 · 0.0s · {"daily_usd": 0.001, "user_limit_per_min": 20, "max_question_chars": 500, "used_usd": 0.001989, "remaining_usd": -0.0009
→ request POST http://localhost:8800/budget
{
"daily_usd": 0.001
}
← response HTTP 200
{
"daily_usd": 0.001,
"user_limit_per_min": 20,
"max_question_chars": 500,
"used_usd": 0.001989,
"remaining_usd": -0.000989,
"over": true
}
✔ 예산을 넘으면 · 0.1s · $0.001989
→ request POST /webhook/my-cost-report
{}
← response HTTP 200
{
"requests": 3,
"calls": 4,
"cost_usd": 0.001989,
"avg_usd": 0.000663,
"by_model": {
"gpt-4.1-mini": 0.001944,
"gpt-5.4-nano": 4.5e-05
},
"top_user": "박서연",
"projected_month_usd": 0.043758,
"daily_budget_usd": 0.001,
"remaining_usd": -0.000989,
"over_budget": true
}
Passed 5/5
report: runs/lab03-challenge-20261028-211208.json
✔ after: POST http://localhost:8800/budget/reset · HTTP 200 · 0.0s · {"daily_usd": 1.0, "user_limit_per_min": 20, "max_question_chars": 500, "used_usd": 0.001989, "remaining_usd": 0.998011,
→ request POST http://localhost:8800/budget/reset
{}
← response HTTP 200
{
"daily_usd": 1.0,
"user_limit_per_min": 20,
"max_question_chars": 500,
"used_usd": 0.001989,
"remaining_usd": 0.998011,
"over": false
}
✔ after: POST http://localhost:8800/usage-clear · HTTP 200 · 0.0s · {"cleared": 4}
→ request POST http://localhost:8800/usage-clear
{}
← response HTTP 200
{
"cleared": 4
}
$ uv run tools/flow.py test cases/lab02-challenge.json
POST http://localhost:5678/webhook/my-cost · 7 case(s) × 1
✔ faq-vpn · LLM 한 번 · $0.0002 이하 · 1.3s · 자동 답변 · 1 call · $0.000141
✔ faq-password · LLM 한 번 · $0.0002 이하 · 1.5s · 자동 답변 · 1 call · $0.000136
✔ faq-printer · LLM 한 번 · $0.0002 이하 · 1.4s · 자동 답변 · 1 call · $0.000150
✔ faq-mail · LLM 한 번 · $0.0002 이하 · 1.7s · 자동 답변 · 1 call · $0.000140
✔ ticket-own · LLM 한 번 · $0.0002 이하 · 1.2s · 자동 답변 · 1 call · $0.000115
✔ ticket-done · LLM 한 번 · $0.0002 이하 · 1.0s · 자동 답변 · 1 call · $0.000108
✔ 규칙으로 모르는 질문은 분류 + 답 · 1.7s · 자동 답변 · 2 calls · $0.000097
Passed 7/7
report: runs/lab02-challenge-20261028-211218.json
$ uv run tools/flow.py call my-cost-report '{"requests_per_day": 1000}'
HTTP 200 · 0.1s
{
"requests": 7,
"calls": 8,
"cost_usd": 0.000889,
"avg_usd": 0.000127,
"by_model": {
"gpt-4.1-mini": 0.000864,
"gpt-5.4-nano": 2.5e-05
},
"top_user": "이준호",
"projected_month_usd": 2.795257,
"daily_budget_usd": 1,
"remaining_usd": 0.999111,
"over_budget": false
}