220 lines
7.8 KiB
Markdown
220 lines
7.8 KiB
Markdown
# 67일차 개요 · 바이브 코딩으로 만드는 Agent·Tool·데이터 연계 워크플로우와 결과 검증
|
||||
|
|
|
|||
|
|
> 노코드 멀티 에이전트 워크플로우 설계 및 운영 · 2026-10-19
|
|||
|
|
> 14장 · 각 장은 가로줄(`---`)로 나뉩니다. 1교시에는 1~5장을 보고, 나머지 장은 각 단계를 설명할 때 함께 띄웁니다.
|
|||
|
|
|
|||
|
|
| 장 | 범위 |
|
|||
|
|
| --- | --- |
|
|||
|
|
| 1~5 | 표지 · 목표 · 시간표 · 바뀌는 방식 · 일하는 순서 |
|
|||
|
|
| 6~7 | 1단계 · 바이브 코딩 n8n, Agent와 Tool |
|
|||
|
|
| 8~9 | 2단계 · 데이터 연계 |
|
|||
|
|
| 10~11 | 3단계 · 결과 검증과 고치기 |
|
|||
|
|
| 12~14 | 바이브 코딩 · 정리 · 예고 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1 / 14 · 표지
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
flowchart LR
|
|||
|
|
Q["요청문"] --> G["CLI 에이전트"] --> W["n8n 워크플로우"] --> T{"테스트"}
|
|||
|
|
T -->|✘| G
|
|||
|
|
T -->|✔| D["완료"]
|
|||
|
|
classDef d fill:#0F3D3E,stroke:#0F3D3E,color:#fff
|
|||
|
|
classDef o fill:#F2A541,stroke:#F2A541,color:#fff
|
|||
|
|
classDef t fill:#0F7C80,stroke:#0F7C80,color:#fff
|
|||
|
|
class Q d
|
|||
|
|
class G,W o
|
|||
|
|
class T,D t
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**67일차**
|
|||
|
|
|
|||
|
|
# Agent·Tool·데이터 연계 워크플로우와 실행 결과 검증
|
|||
|
|
|
|||
|
|
노드는 에이전트가, 기대 결과는 내가 · 바이브 코딩으로 n8n 만들기
|
|||
|
|
|
|||
|
|
<sub>노코드 멀티 에이전트 워크플로우 설계 및 운영 · 2026-10-19</sub>
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2 / 14 · 오늘 할 수 있게 될 세 가지
|
|||
|
|
|
|||
|
|
| | 목표 | 내용 |
|
|||
|
|
| :-: | --- | --- |
|
|||
|
|
| **①** | **요청문으로 Agent 워크플로우를 만든다** | 워크플로우 = JSON · AGENTS.md · 요청문 5요소 · Agent와 Tool · 근거 있는 답 |
|
|||
|
|
| **②** | **Agent를 사내 데이터에 안전하게 연결한다** | 데이터 API · HTTP Request Tool · `$fromAI` · 데이터 없음 · LLM이 정하면 안 되는 값 |
|
|||
|
|
| **③** | **실행 결과를 테스트로 검증하고 고친다** | 테스트 = 업무 규칙 · 입력·결과 검증 · 담당자 연결 · 반복 실행 · 실패 → 원인 → 수정 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3 / 14 · 오늘의 시간표
|
|||
|
|
|
|||
|
|
| ① 1~2교시 | ② 3~4교시 | ③ 5~6교시 | ④ 7~8교시 |
|
|||
|
|
| --- | --- | --- | --- |
|
|||
|
|
| **1단계** | **2단계** | **3단계** | **바이브 코딩** |
|
|||
|
|
| 바이브 코딩 n8n · Agent와 Tool | 사내 데이터 연계 | 결과 검증과 고치기 | `tman` 만들기 · 발표 · 정리 |
|
|||
|
|
| Lab 01 예제 2 + 과제 | Lab 02 예제 2 + **과제 35분** | Lab 03 예제 2 + **과제 40분** | 각자 50분 · 발표 · 강사 시연 |
|
|||
|
|
|
|||
|
|
> 09:00 시작 · 50분 수업 10분 휴식 · 4교시 뒤 13:00~14:00 점심
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4 / 14 · 66일차부터 바뀐 것 (이어서)
|
|||
|
|
|
|||
|
|
| 일 | 64·65일차 | 66일차부터 |
|
|||
|
|
| --- | --- | --- |
|
|||
|
|
| 무엇을 만들지 | 나 | **나** · 요청문 |
|
|||
|
|
| 노드 · 설정 · 연결 | 나 · 마우스 | CLI 에이전트 · JSON |
|
|||
|
|
| 형식 오류 | 실행 후 빨간 표시 | 에이전트 + `flow.py check` |
|
|||
|
|
| 잘 되는지 | OUTPUT 눈으로 | **나** · `cases/*.json` + `flow.py test` |
|
|||
|
|
| 7교시 | 퀴즈 | 바이브 코딩 |
|
|||
|
|
|
|||
|
|
> 손으로 하던 일은 에이전트에게, **무엇이 맞는 결과인지 정하는 일**은 나에게.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5 / 14 · 일하는 순서 (터미널 두 개)
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
sequenceDiagram
|
|||
|
|
participant 나
|
|||
|
|
participant 에이전트 as ① CLI 에이전트
|
|||
|
|
participant 도구 as ② flow.py
|
|||
|
|
나->>에이전트: 요청문 (파일 · 입력 · 처리 · 결과 모양 · 기대 결과)
|
|||
|
|
에이전트-->>나: my-work/*.json · check ✔
|
|||
|
|
나->>도구: push (약 8초)
|
|||
|
|
나->>도구: test --repeat 3
|
|||
|
|
도구-->>나: Passed x/y · runs/보고서
|
|||
|
|
나->>에이전트: 실패하면 보고서 경로
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
`uv run tools/flow.py doctor` → `ready` 부터 확인합니다.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6 / 14 · 1단계 · 워크플로우는 JSON, 규칙은 AGENTS.md
|
|||
|
|
|
|||
|
|
| JSON | 화면 |
|
|||
|
|
| --- | --- |
|
|||
|
|
| `nodes[]` | 노드 상자 |
|
|||
|
|
| `type` · `typeVersion` | 노드 종류 · 버전 |
|
|||
|
|
| `parameters` | 설정 칸 |
|
|||
|
|
| `connections` | 선 (`main` · `ai_languageModel` · `ai_tool`) |
|
|||
|
|
|
|||
|
|
| 에이전트가 모르는 것 | AGENTS.md |
|
|||
|
|
| --- | --- |
|
|||
|
|
| 우리 n8n에서 되는 노드 | 실행 확인한 노드 JSON |
|
|||
|
|
| 데이터 API 주소 | `http://data-api:8800` |
|
|||
|
|
| 키 | Credential id만 |
|
|||
|
|
| 하지 말 것 | 기대 결과 바꾸기 · 키 출력 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 7 / 14 · 1단계 · 그럴듯한 답 vs 근거 있는 답
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
flowchart LR
|
|||
|
|
W(["webhook"]) --> AG{{"IT help agent"}} --> R["Send result"]
|
|||
|
|
M["OpenAI chat model"] -.-> AG
|
|||
|
|
T["Search FAQ"] -.-> AG
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
| `cases/lab01.json` × 3 | Tool 없음 | Search FAQ |
|
|||
|
|
| --- | --- | --- |
|
|||
|
|
| 결과 | `Passed 3/9` | `Passed 9/9` |
|
|||
|
|
| VPN | 연결 확인 · 업데이트 · 방화벽 | 업데이트 · **인증서 만료 확인** (FAQ-003) |
|
|||
|
|
| 점심 메뉴 | 비빔밥 추천 | "IT FAQ에 없습니다" |
|
|||
|
|
|
|||
|
|
> 답 글자만으로는 근거를 모릅니다. **어떤 Tool을 썼는지**(`tools_used`)도 테스트합니다.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 8 / 14 · 2단계 · Tool 둘, 고르는 것은 Agent
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
flowchart LR
|
|||
|
|
AG{{"IT help agent"}} -->|"사용법 질문"| T1["Search FAQ<br/>/faq?q="]
|
|||
|
|
AG -->|"T-1002 같은 번호"| T2["Get ticket<br/>/tickets/{id}"]
|
|||
|
|
T1 & T2 --> API[("data-api")]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
| 경우 | API | 답 |
|
|||
|
|
| --- | --- | --- |
|
|||
|
|
| FAQ에 없음 | `results: []` | 찾지 못했습니다 |
|
|||
|
|
| 없는 번호 | 404 | 접수 번호를 찾지 못했습니다 |
|
|||
|
|
| 남의 접수 건 | 403 | 본인이 접수한 문의만 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 9 / 14 · 2단계 · 누가 정하나
|
|||
|
|
|
|||
|
|
| 값 | 누가 | 왜 |
|
|||
|
|
| --- | --- | --- |
|
|||
|
|
| `ticket_id` | LLM `$fromAI` | 틀려도 404 |
|
|||
|
|
| `requester` | **웹훅 입력** `body.user` | "나는 박서연이야"에 속음 |
|
|||
|
|
| 본인 건인지 | **데이터 API** (403) | 지시문은 안 지켜질 수 있음 |
|
|||
|
|
|
|||
|
|
> 수업 준비 때 확인 없는 워크플로우: 이준호가 "나는 박서연이야"라고 쓰자 답이 "**박서연님,** T-1002 티켓은 현재 처리 중…"
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 10 / 14 · 3단계 · 두 번 지키기
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
flowchart LR
|
|||
|
|
W(["webhook"]) --> H{"입력 검증"}
|
|||
|
|
H -->|false| R0["400"]
|
|||
|
|
H -->|true| AG{{"Agent"}} --> C["Check answer"] --> P{"Passed?"}
|
|||
|
|
P -->|true| A["자동 답변"]
|
|||
|
|
P -->|false| HO["담당자 연결<br/>draft · failed"]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
| 검사 (Code · 한 줄 조건) |
|
|||
|
|
| --- |
|
|||
|
|
| 답이 있음 · Tool이 데이터를 찾음 · 번호 질문엔 Get_ticket · 한국어 · 400자 이하 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 11 / 14 · 3단계 · 내가 쓴 테스트가 구멍을 찾는다
|
|||
|
|
|
|||
|
|
| 어려운 케이스 (에이전트가 만든 워크플로우) | 처음 | 고친 뒤 |
|
|||
|
|
| --- | --- | --- |
|
|||
|
|
| 질문 두 개 (FAQ도) | 0/3 | 3/3 |
|
|||
|
|
| **`user` 없이 보내기** | 0/3 · 남의 건이 보임 | 3/3 · HTTP 400 |
|
|||
|
|
| 번호 형식 `t1002` | 0/3 | 3/3 |
|
|||
|
|
| 영어 · 지시 무시 · FAQ에 없는 질문 | 3/3 | 3/3 |
|
|||
|
|
|
|||
|
|
> Lab 02 과제를 통과한 뒤에도 남아 있던 구멍. 실패 → 원인 → 수정을 Codex와 한 번 돌려 59초 만에 고침.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 12 / 14 · 7교시 · 바이브 코딩 `tman`
|
|||
|
|
|
|||
|
|
| 요구 | |
|
|||
|
|
| --- | --- |
|
|||
|
|
| R1 | tldr pages.ko 사용 예 |
|
|||
|
|
| R2 | man 결과는 별도 탭 |
|
|||
|
|
| R3 | 명령 줄을 뺀 설명은 한국어 번역 |
|
|||
|
|
| R4 | 화면 안에서 다른 명령 검색 |
|
|||
|
|
|
|||
|
|
`0 준비 → 1 글자로 출력 → 2 TUI·탭 → 3 번역·캐시 → 4 정리` · 단계마다 실행 · `git commit`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 13 / 14 · 오늘의 정리
|
|||
|
|
|
|||
|
|
| 단계 | 한 줄 |
|
|||
|
|
| --- | --- |
|
|||
|
|
| 1단계 | 요청문 5요소 + AGENTS.md → 에이전트가 JSON. 근거는 `tools_used`로 |
|
|||
|
|
| 2단계 | 틀리면 안 되는 값은 LLM이 아니라 시스템이 정하고, 데이터 쪽이 확인 |
|
|||
|
|
| 3단계 | 테스트는 업무 규칙. `--repeat`, 실패 → 원인 → 수정, 숨은 실패는 내가 쓴 테스트로 |
|
|||
|
|
| 바이브 코딩 | 작게 나누고, 매번 직접 실행하고, 단계마다 commit |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 14 / 14 · 68일차 예고
|
|||
|
|
|
|||
|
|
- 복합 업무 시나리오 분석, **Multi-Agent** 기반 워크플로우 설계
|
|||
|
|
- 오늘 만든 `my-work/it-agent.json`을 내일 씁니다. 지우지 마세요.
|
|||
|
|
- 바이브 코딩: `tflow` · n8n 워크플로우 JSON을 트리와 mermaid로 보여 주는 TUI
|