68일차 바이브 코딩을 요청서(VIBE-REQ-TFLOW) → 내 SPEC → VIBE-Q 비교 순서로 바꿈
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
587ca5c2b3
commit
82f0e93621
6 files changed
+182
-35
No files matched your search
@@ -23,7 +23,7 @@ flowchart LR
|
||||
| - | 13:00~14:00 | 점심 | | |
|
||||
| 5 | 14:00~14:50 | 3단계 강의 · Lab 03 예제 1 · 2 | [3단계](../../Lecture/68/03-STAGE3-VERIFY-AND-SCALE.md), [Lab 03](LAB-03-Q-VERIFY-AND-ISOLATE.md) | `lab03` · `lab03-down` 통과 |
|
||||
| 6 | 15:00~15:50 | Lab 03 과제 40분 · 풀이 | Lab 03 | 내 케이스 5개 · 보고서 |
|
||||
| 7 | 16:00~16:50 | 바이브 코딩 `tflow` 각자 만들기 | [VIBE-Q-TFLOW](VIBE-Q-TFLOW.md) | R1~R5 · `pytest` |
|
||||
| 7 | 16:00~16:50 | 바이브 코딩 `tflow`: 요청서 → 내 SPEC → 비교 → 만들기 | [VIBE-REQ-TFLOW](VIBE-REQ-TFLOW.md) → [VIBE-Q-TFLOW](VIBE-Q-TFLOW.md) | `SPEC.md` · R1~R6 · `pytest` |
|
||||
| 8 | 17:00~17:50 | 발표 · 강사 정리 · 강사 바이브 코딩 · 팁 · 69일차 예고 | [진행](../../Lecture/68/04-VIBE-CODING.md) | |
|
||||
|
||||
## 1. 전날 준비 (약 15분)
|
||||
@@ -134,21 +134,28 @@ flowchart LR
|
||||
|
||||
## 7. 7~8교시 · 바이브 코딩 `tflow`
|
||||
|
||||
[VIBE-Q-TFLOW](VIBE-Q-TFLOW.md): n8n 워크플로우 JSON을 트리와 mermaid로 보여 주는 TUI. 67일차 `it-agent.json`과 오늘 `my-work/*.json`을 열어 봅니다.
|
||||
n8n 워크플로우 JSON을 트리와 mermaid로 보여 주는 TUI. 67일차 `it-agent.json`과 오늘 `my-work/*.json`을 열어 봅니다.
|
||||
|
||||
**오늘부터 순서가 바뀝니다.** 문제(VIBE-Q)를 에이전트에게 통째로 주지 않고, 사람의 말인 **요청서에서 요구를 내가 먼저 뽑습니다.**
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
REQ["VIBE-REQ-TFLOW<br/>요청서 읽기"] --> SPEC["~/vibe/tflow/SPEC.md<br/>직접 쓰기 10분"] --> Q["VIBE-Q-TFLOW<br/>비교 · 고치기"] --> B["SPEC을 에이전트에게<br/>단계별로"] --> A["수업 뒤 git pull<br/>VIBE-A-TFLOW"]
|
||||
```
|
||||
|
||||
```bash
|
||||
mkdir -p ~/vibe/tflow && cd ~/vibe/tflow
|
||||
git init
|
||||
codex # 또는 claude, agy
|
||||
# SPEC.md를 다 쓰고 나서 codex (또는 claude, agy)
|
||||
```
|
||||
|
||||
| 시간 | 단계 | 확인 |
|
||||
| --- | --- | --- |
|
||||
| 16:00~16:03 | 0. 준비 | |
|
||||
| 16:03~16:15 | 1. 글자로 트리와 mermaid (R1 · R4) | 갈래가 보이고 끝없이 반복되지 않음, `--mermaid` |
|
||||
| 16:15~16:30 | 2. TUI · 상세 · 경고 (R2 · R5) | Agent 아래 모델 1 · Tool 2, 망가진 파일 경고 |
|
||||
| 16:30~16:43 | 3. 한국어 설명과 캐시 (R3) | 아래 `export` 후, 두 번째는 캐시에서 |
|
||||
| 16:43~16:50 | 4. 정리 | `uv run pytest -q`, `PROMPTS.md` |
|
||||
| 16:00~16:12 | 0. 준비 · [요청서](VIBE-REQ-TFLOW.md) → `SPEC.md` → [VIBE-Q](VIBE-Q-TFLOW.md)와 비교 | 요구마다 확인 방법, 비교한 줄 |
|
||||
| 16:12~16:23 | 1. 글자로 트리와 mermaid (R1 · R4) | 갈래가 보이고 끝없이 반복되지 않음, `--mermaid` |
|
||||
| 16:23~16:35 | 2. TUI · 상세 · 경고 (R2 · R5 · R6) | Agent 아래 모델 1 · Tool 2, 망가진 파일 경고 |
|
||||
| 16:35~16:45 | 3. 한국어 설명과 캐시 (R3) | 아래 `export` 후, 두 번째는 캐시에서 |
|
||||
| 16:45~16:50 | 4. 정리 | `SPEC.md` 체크, `uv run pytest -q`, `PROMPTS.md` |
|
||||
|
||||
```bash
|
||||
export OPENAI_API_KEY=$(grep '^OPENAI_API_KEY=' ~/aio-01d4-stu/Last3Mon/.env | cut -d= -f2-)
|
||||
@@ -163,6 +170,7 @@ export OPENAI_API_KEY=$(grep '^OPENAI_API_KEY=' ~/aio-01d4-stu/Last3Mon/.env | c
|
||||
| `PROMPTS.md`, `DESIGN.md`, `TEST-REPORT.md` 정리 | 최종 프로젝트 재료 |
|
||||
| 회의록 Agent가 켜져 있는지 (`call meeting-agent requests/agent-meeting.json`) | 꺼 둔 채로 두지 않기 |
|
||||
| **`~/vibe/tflow` 지우지 않기** | 69일차에 오늘 만든 워크플로우를 여는 데 씀 |
|
||||
| `git pull` 후 `VIBE-A-TFLOW.md`(정답본)와 내 `SPEC.md` 비교 | 수업이 끝나면 올라옴. 요구 도출 예시 · 요청문 예 |
|
||||
| 69일차 준비: [00-DAY69-PREP](../../Lecture/69/00-DAY69-PREP.md) 1~2절 | 내일은 데이터 API를 쓰지 않음 (켜 두어도 됨) |
|
||||
|
||||
## 9. 막혔을 때 (오늘 공통)
|
||||
|
||||
@@ -40,6 +40,7 @@ flowchart LR
|
||||
## 실습 문서 읽는 법
|
||||
|
||||
- 실습 문서(`LAB-0x-Q-*.md`, `VIBE-Q-TFLOW.md`)에는 **복사해 붙일 요청문이 없습니다.** 만들 것 · 조건 · 기대 결과만 있고, 요청문은 직접 씁니다.
|
||||
- 바이브 코딩은 **요청서(`VIBE-REQ-TFLOW.md`)부터** 읽고 요구(`SPEC.md`)를 직접 뽑은 뒤 `VIBE-Q-TFLOW.md`와 비교합니다. 정답본 `VIBE-A-TFLOW.md`는 수업이 끝나면 올라옵니다.
|
||||
- 막히면 `▶` 를 하나씩 펼칩니다. 뒤로 갈수록 구체적이 되지만 정답 요청문은 나오지 않습니다.
|
||||
- 쓴 요청문은 `my-work/PROMPTS.md`에 모아 두고, 수업 끝에 옆 사람과 비교합니다.
|
||||
|
||||
@@ -52,8 +53,9 @@ Last3Mon/68/
|
||||
├── LAB-01-Q-SCENARIO-AND-SPLIT.md # 1단계 · 복합 요청 분석표 → 업무 나누기 → 담당·빠진 입력
|
||||
├── LAB-02-Q-ROUTER-AGENTS.md # 2단계 · Agent 계약 → 라우터 → Supervisor와 비교
|
||||
├── LAB-03-Q-VERIFY-AND-ISOLATE.md # 3단계 · 입력 부족 → Agent 장애 격리 → 어려운 테스트 · 확장 계획
|
||||
├── VIBE-Q-TFLOW.md # 7교시 바이브 코딩 · tflow (워크플로우 JSON 트리 TUI)
|
||||
├── *-A-*.md # 강사용 정답본 (학생 저장소에는 없음)
|
||||
├── VIBE-REQ-TFLOW.md # 7교시 바이브 코딩 · 요청서 (가장 먼저, 여기서 SPEC.md를 뽑음)
|
||||
├── VIBE-Q-TFLOW.md # 7교시 바이브 코딩 · tflow 요구 · 단계 (SPEC과 비교)
|
||||
├── *-A-*.md # 정답본 (VIBE-A는 수업이 끝난 뒤 올라옴, LAB-A는 아직 없음)
|
||||
├── agents/ # 이미 만든 Agent: it-agent (67일차), meeting-agent (66일차)
|
||||
├── tools/flow.py # doctor · check · push · off · call · test
|
||||
├── cases/ # lab01 · lab01-challenge · lab02 · lab02-challenge · lab03 · lab03-down
|
||||
|
||||
+46
-16
@@ -1,5 +1,12 @@
|
||||
# 7교시 바이브 코딩 · `tflow` 만들기
|
||||
|
||||
> **먼저 [VIBE-REQ-TFLOW.md](VIBE-REQ-TFLOW.md)(요청서)를 읽고 `~/vibe/tflow/SPEC.md`를 직접 쓴 뒤** 이 문서를 엽니다. 이 문서는 요청서에서 요구를 뽑아 낸 **다음 단계**입니다. 내 SPEC과 비교하는 데 쓰고, 에이전트에게 통째로 붙여 넣지 않습니다.
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
REQ["VIBE-REQ<br/>요청서"] --> SPEC["내 SPEC.md<br/>10분"] --> Q["VIBE-Q (이 문서)<br/>비교 · 고치기"] --> B["단계별로 만들기"] --> A["수업 뒤<br/>VIBE-A"]
|
||||
```
|
||||
|
||||
- 시간: 16:00~16:50 (50분) · 발표와 정리는 8교시
|
||||
- 도구: CLI 코딩 에이전트(codex / claude / agy), Python + uv + [Textual](https://textual.textualize.io/)
|
||||
- 결과물: n8n 워크플로우 JSON을 읽어 **노드와 연결을 트리로** 보여 주고, 노드마다 **하는 일을 한국어로** 설명하는 터미널 프로그램(TUI). 에이전트가 만든 n8n 파일을 열지 않고도 확인하는 도구입니다.
|
||||
@@ -20,15 +27,30 @@ $ tflow ~/aio-01d4-stu/Last3Mon/68/agents/it-agent.json
|
||||
|
||||
> 요청문은 **직접** 씁니다. 단계마다 `▶` 를 하나씩 펼치면 생각할 거리가 나옵니다. 정답 요청문은 없습니다.
|
||||
|
||||
## 요구 사항
|
||||
## 요구 사항 (요청서에서 뽑은 것)
|
||||
|
||||
| 번호 | 요구 | 확인 방법 |
|
||||
| --- | --- | --- |
|
||||
| R1 | 워크플로우 JSON을 읽어, 웹훅(시작 노드)에서 `main` 연결을 따라가는 **트리**로 보여 준다. If·Switch의 갈래 이름(true/false, 출력 이름)을 붙인다 | `tflow agents/it-agent.json` |
|
||||
| R2 | AI 연결(`ai_languageModel`, `ai_tool`)은 따로 표시한다 (어느 Agent의 모델·Tool인지) | it-agent의 `IT help agent` 아래 |
|
||||
| R3 | 노드를 고르면 옆에 **종류 · 중요한 설정 · 하는 일(한국어)** 을 보여 준다. 하는 일은 LLM이 쓰고, 한 번 쓴 설명은 다시 쓰지 않는다 | 노드를 고르기 |
|
||||
| R4 | `tflow <파일> --mermaid`로 mermaid 흐름도를 출력한다 (마크다운에 붙여 그대로 그려짐) | 출력을 `.md`에 붙여 보기 |
|
||||
| R5 | 어디에도 연결되지 않은 노드, 없는 노드를 가리키는 연결을 **경고**로 보여 준다 | 직접 망가뜨린 파일 |
|
||||
| 번호 | 요구 | 요청서의 말 | 확인 방법 |
|
||||
| --- | --- | --- | --- |
|
||||
| R1 | 워크플로우 JSON을 읽어, 웹훅(시작 노드)에서 `main` 연결을 따라가는 **트리**로 보여 준다. If·Switch의 갈래 이름(true/false, 출력 이름)을 붙인다 | ① 어디서 어디로, 갈림길은 어느 쪽이 어떤 경우 | `tflow agents/it-agent.json` |
|
||||
| R2 | AI 연결(`ai_languageModel`, `ai_tool`)은 따로 표시한다 (어느 Agent의 모델·Tool인지) | ② 모델과 Tool, 순서와는 다르게 붙음 | it-agent의 `IT help agent` 아래 |
|
||||
| R3 | 노드를 고르면 옆에 **종류 · 중요한 설정 · 하는 일(한국어)** 을 보여 준다. 하는 일은 LLM이 쓰고, 한 번 쓴 설명은 다시 쓰지 않는다 | ③ 설정과 한국어 설명, 매번 묻지 않기 | 노드를 고르기 |
|
||||
| R4 | `tflow <파일> --mermaid`로 mermaid 흐름도를 출력한다 (마크다운에 붙여 그대로 그려짐) | ④ 문서에 붙이면 그림 | 출력을 `.md`에 붙여 보기 |
|
||||
| R5 | 어디에도 연결되지 않은 노드, 없는 노드를 가리키는 연결을 **경고**로 보여 준다 | ⑤ 끊긴 연결을 열자마자 | 직접 망가뜨린 파일 |
|
||||
| R6 | 터미널 화면(TUI)으로 보여 준다 | "브라우저 말고 터미널" | `uv run tflow …`가 터미널에서 열림 |
|
||||
|
||||
숨은 요구 (요청서에 직접 없지만 없으면 안 되는 것):
|
||||
|
||||
| 숨은 요구 | 어디서 나왔나 |
|
||||
| --- | --- |
|
||||
| 다시 모이는 노드는 두 번째부터 펼치지 않는다 (끝없이 반복되지 않게) | 메모 "네 갈래로 나뉘었다가 다시 하나로 모임" |
|
||||
| 테스트용 **망가진 파일**을 직접 만든다 | ⑤ 끊긴 파일은 함께 받지 않음 |
|
||||
| 키가 없거나 LLM이 실패해도 트리 · 그림은 그대로 | "키가 없는 날에도 구조는" |
|
||||
| LLM에는 `credentials`를 보내지 않고, 캐시는 노드 **내용**으로 | ③ "Credential이 밖으로 나가면 안 돼요", "같은 걸 매번 묻지 않기" |
|
||||
| mermaid id는 번호로, 노드 이름은 보이는 글자로만 | ④ 노드 이름의 빈칸 · `?` · 괄호 |
|
||||
|
||||
범위 밖 (오늘 하지 않음): 워크플로우 고치기(편집), n8n에 직접 연결해 가져오기, 실행 기록 보기.
|
||||
|
||||
**비교해 보기**: 내 `SPEC.md`에서 빠진 요구, 내가 더 뽑은 요구, 다르게 정한 순서를 `SPEC.md` 끝에 한 줄씩 적고, 필요하면 내 SPEC을 고칩니다. 아래 단계부터는 **고친 내 SPEC.md**를 기준으로 요청문을 씁니다.
|
||||
|
||||
알아 둘 것:
|
||||
|
||||
@@ -48,22 +70,25 @@ $ tflow ~/aio-01d4-stu/Last3Mon/68/agents/it-agent.json
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
S0["0. 준비<br/>3분"] --> S1["1. 글자로 트리 · mermaid<br/>R1·R4 · 12분"] --> S2["2. TUI · 상세 · 경고<br/>R2·R3·R5 · 15분"] --> S3["3. 한국어 설명 · 캐시<br/>R3 · 13분"] --> S4["4. 정리<br/>7분"]
|
||||
S0["0. 준비 · 요청서 → SPEC<br/>12분"] --> S1["1. 글자로 트리 · mermaid<br/>R1·R4 · 11분"] --> S2["2. TUI · 상세 · 경고<br/>R2·R3·R5·R6 · 12분"] --> S3["3. 한국어 설명 · 캐시<br/>R3 · 10분"] --> S4["4. 정리<br/>5분"]
|
||||
```
|
||||
|
||||
요청문은 단계마다 `~/vibe/tflow/PROMPTS.md`에 남깁니다.
|
||||
|
||||
### 0. 준비 (3분)
|
||||
### 0. 준비 · 요청서 → SPEC (12분)
|
||||
|
||||
```bash
|
||||
mkdir -p ~/vibe/tflow && cd ~/vibe/tflow
|
||||
git init
|
||||
codex # 또는 claude, agy
|
||||
```
|
||||
|
||||
1. [VIBE-REQ-TFLOW.md](VIBE-REQ-TFLOW.md)를 읽고 `SPEC.md`를 **직접** 씁니다 (10분, 에이전트는 아직 켜지 않음).
|
||||
2. 위 "요구 사항"과 비교해 `SPEC.md`를 고치고 `git add SPEC.md && git commit -m "spec"`.
|
||||
3. 에이전트를 켭니다 (`codex`, `claude`, `agy`). 첫 요청에 "`SPEC.md`를 읽고, 요구마다 어떻게 확인할지 먼저 말해 줘. 코드는 아직 쓰지 마"처럼 **SPEC을 읽혔는지부터** 확인합니다.
|
||||
|
||||
어제 만든 `tman`의 `AGENTS.md`(있다면)를 복사해 와서 고쳐 쓰면 첫 요청이 짧아집니다.
|
||||
|
||||
### 1. 글자로 트리와 mermaid (12분)
|
||||
### 1. 글자로 트리와 mermaid (11분)
|
||||
|
||||
**목표**: `uv run tflow <파일>`이 트리를 **글자로** 출력하고, `--mermaid`가 흐름도를 출력한다. 화면(TUI)은 아직 없다.
|
||||
|
||||
@@ -84,9 +109,9 @@ codex # 또는 claude, agy
|
||||
|
||||
**확인**: 세 파일로 `uv run tflow`, `uv run tflow ... --mermaid` → 마크다운 미리보기에 붙여 그림이 나오는지, `uv run pytest -q`, `git commit`.
|
||||
|
||||
### 2. TUI · 상세 · 경고 (15분)
|
||||
### 2. TUI · 상세 · 경고 (12분)
|
||||
|
||||
**목표**: 왼쪽 트리, 오른쪽 상세. 노드를 고르면 종류와 중요한 설정을 보여 준다. 경고가 있으면 위에 보여 준다 (R2 · R3 일부 · R5).
|
||||
**목표**: 왼쪽 트리, 오른쪽 상세. 노드를 고르면 종류와 중요한 설정을 보여 준다. 경고가 있으면 위에 보여 준다 (R2 · R3 일부 · R5 · R6).
|
||||
|
||||
<details><summary>▶ 1단계 · "중요한 설정"은 무엇인가</summary>
|
||||
|
||||
@@ -100,7 +125,7 @@ codex # 또는 claude, agy
|
||||
|
||||
**확인**: `uv run tflow agents/it-agent.json`에서 `IT help agent`를 골라 모델과 Tool이 보이는지, 망가진 파일에서 경고, `git commit`.
|
||||
|
||||
### 3. 한국어 설명과 캐시 (13분)
|
||||
### 3. 한국어 설명과 캐시 (10분)
|
||||
|
||||
**목표**: 상세에 "하는 일: …" 한두 문장이 한국어로 나온다. 같은 노드는 다시 묻지 않는다 (R3).
|
||||
|
||||
@@ -125,21 +150,26 @@ export OPENAI_API_KEY=$(grep '^OPENAI_API_KEY=' ~/aio-01d4-stu/Last3Mon/.env | c
|
||||
|
||||
**확인**: 노드를 골라 한국어 설명, 같은 노드를 다시 골라 바로 나오는지, `uv run pytest -q`, `git commit`.
|
||||
|
||||
### 4. 정리 (7분)
|
||||
### 4. 정리 (5분)
|
||||
|
||||
- 오늘 n8n 실습에서 에이전트가 만든 `my-work/assistant.json`을 `tflow`로 열어 봅니다. 내가 그린 `DESIGN.md` 3절 흐름도와 같은가요?
|
||||
- `SPEC.md` 1절 표에 됐다 / 안 됐다를 체크합니다. 안 된 것은 왜인지 한 줄.
|
||||
|
||||
| 발표 (3분) | 내용 |
|
||||
| --- | --- |
|
||||
| 요구 도출 | 내 SPEC에서 VIBE-Q와 달랐던 것 하나 (빠뜨린 것 또는 더 뽑은 것) |
|
||||
| 요청문 | 가장 잘 먹힌 요청문 한 개, 안 먹힌 요청문 한 개 |
|
||||
| 막힌 곳 | 다시 모이는 노드, mermaid 깨짐 등 어떻게 알아챘고 고쳤나 |
|
||||
| 시연 | 내 `assistant.json`의 트리와 mermaid, 노드 설명 하나 |
|
||||
|
||||
## 확인
|
||||
|
||||
- [ ] `SPEC.md`를 에이전트 없이 먼저 썼고, VIBE-Q와 비교한 줄이 있다.
|
||||
- [ ] R1 it-agent의 트리에 true/false 갈래가 보이고, 다시 모이는 노드가 끝없이 반복되지 않는다.
|
||||
- [ ] R2 `IT help agent` 아래(또는 상세)에 모델 1개, Tool 2개.
|
||||
- [ ] R3 노드를 고르면 종류·설정·한국어 설명, 두 번째는 캐시에서.
|
||||
- [ ] R4 `--mermaid` 출력이 그림으로 그려진다.
|
||||
- [ ] R5 망가진 파일에서 경고.
|
||||
- [ ] R6 터미널에서 열리고 `q`로 닫힌다.
|
||||
- [ ] 수업 뒤 `git pull` → `VIBE-A-TFLOW.md`의 요구 도출 예시와 내 SPEC 비교.
|
||||
- [ ] `uv run pytest -q` 통과, 단계마다 git commit, `PROMPTS.md`.
|
||||
@@ -0,0 +1,97 @@
|
||||
# 7교시 바이브 코딩 · 요청서 `tflow` (가장 먼저 읽기)
|
||||
|
||||
- 순서: **이 요청서** → 내가 뽑은 요구 `~/vibe/tflow/SPEC.md` (10분) → [VIBE-Q-TFLOW.md](VIBE-Q-TFLOW.md)와 비교 → 단계별로 만들기 → 수업이 끝나면 `VIBE-A-TFLOW.md`(정답본)로 확인
|
||||
- 이 문서는 **만들어 달라는 사람의 말**입니다. 요구 사항 표도, 단계도 없습니다. 그것을 뽑아 내는 것이 오늘 첫 10분의 일입니다.
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
REQ["요청서<br/>(사람의 말)"] --> SPEC["SPEC.md<br/>확인할 수 있는 요구<br/>숨은 요구 · 범위 밖 · 순서"] --> Q["VIBE-Q와 비교<br/>빠뜨린 것 · 더 뽑은 것"] --> P["단계별 요청문<br/>SPEC.md를 에이전트에게"] --> RUN["실행 · 확인<br/>직접 uv run"] --> A["수업 뒤<br/>VIBE-A로 확인"]
|
||||
RUN -->|다음 단계| P
|
||||
```
|
||||
|
||||
## 왜 요청서부터인가
|
||||
|
||||
오늘(그리고 지난 이틀) 바이브 코딩에서 VIBE-Q 문서를 통째로 에이전트에게 주고 "이대로 만들어 줘"라고 한 사람이 많았습니다. 그러면 무엇이 만들어지든 **내가 판단할 기준이 없습니다.** 실무에서는 요구 사항 표가 오지 않고, 이 요청서 같은 **사람의 말**이 옵니다. 말을 확인할 수 있는 요구로 바꾸는 일은 에이전트가 아니라 내가 합니다.
|
||||
|
||||
| 단계 | 누가 | 결과 |
|
||||
| --- | --- | --- |
|
||||
| 요청 → 요구 | **나** | `SPEC.md`: 요구마다 "됐다 / 안 됐다"를 말할 수 있는 확인 방법 |
|
||||
| 요구 → 단계 | **나** | 작게 나눈 순서 (무엇부터 만들고 확인할지) |
|
||||
| 단계 → 코드 | 에이전트 | 단계마다 요청문 하나, `SPEC.md`를 함께 읽게 함 |
|
||||
| 확인 | **나** | 직접 `uv run tflow …`, `pytest`, 요구 표에 체크 |
|
||||
|
||||
## 요청 (운영 담당자에게서 온 메시지, 그대로)
|
||||
|
||||
> 오늘 오전에 CLI 에이전트가 사내 업무 도우미 워크플로우(`assistant.json`)를 만들어 줬어요. 테스트는 통과했는데, 솔직히 안이 어떻게 생겼는지 모르겠어요. 파일을 열면 몇백 줄 JSON이고, n8n 화면을 열면 선이 엉켜 있어요.
|
||||
>
|
||||
> ① 어디서 시작해서 어디로 가는지, 갈림길에서는 **어느 쪽이 어떤 경우인지** 한눈에 보고 싶어요.
|
||||
>
|
||||
> ② Agent에 **어떤 모델과 Tool이 붙어 있는지**도 같이요. 이건 보통 선으로 이어지는 순서와는 다르게 붙어 있더라고요.
|
||||
>
|
||||
> ③ 노드 이름만 봐서는 뭘 하는지 모르는 게 많아요. 노드를 하나 고르면 **중요한 설정과 한국어 한두 줄 설명**이 나오면 좋겠어요. 다만 같은 걸 열 때마다 LLM에 물어 돈을 쓰는 건 싫고, **키나 Credential이 밖으로 나가면 절대 안 돼요.**
|
||||
>
|
||||
> ④ 주간 회의 때 팀에 구조를 보여 줘야 해서, **문서에 붙이면 그림이 되는** 것도 하나 뽑을 수 있으면 해요.
|
||||
>
|
||||
> ⑤ 에이전트가 가끔 노드 이름을 틀려서 **연결이 끊긴 채로** 만들던데, 그런 건 열자마자 알려 주면 좋겠어요.
|
||||
>
|
||||
> 브라우저 말고 터미널에서 바로 쓰고 싶어요. 인터넷이나 키가 없는 날에도 구조는 볼 수 있어야 하고요.
|
||||
|
||||
## 함께 받은 것
|
||||
|
||||
| 파일 (`~/aio-01d4-stu/Last3Mon/68/` 기준) | 메모 |
|
||||
| --- | --- |
|
||||
| `agents/meeting-agent.json` | 가장 단순한 것 |
|
||||
| `agents/it-agent.json` | 갈림길이 둘, Tool이 둘 |
|
||||
| `reference/lab03-example2-isolated.json` | 네 갈래로 나뉘었다가 다시 하나로 모임 |
|
||||
| `my-work/assistant.json` | 오늘 오전에 내가 만든 것 (있으면) |
|
||||
|
||||
- 파일 모양은 [AGENTS.md](AGENTS.md) 6절 (`nodes`, `connections`).
|
||||
- LLM 키는 `OPENAI_API_KEY` 환경 변수로 받습니다.
|
||||
|
||||
## 할 일 · 요청을 요구로 (10분, 에이전트 없이)
|
||||
|
||||
`~/vibe/tflow/SPEC.md`를 만들고 아래 네 가지를 씁니다. **에이전트에게 맡기지 않고 직접** 씁니다 (나중에 에이전트에게 읽힐 문서입니다).
|
||||
|
||||
```markdown
|
||||
# tflow SPEC
|
||||
|
||||
## 1. 요구 (확인할 수 있게)
|
||||
| 번호 | 요구 | 요청의 어느 말 | 확인 방법 (파일 · 숫자 · 화면) |
|
||||
| --- | --- | --- | --- |
|
||||
| R1 | | ① | |
|
||||
|
||||
## 2. 숨은 요구 (요청에 직접 없지만 없으면 안 되는 것)
|
||||
## 3. 범위 밖 (오늘 50분 안에 하지 않을 것)
|
||||
## 4. 만드는 순서 (그리고 그 이유)
|
||||
```
|
||||
|
||||
예 하나만 보여 드립니다. 나머지는 직접 바꿔 봅니다.
|
||||
|
||||
| 요청의 말 | 그대로 요청문에 넣으면 | 확인할 수 있는 요구로 |
|
||||
| --- | --- | --- |
|
||||
| ① "갈림길에서 어느 쪽이 어떤 경우인지 한눈에" | "보기 좋게 보여 줘" → 무엇이 되든 "됐다"가 됨 | **If·Switch 갈래 이름(true/false, 출력 이름)을 붙인 트리.** 확인: `agents/it-agent.json`의 `Has question?` 아래에 true · false 두 갈래 |
|
||||
|
||||
<details><summary>▶ 1단계 · "한눈에", "중요한", "좋겠어요"를 어떻게 확인하나</summary>
|
||||
|
||||
형용사는 확인할 수 없습니다. "몇 개가 보이면", "어느 파일에서 무엇이 나오면"으로 바꿉니다. 함께 받은 파일을 열어 **직접 세어 보면** 확인 방법의 숫자가 생깁니다 (노드 수, 연결 수, 갈래 수). `jq '.nodes | length' agents/it-agent.json`처럼 (jq가 없으면 `python3 -c "import json; print(len(json.load(open('agents/it-agent.json'))['nodes']))"`).
|
||||
</details>
|
||||
|
||||
<details><summary>▶ 2단계 · 숨은 요구</summary>
|
||||
|
||||
- "갈래가 나뉘었다가 다시 모인다"(메모)는 트리에서 무엇을 뜻할까요? 그대로 따라가면 같은 노드가 몇 번 나올까요?
|
||||
- "연결이 끊긴 채로"를 확인하려면 무엇이 있어야 할까요? (끊긴 파일은 함께 받지 않았습니다.)
|
||||
- "키가 없는 날에도"와 "돈을 쓰는 건 싫다"는 각각 어떤 동작이 되어야 할까요?
|
||||
- "그림이 되는 것"에서, 노드 이름에 빈칸 · `?` · 괄호가 있으면?
|
||||
</details>
|
||||
|
||||
<details><summary>▶ 3단계 · 범위 밖과 순서</summary>
|
||||
|
||||
50분입니다. 고치기(편집), n8n에 직접 연결, 실행 기록 보기는 요청에 없습니다. 순서는 "무엇을 먼저 만들면 나머지가 그것을 다시 쓰나"로 정합니다. 화면, 그림, 경고가 모두 **같은 것**(파일에서 읽은 노드와 연결)을 씁니다.
|
||||
</details>
|
||||
|
||||
## 그다음
|
||||
|
||||
1. [VIBE-Q-TFLOW.md](VIBE-Q-TFLOW.md)를 열어 내 `SPEC.md`와 비교합니다. 빠뜨린 요구, 내가 더 뽑은 요구, 다르게 정한 순서를 `SPEC.md` 끝에 한 줄씩 적습니다 (8교시 발표 거리).
|
||||
2. 단계마다 요청문을 쓸 때 "`SPEC.md`를 읽고 4절의 1단계만 해 줘"처럼 **내 SPEC을 기준으로** 시킵니다. VIBE-Q 문서를 통째로 붙여 넣지 않습니다.
|
||||
3. 단계가 끝날 때마다 `SPEC.md` 1절 표의 확인 방법대로 **내가** 확인하고 체크합니다.
|
||||
4. 수업이 끝나면 `git pull`로 정답본 `VIBE-A-TFLOW.md`를 받아, 요구 도출 예시와 요청문 예를 내 것과 비교합니다.
|
||||
@@ -1,28 +1,34 @@
|
||||
# 7·8교시 · 바이브 코딩 (`tflow`)
|
||||
|
||||
- 교시: 7교시 16:00~16:50 (각자 만들기), 8교시 17:00~17:50 (발표 · 정리 · 강사 바이브 코딩 · 팁 · 예고)
|
||||
- 과제: [VIBE-Q-TFLOW](../../Last3Mon/68/VIBE-Q-TFLOW.md)
|
||||
- 과제: [VIBE-REQ-TFLOW](../../Last3Mon/68/VIBE-REQ-TFLOW.md)(요청서) → 학생이 직접 쓰는 `SPEC.md` → [VIBE-Q-TFLOW](../../Last3Mon/68/VIBE-Q-TFLOW.md)(요구 · 단계)와 비교 → 만들기 → 수업 뒤 `VIBE-A-TFLOW.md` 공개
|
||||
- **오늘부터 바뀐 점**: 지난 이틀 VIBE-Q를 통째로 에이전트에게 주고 "만들어 줘"가 많았습니다. 그러면 결과를 판단할 기준이 학생에게 없습니다. 오늘은 사람의 말(요청서)을 **확인할 수 있는 요구**로 바꾸는 일을 학생이 먼저 하고, VIBE-Q는 그 다음 단계(비교 대상)로 씁니다.
|
||||
- 오늘은 `tflow`: n8n 워크플로우 JSON을 **트리 · mermaid · 노드별 한국어 설명**으로 보여 주는 TUI입니다. 에이전트가 만든 n8n 파일을 확인하는 도구라 오늘 오전 실습과 바로 이어집니다.
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
A["7교시<br/>각자 만들기 50분"] --> B["발표<br/>10분"] --> C["강사 정리<br/>10분"] --> D["강사 바이브 코딩<br/>15분"] --> E["보충 · 팁<br/>10분"] --> F["69일차 예고<br/>5분"]
|
||||
R["요청서 → SPEC<br/>10분"] --> A["7교시<br/>단계별 만들기 40분"] --> B["발표<br/>10분"] --> C["강사 정리<br/>10분"] --> D["강사 바이브 코딩<br/>15분"] --> E["보충 · 팁<br/>10분"] --> F["69일차 예고<br/>5분"]
|
||||
```
|
||||
|
||||
## 1. 7교시 · 각자 만들기 (50분)
|
||||
|
||||
| 시간 | 단계 | 확인 |
|
||||
| --- | --- | --- |
|
||||
| 16:00~16:03 | 0. 준비 (`~/vibe/tflow`, `git init`, 에이전트 실행) | |
|
||||
| 16:03~16:15 | 1. 글자로 트리 · mermaid (R1 · R4) | `uv run tflow agents/it-agent.json`, `--mermaid` |
|
||||
| 16:15~16:30 | 2. TUI · 상세 · 경고 (R2 · R3 · R5) | `IT help agent`의 모델·Tool, 망가진 파일 |
|
||||
| 16:30~16:43 | 3. 한국어 설명 · 캐시 (R3) | 두 번째 선택은 바로 |
|
||||
| 16:43~16:50 | 4. 정리 · 내 `assistant.json` 열어 보기 · 발표 메모 | |
|
||||
| 16:00~16:02 | 0. 준비 (`~/vibe/tflow`, `git init`). **에이전트는 아직 켜지 않음** | |
|
||||
| 16:02~16:12 | 0. 요청서 → `SPEC.md` (직접) → VIBE-Q와 비교 · 고치기 · commit | 요구마다 확인 방법(숫자 · 파일), 숨은 요구, 비교한 줄 |
|
||||
| 16:12~16:23 | 1. 글자로 트리 · mermaid (R1 · R4). 첫 요청은 "SPEC.md를 읽고 확인 방법부터 말해" | `uv run tflow agents/it-agent.json`, `--mermaid` |
|
||||
| 16:23~16:35 | 2. TUI · 상세 · 경고 (R2 · R3 · R5 · R6) | `IT help agent`의 모델·Tool, 망가진 파일 |
|
||||
| 16:35~16:45 | 3. 한국어 설명 · 캐시 (R3) | 두 번째 선택은 바로 |
|
||||
| 16:45~16:50 | 4. 정리 · `SPEC.md` 체크 · 내 `assistant.json` 열어 보기 · 발표 메모 | |
|
||||
|
||||
16:00에 화면에 띄울 것: 요청서의 ①~⑤와 예 하나(① → R1). "형용사는 확인할 수 없습니다. 숫자 · 파일 · 화면으로 바꿉니다." 16:10쯤 "VIBE-Q를 열어 비교하세요"를 알립니다.
|
||||
|
||||
강사는 교실을 돌며 아래를 봅니다.
|
||||
|
||||
| 볼 것 | 막혔을 때 한마디 |
|
||||
| --- | --- |
|
||||
| SPEC 없이 VIBE-Q를 통째로 붙여 넣었나 | "요청서로 SPEC.md부터. 확인 방법이 없으면 됐는지 모릅니다" |
|
||||
| SPEC에 형용사만 ("보기 좋게") | "함께 받은 파일을 열어 노드 · 갈래 수를 세어서 숫자로" |
|
||||
| 한 번에 TUI까지 만들어 달라고 했나 | "1단계는 글자 출력만. 트리가 맞는지부터" |
|
||||
| 트리가 끝없이 길어지거나 같은 노드 반복 | "다시 모이는 노드(`Send result`)는 두 번째부터 한 줄로" |
|
||||
| mermaid가 안 그려짐 | "노드 이름에 `?`·괄호가 있어요. id는 번호로" |
|
||||
@@ -35,7 +41,7 @@ flowchart LR
|
||||
## 2. 8교시 · 발표 (10분)
|
||||
|
||||
- 1~2명. 7교시에 돌면서 **다시 모이는 노드나 mermaid 깨짐을 스스로 푼 사람**을 먼저 고릅니다.
|
||||
- 3분 발표 · 2분 질문: 잘 먹힌 요청문 / 안 먹힌 요청문 / 에이전트가 틀린 곳과 알아챈 방법 / 내 `assistant.json` 시연.
|
||||
- 3분 발표 · 2분 질문: **내 SPEC과 VIBE-Q가 달랐던 곳** / 잘 먹힌 요청문 / 안 먹힌 요청문 / 에이전트가 틀린 곳과 알아챈 방법 / 내 `assistant.json` 시연.
|
||||
|
||||
## 3. 강사 정리 (10분)
|
||||
|
||||
@@ -43,6 +49,7 @@ flowchart LR
|
||||
|
||||
| | n8n 사내 업무 도우미 | tflow |
|
||||
| --- | --- | --- |
|
||||
| 요청 분석 | 복합 요청 → 업무 분석표 (Lab 01) | 요청서 → SPEC.md (요구 · 숨은 요구 · 범위 밖 · 순서) |
|
||||
| 나누기 | 요청 → 업무 (LLM) | 파일 → 노드·연결 목록 (코드) |
|
||||
| 계약 | Agent 입력·결과 | `model.py`의 Node·Link (트리·mermaid·TUI가 함께 씀) |
|
||||
| 규칙이 할 일 | 담당 Agent, 빠진 입력 | 갈래 이름, 다시 모이는 노드, 경고 |
|
||||
@@ -66,6 +73,7 @@ flowchart LR
|
||||
|
||||
| 팁 | 설명 |
|
||||
| --- | --- |
|
||||
| 요청서 → 요구가 먼저 | 확인 방법이 있는 요구가 있어야 에이전트의 "완료"를 판단할 수 있음. SPEC.md는 에이전트에게 읽히는 문서 |
|
||||
| 데이터 모양부터 | "파일 → Node·Link"를 먼저 만들고 테스트하면 화면은 나중에 얼마든지 바꿈 |
|
||||
| 테스트 자료는 진짜 파일로 | 오늘 쓴 `agents/*.json`을 `tests/data`에 복사. 숫자(노드 14)로 확인 |
|
||||
| 망가진 입력도 테스트 | 경고 기능은 망가진 파일이 있어야 확인됨 |
|
||||
@@ -81,4 +89,6 @@ flowchart LR
|
||||
## 확인 (강사)
|
||||
|
||||
- [ ] 7교시 시작 전 `OPENAI_API_KEY` 꺼내는 명령을 화면에 띄웠다 (키 값은 띄우지 않음).
|
||||
- [ ] 16:00 요청서 → SPEC 10분을 지켰다 (에이전트 없이), 16:10 VIBE-Q 비교 알림.
|
||||
- [ ] 발표자 1~2명, 강사 정리 표, 강사 바이브 코딩 1개(시간 기록), 팁, 예고.
|
||||
- [ ] 수업 뒤: `VIBE-A-TFLOW.md`의 "자주 빠뜨리는 것"·강사 바이브 코딩 시간을 채우고 **학생 저장소에 VIBE-A만** 올린다 (LAB-A는 올리지 않음).
|
||||
@@ -19,7 +19,7 @@
|
||||
| - | 13:00~14:00 | 점심 | |
|
||||
| 5 | 14:00~14:50 | 3단계 · 검증과 장애 격리, Lab 03 예제 1·2 | [3단계](03-STAGE3-VERIFY-AND-SCALE.md), [Lab 03](../../Last3Mon/68/LAB-03-Q-VERIFY-AND-ISOLATE.md) |
|
||||
| 6 | 15:00~15:50 | 3단계 · Lab 03 과제 40분 (어려운 테스트 · 확장 계획) · 풀이 | [Lab 03](../../Last3Mon/68/LAB-03-Q-VERIFY-AND-ISOLATE.md) |
|
||||
| 7 | 16:00~16:50 | 바이브 코딩 · `tflow` 만들기 (각자) | [VIBE-Q-TFLOW](../../Last3Mon/68/VIBE-Q-TFLOW.md), [진행](04-VIBE-CODING.md) |
|
||||
| 7 | 16:00~16:50 | 바이브 코딩 · 요청서 → SPEC → `tflow` 만들기 (각자) | [VIBE-REQ-TFLOW](../../Last3Mon/68/VIBE-REQ-TFLOW.md) → [VIBE-Q-TFLOW](../../Last3Mon/68/VIBE-Q-TFLOW.md), [진행](04-VIBE-CODING.md) |
|
||||
| 8 | 17:00~17:50 | 바이브 코딩 발표 · 정리 · 강사 바이브 코딩 · 팁 · 69일차 예고 | [진행](04-VIBE-CODING.md) |
|
||||
|
||||
```mermaid
|
||||
|
||||
Reference in new issue
Block a user