7.0 KiB
7.0 KiB
Lab 03 · 품질 관리 · 스키마로 넓히고, 고쳐서 다시, 추세로 보기
강사용 정답본 · 학생 저장소에는 수업이 끝난 뒤 올립니다. 학생용 문제는 LAB-03-Q-QUALITY-MANAGEMENT.md. 요청문은 예시이며 CLI 에이전트로 보내 재지는 않았습니다. 결과 숫자는 2026-11-01 정답 워크플로우 1회 실행 값입니다. 명령 · 출력 전부: answers/LAB-TEST-RESULT.md.
예제 1 · 요청문 예
my-work/check.json 을 새로 만들어 줘. 웹훅 POST my-check, 이름 "78 Schema check (my)".
Get schema: HTTP GET http://data-api:8800/schemas/<본문 schema> (neverError). 스키마가 없으면(fields 가 없음) HTTP 400 {error: "unknown schema", schema}.
Check rows(Code): 본문 csv 가 있으면 첫 줄을 열 이름으로 쉼표로 나눠 줄로 바꾸고, items 가 있으면 그대로.
필드 규칙은 코드에 쓰지 말고 스키마의 fields 를 읽어 AGENTS.md 3절 타입 표대로 (required · string · enum · email · phone · date · pattern · list), 키는 배치 안 중복.
결과 {schema, batch, total, valid, invalid, rows: [{row (1부터), key, ok, errors}], codes}. 기대 결과 cases/lab03.json.
빈칸 답
| 빈칸 | 답 | 왜 |
|---|---|---|
| ① | 400 |
모르는 스키마는 검사할 수 없음 |
| ② | 열 이름 | name,dept,email,phone,joined |
| ③ | fields |
규칙을 데이터(스키마)로 두면 새 데이터셋에 워크플로우를 고치지 않음 (예제 3) |
| ④ | 1부터 | CSV의 열 이름 줄을 빼고 사람이 세는 번호 |
정답: reference/lab03-example1-schema-check.json
| 11/01 결과 | |
|---|---|
고치기 전 (answers/17) |
FAQ 검사에 직원 CSV → 400 (items must be a list), lab03 0/4 (404) |
고친 뒤 (answers/18) |
4/4 · 직원 9줄 중 4줄 (메일 · 팀 · 13월 · 이름 없음 · 중복), FAQ 스키마로 B-3 6줄 중 5줄, 모르는 스키마 400 |
스키마로 하는 것 · 못 하는 것 (QUALITY.md 8절 예)
| 규칙 | 스키마로 | 따로 |
|---|---|---|
| 필수 · 길이 · 형식 · 목록 · 중복 | ✔ | |
| 개인정보 (답 안의 전화 · 메일) | Code (Lab 01) | |
| 이미 있는 데이터와 겹침 | Code + 데이터 API (Lab 01 과제 1) | |
| 답이 질문에 맞나 | LLM (Lab 02 예제 2) |
예제 2 · 요청문 예
my-work/faq-import.json 에서 고쳐서 다시 넣은 줄을 격리함에서 빼 줘.
Summarize 뒤에 Release fixed: POST http://data-api:8800/quarantine/remove {ids: imported_ids}.
넣은 줄만 뺀다 — 이번에도 걸린 줄은 격리함에 남는다. 품질 기록 · 알림은 그대로.
응답은 Summarize 의 결과를 다시 (Release fixed 의 응답이 아님). 기대 결과 cases/lab03-fix.json.
빈칸 답
| 빈칸 | 답 | 왜 |
|---|---|---|
| ① | imported_ids |
이번에 넣은 id |
| ② | 남는다 | 고쳤는데 또 틀린 줄은 다시 사람에게 |
| ③ | 그대로 | Lab 02 과제 1의 기록 · 알림 |
| ④ | 다시 | HTTP 노드의 출력은 API 응답 — 결과는 Summarize에서 다시 꺼냄 |
정답: reference/lab03-example2-import.json
| 11/01 결과 | |
|---|---|
고치기 전 (answers/19) |
3/4 · 넣기는 됨(score 1 · FAQ 16), 격리함 2 그대로 |
고친 뒤 (answers/20) |
4/4 · 격리함 0, 기록 0.8 → 1 |
예제 3 · 결과 (에이전트 없이, answers/21)
| FAQ 검사 | 스키마 검사 (고치지 않음) | |
|---|---|---|
| 접수 건 9줄 | 0줄 통과 (id_format · keywords_missing · answer_missing 9, 빈 id 중복 8) |
2줄 통과, 줄마다 다른 이유 7가지 |
| 테스트 | — | 5/5 (직원 CSV 4/9 그대로) |
- 풀이 때: "스키마 파일 한 장으로 새 데이터셋" — 그래서 스키마 변경은 규칙 변경이라 리뷰가 필요 (74일차 관문).
과제 1 · 요청문 예
my-work/quality-report.json 을 새로 만들어 줘. 웹훅 POST my-quality-report, 이름 "78 Quality report (my)".
Get log: HTTP GET http://data-api:8800/quality-log. 본문에 dataset 이 있으면 그 데이터셋만.
Make report(Code) 하나에서 AGENTS.md 3절 "품질 보고서" 정의대로 count · batches · avg_score (소수 4자리, 0건이면 0) · worst_batch (같으면 먼저 나온 것) · rejected_batches.
top_codes: 모든 기록의 codes 를 더해 많은 순, 같으면 코드 글자순. trend: 마지막 score − 첫 score 가 0.05 넘으면 좋아짐, −0.05 미만이면 나빠짐, 아니면 그대로.
LLM 은 쓰지 않는다. 기대 결과 cases/lab03-challenge.json.
빈칸 답
| 빈칸 | 답 | 왜 |
|---|---|---|
| ① | 4 |
0.65833…을 0.6583으로 |
| ② | 먼저 나온 것 | 같은 점수면 순서로 하나를 정함 — 늘 같은 답 |
| ③ | 글자순 | 같은 수면 코드 이름으로 — 늘 같은 순서 |
| ④ | 그대로 | 1건뿐이거나 차이가 작으면 |
정답: answers/78-lab03-challenge-report.json
| 11/01 결과 | |
|---|---|
고치기 전 (answers/22) |
0/4 · 404 (기록 4줄은 생김, B-1 ! allow_fail) |
고친 뒤 (answers/23) |
4/4 · 4 · 0.6583 · B-1 · 거절 1, pii 2, 좋아짐 |
- 풀이 때: 거절을 빼면 0.8778.
trend가 "13줄 거절 → 고친 2줄"을 비교한 것이라는 함정.
과제 2 · 요청문 예
두 워크플로우를 고쳐 줘.
① my-work/check.json: 검사가 끝나면 POST http://data-api:8800/quality-log 한 줄 {batch, dataset: schema, total, valid, quarantined: invalid, rejected: false, score: valid / total (4자리), codes}. 응답은 검사 결과 그대로.
② my-work/quality-report.json: by_dataset — 모든 기록을 dataset 마다 {count, avg_score, worst_batch, top_code} (처음 나온 순서), worst_dataset — avg_score 가 가장 낮은 데이터셋.
본문의 dataset 거르기와 앞의 칸은 그대로. 기대 결과 cases/lab03-challenge2.json, lab03 · lab03-challenge 도.
빈칸 답
| 빈칸 | 답 | 왜 |
|---|---|---|
| ① | schema |
직원 · 티켓 · FAQ가 데이터셋 이름 |
| ② | 처음 나온 | 보고서가 늘 같은 순서 |
| ③ | 낮은 | 가장 손볼 데이터셋 |
| ④ | 그대로 | lab03-challenge 4/4가 그대로여야 함 |
정답: answers/78-lab03-challenge2-check-log.json · answers/78-lab03-challenge2-report.json
| 11/01 결과 | |
|---|---|
고치기 전 (answers/24) |
0/4 · 기록 1줄 (FAQ만), by_dataset 없음 |
고친 뒤 (answers/25) |
4/4 · employee 0.4444 · ticket 0.2222 · faq 0.8333, worst_dataset ticket, 전체 0.5. lab03 · lab03-challenge 4/4 |
- 풀이 때: 섞은
trend(좋아짐)는 직원 → FAQ를 비교한 것 — 추세는 데이터셋 안에서.