79일차 운영 데이터 기반 Ops Assistant: 실습 15개 · 강의(개요 30장 · 단계 문서 · 4단계 정리 · 05 바이브), 정답본 LAB-A · answers · VIBE-A · tops 포함

This commit is contained in:
mcchae committed 2026-11-03 20:54:35 +09:00
1 parent 9ce9aceba6
commit 6f0ecd59a9
156 files changed
+31640

No files matched your search

+122
View File
@@ -0,0 +1,122 @@
# Lab 03 · 브리핑과 평가 · 먼저 볼 것을 정하고, 도우미를 시험하기
> **강사용 정답본** · 학생 저장소에는 수업이 끝난 뒤 올립니다. 학생용 문제는 [LAB-03-Q-OPS-BRIEF.md](LAB-03-Q-OPS-BRIEF.md).
> 요청문은 예시이며 CLI 에이전트로 보내 재지는 않았습니다. 결과는 2026-11-01 정답 워크플로우 1회 실행 값입니다. 명령 · 출력 전부: [answers/LAB-TEST-RESULT.md](answers/LAB-TEST-RESULT.md).
## 예제 1 · 요청문 예
```text
my-work/ops-brief.json 을 새로 만들어 줘. 웹훅 POST my-ops-brief, 이름 "79 Ops brief (my)".
Get facts: HTTP POST http://localhost:5678/webhook/my-ops-facts (본문 from · to 그대로). 상태도 사실에서 그대로 쓴다 (다시 판정하지 않음).
Make brief(Code): actions = red 다음 yellow 의 앞 3개, 영역마다 AGENTS.md 3절 표의 할 일 글자 그대로.
markdown: 제목 · 전체 · | 영역 | 상태 | 숫자 | 표 (🔴 · 🟡 · 🟢, 숫자 칸은 3절 표의 꼴) · "## 먼저 볼 것".
LLM 은 쓰지 않는다. 결과 {overall, red, yellow, actions, markdown}. 기대 결과 cases/lab03.json.
```
**빈칸 답**
| 빈칸 | 답 | 왜 |
| --- | --- | --- |
| ① | 그대로 | 상태 판정은 한 곳(사실) — 브리핑이 다시 판정하면 어긋남 |
| ② | `3` | 아침에 먼저 볼 것은 셋까지 |
| ③ | 먼저 볼 것 | 테스트 · 다음 단계가 이 제목을 찾음 |
| ④ | 쓰지 않는다 | 표와 할 일은 규칙 — 늘 같은 브리핑 |
정답: [reference/lab03-example1-brief.json](reference/lab03-example1-brief.json)
| 11/01 결과 | |
| --- | --- |
| 고치기 전 (`answers/17`) | **0/4** · 404 |
| 고친 뒤 (`answers/18`) | **4/4** · 🔴, 먼저 볼 것 실행 · DLQ · 릴리스, 표 `\| DLQ \| 🔴 \| 3건 (parked 2) \|`, DLQ를 비우면 셋째에 알림. LLM 없음 |
## 예제 2 · 요청문 예
```text
my-work/ops-brief.json 에 LLM 요약을 더해 줘.
Summarize(AI Agent + gpt-4.1-mini, temperature 0): 사실 JSON 과 actions 만 주고 한국어 3문장 — 전체 상태 · 가장 급한 곳 · 먼저 할 일. 사실에 없는 숫자 · 원인은 쓰지 않는다.
Check summary(Code): 요약의 숫자가 사실 안에 있는지 Lab 02 예제 2 와 같은 방법으로 보고 numbers_ok.
markdown 끝에 "## 요약" 과 요약 글. 표 · 먼저 볼 것은 Code 가 만든 그대로 (LLM 이 고치지 않음).
기대 결과 cases/lab03-llm.json, cases/lab03.json 도.
```
**빈칸 답**
| 빈칸 | 답 | 왜 |
| --- | --- | --- |
| ① | `3` | 아침 회의용 세 문장 |
| ② | `numbers_ok` | 요약의 숫자도 확인 (지어낸 숫자 찾기) |
| ③ | 요약 | 테스트가 `## 요약`을 찾음 |
| ④ | 고치지 않음 | LLM은 요약 글만 — 숫자 표는 Code |
정답: [reference/lab03-example2-brief.json](reference/lab03-example2-brief.json)
| 11/01 결과 | |
| --- | --- |
| 고치기 전 (`answers/19`) | **0/2** · `summary` 없음 |
| 고친 뒤 (`answers/20`) | **2/2** · 세 문장 "… 가장 긴급한 문제는 'Search FAQ' … 16건 …", `numbers_ok: true`, 1~3.5초. `lab03` 4/4 |
- 풀이 때: 요약은 먼저 볼 것 셋 중 하나만 말함 → 표 · 순서는 Code가.
## 예제 3 · 결과 (에이전트 없이, `answers/21`)
| 사람이 한 일 | 빨강 | 먼저 볼 것 | 고친 것인가 |
| --- | --- | --- | --- |
| (처음) | runs · dlq · release | 실행 · DLQ · 릴리스 | |
| parked 둘 | runs · release | 실행 · 릴리스 · 알림 | 그렇다 |
| 카나리 끔 | runs | 실행 · 알림 · DLQ | 위험을 멈춤 (1.2.0은 그대로) |
| 예산 0.2 | runs | 실행 · 알림 · DLQ | 한도를 바꿈 (쓴 돈은 그대로) |
- **5/5.** 풀이 때: "초록이 된 까닭을 함께 말한다" (77일차 SLO와 같음).
## 과제 1 · 요청문 예
```text
my-work/ops-eval.json 을 새로 만들어 줘. 웹훅 POST my-ops-eval, 본문 {cases: [{question, area, refused, numbers}]}, 이름 "79 Ops eval (my)".
cases 가 비었으면 HTTP 400. Split cases(Code)로 케이스를 아이템으로 나누고, HTTP 노드 하나가 아이템마다 my-ops-ask 를 부른다.
Score(Code): 케이스마다 area 같음 · refused 같음 · numbers 중 하나가 답에 있음 · 거절이 아니면 numbers_ok — 넷 다 맞으면 통과.
score = 통과 / 전체 (소수 4자리), failed 에는 통과 못 한 케이스와 어느 것이 틀렸나 (area_ok · refused_ok · number_ok · grounded · answer).
기대 결과 cases/lab03-challenge.json.
```
**빈칸 답**
| 빈칸 | 답 | 왜 |
| --- | --- | --- |
| ① | `400` | 빈 평가는 '모두 통과(0/0)'가 아니라 잘못된 요청 |
| ② | 넷 다 | 영역만 맞고 숫자가 틀리면 통과가 아님 |
| ③ | `4` | 0.875처럼 |
| ④ | `answer` | 왜 틀렸는지 사람이 읽어 보게 |
정답: [answers/79-lab03-challenge-eval.json](answers/79-lab03-challenge-eval.json)
| 11/01 결과 | |
| --- | --- |
| 고치기 전 (`answers/22`) | **0/3** · 404 |
| 고친 뒤 (`answers/23`) | **3/3** · 골든 8/8 · score 1 (3.9초), 틀린 기대는 `area_ok: false`로 잡음, 빈 목록 400 |
## 과제 2 · 요청문 예
```text
my-work/ops-eval.json 에 평가 관문을 더해 줘.
본문 min_score (없으면 0.9) 와 비교해 gate = score 가 min_score 이상이면 "pass", 아니면 "fail". 결과에 min_score · gate.
fail 이면 POST http://data-api:8800/alerts {workflow: "ops-eval", severity: "medium", reason: "eval_below", score, min_score, message}.
알림을 보내도 응답은 평가 결과 그대로. 앞의 칸은 그대로. 기대 결과 cases/lab03-challenge2.json, cases/lab03-challenge.json 도.
```
**빈칸 답**
| 빈칸 | 답 | 왜 |
| --- | --- | --- |
| ① | `0.9` | AGENTS.md 3절 기본 기준 |
| ② | 이상 | 같으면 통과 (78일차 게이트와 같은 경계) |
| ③ | `eval_below` | 테스트가 이 이유로 알림을 찾음 |
| ④ | 그대로 | 알림은 곁가지 |
정답: [answers/79-lab03-challenge2-gate.json](answers/79-lab03-challenge2-gate.json)
| 11/01 결과 | |
| --- | --- |
| 고치기 전 (`answers/24`) | **0/4** · `gate` 없음, 알림 0 |
| 고친 뒤 (`answers/25`) | **4/4** · 기본 0.9 pass, 골든 0.8 pass, 틀린 기대 0 fail → `eval_below` 알림 1건. `lab03-challenge` 3/3 |
- 풀이 때: 수업 준비 때 "실패 → 알림" 뒤에 "알림이 몇 건?"을 두니 도우미가 **7건**이라 답해 평가가 0점 — 평가가 남긴 알림이 다음 평가를 바꿈. 케이스 순서를 바꿈.