2편 — AI와 n8n 설계의 핵심
AI를 믿되 맡기지 않는다: Router 패턴과 Slot Filling의 모든 것
1. 들어가며
고객 문의를 자동화한다는 것은 단순히 AI에게 “읽고 정리해줘”라고 시키는 것만으로는 충분하지 않습니다.
AI는 때때로 JSON을 자연어처럼 대답하거나, 자연어를 JSON처럼 포맷팅하며 예기치 않은 방식으로 동작하기 때문입니다.
실제 프로젝트 초기에 가장 큰 문제였던 것도 바로 이것이었습니다:
“입력 담당 AI가 갑자기 대화를 시작하고,
조회 담당 AI는 JSON을 뱉는 상황.”
이 문제는 단순한 프롬프트 수정으로 해결되지 않았습니다.
그래서 이번 글에서는 Router 패턴과 Slot Filling을 활용해 안정적인 대화형 자동화 시스템을 설계한 과정을 설명하겠습니다.
2. 왜 한 AI에게 모든 걸 맡기면 안 되는가?
처음에는 아래와 같은 구조를 생각했습니다.
- 관리자: “문의 등록해줘”
- AI: JSON 반환 → 저장
- 관리자: “지난주 오류 건 몇 개였어?”
- AI: 자연어로 분석 결과 설명
겉으로 보기엔 그럴듯하지만 실제로는 수많은 충돌이 일어났습니다.
🧨 문제 1. JSON/자연어 포맷 충돌(Juggling Problem)
입력에는 JSON이 필요하고,
조회에는 자연어가 필요합니다.
그러나 한 AI에게 둘 다 시키면 AI는 이렇게 행동합니다:
- JSON을 요구할 때도 자연어를 섞어 말함
- 자연어를 요구할 때도 JSON 틀을 유지하려 함
- JSON 안에 markdown(```json`) 태그를 넣어버려 n8n이 파싱 불가
- 심지어 질문에 답하지 않고 “입력할까요?”라고 되묻는 등 흐름 붕괴
🧨 문제 2. ‘의도(Intent)’ 혼동
사용자가
“로그인이 안 돼요”라고 말했을 때
AI가 이것이
- 데이터 입력 요청인지
- 민원 설명인지
- 단순한 잡담인지
판단하지 못하는 문제가 발생했습니다.
그 결과 AI가 엉뚱한 시트에 데이터를 넣고,
조회 로직이 흐트러지고,
워크플로우가 불필요하게 실행되는 문제들이 나타났습니다.
3. 해결책: Router 패턴 도입
🔧 Router Pattern이란?
AI들을 “전부 다 하는 만능 인력”이 아니라
“각자의 역할만 수행하는 전문 인력”으로 나누는 설계 방식입니다.
우리 시스템의 Router AI는 단 한 가지 역할만 합니다:
👉 “사용자의 말을 듣고 목적(Intent)만 판단한다.”
이 AI는 절대로 데이터를 생성하지도 않고,
조회도 하지 않고,
대화도 하지 않습니다.
단지 아래 중 하나를 분류할 뿐입니다.
| create | 고객 문의 신규 등록 |
| analyze | 기존 데이터 조회/요약/분석 |
| chat | 잡담/일반 대화 |
Router AI는 프론트 직원처럼
“어, 고객님은 체크인 손님이시네요. 저쪽 카운터로 가세요.”
라는 역할을 할 뿐입니다.
✨ 결과
- 입력 담당 AI는 철저히 JSON 생성에만 집중
- 조회 담당 AI는 자연어 분석에만 집중
- 역할 충돌 사라짐 → 시스템 안정성 급상승
- AI 오류율 급감 (특히 JSON 생성 오류)
4. 안정적인 입력을 위한 Slot Filling
Router 패턴으로 Intent 문제는 해결했지만,
또 하나의 문제가 남아있었습니다.
바로 고객이
“로그인이 안 돼요”
라고 말했을 때입니다.
문제점
입력하려면 필수 정보 4가지가 반드시 필요합니다:
- 이름
- 이메일
- 문의 유형
- 문의 내용
하지만 고객이 이것들을 한 번에 말해주지 않을 수도 있습니다.
그렇다고 AI가 “추측”하도록 맡기면 위험합니다.
그래서 도입한 전략이 Slot Filling입니다.
5. Slot Filling이란?
AI에게
“필수 정보가 모두 채워질 때까지 절대 저장을 시도하지 마라”
라고 규칙을 주는 방식입니다.
즉, AI가 이렇게 행동합니다.
1) 고객: “로그인이 안 돼요”
AI:
“확인했습니다! 접수를 위해 성함과 이메일을 알려주시겠어요?”
2) 고객: “홍길동 / gildong@mail.com 입니다.”
AI:
“감사합니다! 문제 유형을 선택해주세요: 오류, 문의, 제안 중 어떤 건가요?”
3) 정보가 모두 모였을 때
비로소 JSON을 생성 → 시트에 저장
이 과정 덕분에
- 필수 정보 누락 없음
- 잘못된 입력 시도 없음
- 시스템 흐름 중단 없음
이라는 안정적인 구조가 만들어졌습니다.
6. Slot Filling + Router = 안정성 극대화
이 두 가지가 합쳐지면서 다음과 같은 효과가 나타납니다.
✔ JSON/자연어 충돌 제로
입력과 조회가 완전히 분리되므로 포맷 오류가 사라짐.
✔ 쓰레기 입력(garbage input) 차단
필수 정보가 모이지 않으면 절대 DB에 저장되지 않음.
✔ AI 오작동 최소화
특히 “대답해야 할 상황”과 “기록해야 할 상황”이 완전히 분리됨.
✔ 사용자는 자연스럽게 대화
고객은 단지 자신의 상황만 말해도, AI가 부족한 정보만 딱 필요한 만큼 물어봄.
7. 실제 구현 시 n8n에서 신경 쓴 점
① Router AI 프롬프트에서 “절대 처리 로직 금지”
Router는 의도 분류만.
데이터 생성 금지, 조회 금지, JSON 금지.
② 입력 AI에는 엄격한 JSON 스키마 제공
필수 키 누락 시 오류 발생하도록 설계.
③ Slot Filling 로직은 Code Node 없이도 구현
조건부 라우팅 + “정보 누락 시 질문하기 흐름”만으로 충분.
④ 메시지 히스토리는 필요한 만큼만 전달
AI가 과거 대화로 인해 혼란스럽지 않도록.
8. 마무리
2편에서는 AI 기반 CRM 자동화의 핵심적인 두 설계 요소
Router 패턴과 Slot Filling을 집중적으로 살펴봤습니다.
이 두 가지는 AI 자동화 시스템을 만들 때
가장 흔하게 발생하는 문제를 해결하고
전체 시스템의 안정성을 획기적으로 개선해주는 핵심 전략입니다.
다음 3편에서는 본격적으로
Google Sheets → Notion으로 이어지는 데이터 모델링 & 중복 처리 기술을 다루겠습니다.
- Master DB / Log DB 분리
- Staging ↔ Production 구조
- Trigger Storm 방지
- 중복 업데이트(Upsert) 처리
- IsSynced 방식