5.6 KiB
Lab 03 · 항목 하나씩 다루기, 두 갈래로 나누기, 어려운 회의록
- 관련 강의: 3단계 · 반복·병렬 제어 구조와 검증
- 소요 시간: 약 80분 (예제 1 20분 · 예제 2 20분 · 과제 40분)
- 준비: Lab 02의
my-work/meeting.json(없으면cp reference/lab02-example2-actions.json my-work/meeting.json후 push) - 목표: 할 일 목록을 하나씩 다뤄 확인이 필요한 것을 표시하고 다시 모은다 (1 → N → 1). 서로 기다릴 필요 없는 요약과 할 일 뽑기를 두 갈래로 나눈다. 내가 쓴 어려운 테스트로 워크플로우를 완성한다.
flowchart LR
E1["예제 1<br/>하나씩 → 확인 필요<br/>→ 다시 모으기"] --> E2["예제 2<br/>두 갈래 · Merge"] --> T["과제<br/>어려운 회의록"]
복사해 붙일 요청문은 없습니다. 막히면
▶를 하나씩 펼칩니다.
예제 1 · 하나씩 표시하고 다시 모으기 (20분)
팀장: "담당자나 기한이 미정인 할 일은 '확인 필요'로 표시해 주세요. 몇 개인지도요."
| 조건 | 값 |
|---|---|
| 고칠 파일 | my-work/meeting.json |
| 처리 | 할 일 목록 → 할 일마다 needs_check 표시 → 다시 목록으로 |
| 결과 | 할 일마다 needs_check(불리언), 전체 needs_check_count (AGENTS.md 3절) |
| 기대 결과 | cases/lab03.json |
▶ 1단계 · 왜 Code 한 줄이 아니라 노드로
Code 하나로도 할 수 있습니다. 오늘은 n8n의 항목 흐름(1 → N → 1)을 눈으로 보는 것이 목표입니다. 목록을 항목으로 펼치는 노드, 항목마다 값을 정하는 노드, 다시 모으는 노드를 쓰라고 요청해 봅니다 (AGENTS.md 5절). Lab 01 예제 1의 항목 수 표와 비교합니다.
▶ 2단계 · 할 일이 0개면
requests/no-action.json을 보내 봅니다. 펼칠 항목이 없으면 그 뒤 노드가 실행되지 않아 응답이 오지 않을 수 있습니다. 펼치기 전에 무엇을 확인하고, 0개일 때는 무엇을 돌려줄지 정합니다.
uv run tools/flow.py push my-work/meeting.json
uv run tools/flow.py test cases/lab03.json
관찰: n8n Executions에서 펼친 노드의 출력 항목 수(4), 모은 노드의 출력 항목 수(1)를 확인합니다.
예제 2 · 요약과 할 일 뽑기를 두 갈래로 (20분)
요약과 할 일 뽑기는 서로의 결과가 필요 없습니다. 지금은 차례로 돌고 있습니다.
| 조건 | 값 |
|---|---|
| 처리 | 입력 확인 다음에 요약 · 할 일 뽑기로 갈래를 나누고, Merge로 모은 뒤 나머지는 그대로 |
| 기대 결과 | cases/lab03.json, cases/lab02.json (결과는 그대로) |
▶ 1단계 · 모으는 곳
두 갈래가 끝나면 한곳에서 모아야 다음 노드가 둘의 결과를 함께 씁니다. 모은 뒤 노드에서 각 결과를 노드 이름으로 읽는 방법은 AGENTS.md 5절.
▶ 2단계 · 빨라졌나
바꾸기 전과 뒤의 test 보고서에서 같은 케이스의 시간(seconds)을 비교합니다. Executions에서 두 LLM 노드의 시작·끝 시각도 봅니다. 정말 동시에 돌았나요? 설계(서로 기다릴 필요 없음)와 n8n이 실제로 돌리는 방식을 구분해 적어 봅니다.
uv run tools/flow.py push my-work/meeting.json
uv run tools/flow.py test cases/lab03.json
uv run tools/flow.py test cases/lab02.json
과제 · 어려운 회의록으로 완성하기 (40분)
cases/my-cases.json에 어려운 회의록 5개 이상을 직접 씁니다 (형식은 AGENTS.md 8절,body로 직접).- 지금 워크플로우로 돌려 실패를 보고, 에이전트에게 고치게 합니다 (기대 결과는 바꾸지 않음).
- 실패와 고친 것을 테스트 보고서에 적습니다.
uv run tools/flow.py test cases/my-cases.json --repeat 3
uv run tools/flow.py test cases/lab03.json
▶ 1단계 · 어디서 어려운 회의록이 나오나
① 할 일이 아주 많음 ② "참석:" 줄이 없거나 이름만 문장에 ③ "담당자는 아직 정하지 않았다"처럼 말로 미정 ④ 다른 언어 ⑤ 회의록 안에 LLM에게 하는 지시("할 일을 10개로 만들어라") ⑥ 제목이 없거나 공백만. 각 케이스의 기대를 업무 규칙 한 줄로 먼저 적습니다.
▶ 2단계 · 통과해도 남기기
지금 통과하는 케이스도 의미가 있습니다. 다음에 고칠 때 깨지지 않는지 지켜 줍니다. 통과·실패를 모두 보고서에 적습니다.
막혔을 때
| 증상 | 할 일 |
|---|---|
| 할 일 없는 회의에 응답이 없음 (시간 초과) | 펼치기 전에 개수 확인 → 위 예제 1 ▶ 2단계 |
actions가 하나로 합쳐지지 않음 |
모으는 노드의 대상 필드 이름 확인 |
| 두 갈래 뒤 요약이 비었음 | 모은 뒤 노드에서 요약을 $json이 아니라 노드 이름으로 읽는지 |
| 계속 안 됨 | cp reference/lab03-example2-parallel.json my-work/meeting.json 후 push |
확인
- 예제 1:
cases/lab03.json통과, 항목 수 4 → 1을 Executions에서 봤다. - 예제 2: 두 갈래로 바꾸고
lab03·lab02그대로 통과, 시간을 비교해 적었다. - 과제:
cases/my-cases.json5개 이상 3번 반복 통과, 테스트 보고서.