Lab 01 · 무엇이 바뀌었나, 답마다 버전, 지시문은 저장소로
강사용 정답본 · 학생 저장소에 올리지 않습니다. 학생용 문제는 LAB-01-Q-WHAT-CHANGES.md.
요청문은 예시이며 CLI 에이전트로 보내 재지는 않았습니다. 결과 숫자는 실습을 5개로 늘린 뒤 정답 워크플로우를 학생 순서대로 2026-10-27에 1회씩 실행한 값입니다 (강사 Mac, gpt-4.1-mini · gpt-5.4-nano, bench는 n=5). 명령 · 출력 전부: answers/LAB-TEST-RESULT.md.
예제 1 · 결과 (에이전트 없이)
바뀐 곳 (diff, 7개) |
전 |
후 |
셋 중 |
Answer 지시문 |
307자 |
419자 (+ "FAQ에서 온 답이면 끝에 [FAQ-003]", "Keep answers short.") |
지시문 |
Answer model |
gpt-4.1-mini |
gpt-5.4-nano |
모델 |
노드 Review check + 연결 셋 |
없음 |
답을 400자에서 자름 |
흐름 |
| 웹훅 경로 |
rel-v1 |
rel-v2 |
흐름 (답에는 영향 없음) |
call (answers/02) |
시간 |
답 |
rel-v1 |
2.8초 |
"… 인증서 만료 여부를 확인한 뒤 다시 접속하시기 바랍니다. 현재 접수된 관련 문의는 없습니다 …" |
rel-v2 |
1.0초 |
"… 인증서 만료 여부를 확인한 뒤 다시 접속해 보시기 바랍니다. [FAQ-003]" |
- 풀이 때: "출처 번호는 어디 때문?" → 지시문일 가능성이 높지만 이 비교만으로는 확정 못 함 (모델도 바뀜). "빨라진 것은?" → 모델일 것 같지만 마찬가지.
- 수업 준비 중 실제로 본 것: 10/18 판 v2는
gpt-4.1-nano였고 10/27에 OpenAI가 지원 종료해 HTTP 500이 났습니다. 워크플로우를 하나도 안 바꿨는데 멈춘 실제 예라 1단계 2절에 넣었습니다.
예제 2 · 요청문 예
빈칸 답 (Q 문서 ▶ 빈칸 채우기 ____①~____④)
| 빈칸 |
답 |
왜 |
| ① |
my-helpdesk |
cases/lab01.json의 webhook (AGENTS.md 3절) |
| ② |
={{ $('Release info').first().json.model }} |
앞 노드 값을 읽는 n8n 표현식, 모델 이름을 한 곳에서 |
| ③ |
version |
AGENTS.md 3절 결과 모양의 버전 세 칸을 감싸는 이름 |
| ④ |
그대로 |
지시문까지 바꾸면 무엇 때문에 답이 바뀌었는지 또 모름 |
정답: reference/lab01-example2-version.json
| 10/27 결과 |
|
cases/lab01.json (answers/03) |
3/3 |
예제 3 · 결과 (에이전트 없이)
| 재기 |
v1 (rel-v1) |
v2 (rel-v2) |
lab01-compare --repeat 3 (answers/04 · 05) |
9/15 — 출처 번호 두 케이스가 세 번 모두 ✘ |
15/15 |
bench -n 5 VPN (answers/06) |
p50 1.23초 · p95 1.34초 |
p50 0.98초 · p95 1.20초 |
- 출처 번호는 세 번 모두 같은 쪽 → 흔들림이 아니라 바뀐 것. 해결 낱말 · 접수 현황은 둘 다 세 번 모두 ✔ (흔들림 없음).
- 시간 차이는 0.25초 정도. 모델 · 지시문 · 노드가 함께 바뀌어 원인을 말할 수 없습니다 → Lab 02의 한 가지씩 바꾼 릴리스로 이어 갑니다.
과제 1 · 요청문 예
빈칸 답 (Q 문서 ▶ 빈칸 채우기 ____①~____④)
| 빈칸 |
답 |
왜 |
| ① |
prompt_version |
릴리스 정보 세 값 중 지시문 버전 이름 ({{ $('Release info').first().json.prompt_version }}) |
| ② |
Get prompt |
지시문 글자를 가져오는 노드 |
| ③ |
prompt_source |
지시문을 어디서 가져왔는지 (AGENTS.md 3절) |
| ④ |
registry |
cases/lab01-challenge.json의 기대 |
정답: answers/74-lab01-challenge-registry.json
| 10/27 결과 |
고치기 전 (예제 2 정답) |
고친 뒤 |
cases/lab01-challenge.json (answers/07 · 08) |
2/3 (prompt_source 없음) |
3/3 |
cases/lab01.json (answers/09) |
|
3/3 |
과제 2 · 요청문 예
빈칸 답 (Q 문서 ▶ 빈칸 채우기 ____①~____④)
| 빈칸 |
답 |
왜 |
| ① |
2000 |
2초를 ms로 |
| ② |
continueErrorOutput |
실패해도 멈추지 않고 두 번째(오류) 출력으로 (72일차 Lab 03, 73일차 Lab 02 과제 2와 같음) |
| ③ |
p1 |
마지막으로 검증된 지시문 (운영 중인 1.0.0의 지시문) |
| ④ |
fallback |
cases/lab01-challenge2.json의 고장 케이스 기대 |
정답: answers/74-lab01-challenge2-fallback.json (과제 1 정답 + Get prompt의 timeout · onError, 노드 2개: Registry prompt · Fallback prompt)
10/27 결과 (cases/lab01-challenge2.json) |
고치기 전 (과제 1 정답, answers/10) |
고친 뒤 (answers/11) |
| 평소 · 저장소에서 |
✔ |
✔ registry |
저장소 고장 (prompts error) |
✘ HTTP 500 Error in workflow (0.1초) |
✔ 200 · fallback · "인증서" (1.3초) |
저장소 느림 (prompts slow 8초) |
✘ 9.1초 (8초를 다 기다림, registry) |
✔ fallback · 3.0초 |
| 되돌린 뒤 |
✔ |
✔ registry |
| 합계 |
2/4 |
4/4 |
lab01-challenge (answers/12) |
|
3/3 |
- 풀이 때 "73일차 판별 LLM은 막았는데 왜 여기는 계속 가나?"를 묻습니다: 판별 LLM은 보안 관문(멈추면 공격이 지나감), 지시문 저장소는 편의 의존(멈춰도 예전 지시문으로 답할 뿐).
- 다음 단계로 넘기는 질문: "저장소가 404(그런 지시문 없음)를 주면 이 기본 지시문은 어떻게 할까?" → Lab 02 과제 2.