송희웅 · Heewung Song AI Product Engineer · 10년+ · 2026

반복되는 운영 업무를,
프로덕션 AI 시스템으로.

병원의 전화 업무를 AI가 실제로 처리하게 만들고, 그 시스템을 설계부터 운영까지 책임집니다. 같은 방식을 통화 분석과 사내 업무지원 AI로 넓혀 왔습니다.

병원 전화 Voice AI에서 시작해 통화 분석 및 평가 · 챗봇 고객상담 · AIU 사내 업무지원까지 운영 AI 제품의 범위를 넓혀 왔습니다.

Four chapters · one pattern
01병원 전화 Voice AI거는 전화와 받는 전화를 하나의 시스템으로
02통화 분석 및 평가인·아웃바운드 통화 결과와 품질 분석
03챗봇 고객상담웹과 카카오의 1차 응대
04AIU 사내 업무지원같은 방식을 동료의 업무로
0프로덕션 AI 통화 성공
0일 평균 통화
0도입 병원
0다국어 운영

키보드 ← → 또는 화면 클릭으로 다음 슬라이드

PROLOGUEWorking thesis Method

기술이 아니라, 업무 구조에서 시작합니다

무엇을 쓸지 고르기 전에, 누가 무엇을 반복하고 어떤 예외가 운영을 멈추게 하는지부터 정의합니다.

소프트웨어 제품 개발 10년+ — 그 위에 올린 AI 제품 1년 6개월 2014 ↓ 2026
  1. 2014.12 – 2016.02 예스콜닷컴웹 개발자 반응형 웹 빌더·쇼핑몰 플랫폼의 프론트엔드와 백엔드 개발
  2. 2017.10 – 2018.12 투미유소프트웨어 엔지니어 영어회화 학습 서비스의 iOS 앱·백엔드 개발과 AWS 인프라 운영
  3. 2019.03 – 2025.02 투썬월드소프트웨어 엔지니어 교육·AI 웹 제품, 데이터 수집 파이프라인, RAG 비자 챗봇을 엔드투엔드 개발
  4. 2025.03 – 현재 와이즈에이아이AI 엔지니어 / AI 프로덕트 팀장 Voice AI·통화 분석·고객상담·사내 업무지원 AI의 설계부터 운영까지 리드

일하는 방식

  1. 01업무 이해반복 구간과 사람이 병목이 되는 지점을 먼저 찾습니다.
  2. 02경계 설계정책·권한·예외를 코드와 설정으로 고정해 모델의 추론과 분리합니다.
  3. 03제품화실제 도구·데이터·채널에 연결해 운영 가능한 상태까지 만듭니다.
  4. 04운영 개선관측과 평가 결과를 다음 설계의 근거로 되돌립니다.

프론트엔드·백엔드·인프라 경험 위에서 Multi-Agent, 실시간 음성 처리, 검색, LLM 평가를 하나의 제품 경계로 연결해 왔습니다.

End-to-end product scope

사용자 접점에서 데이터·인프라까지 연결하고, 운영 결과를 다시 설계로 되돌립니다.

  1. 01 사용자 접점Voice · Web · Slack WebRTCAG-UINext.jsReact
  2. 02 Agent 런타임추론 · Workflow · 업무 경계 LiveKit AgentsLangGraphDeep AgentsLangChain
  3. 03 애플리케이션서비스 · API · Tool 구현 PythonTypeScriptBunFastAPI
  4. 04 데이터 기반저장 · 검색 · 이벤트 전달 PostgreSQLMySQLRedisQdrant HybridKafkaRabbitMQ
프로덕션 인프라배포 · 격리 · 재현 가능한 운영 기반 AWS ECS FargateDockerTerraform
INDEXPortfolio map · click to jump 28 slides

각 Chapter가 답하는 질문

네 Chapter는 각각 하나의 질문에 답하고, 그 답을 코드와 운영으로 확인 가능한 설계 증거로 뒷받침합니다. 행을 누르면 해당 Chapter로 이동합니다.

CH 01병원 전화 Voice AI 프로젝트 소개

인/아웃바운드 Voice Call Agent

병원의 예약 확인·안내 전화를 자동 발신하고, 걸려오는 문의를 예약 신청·병원 안내·상담원 연결로 이어가는 실시간 Voice AI 시스템입니다.

하나의 Voice AI 운영 모델

통화 Context · 병원별 정책 · 예약 Tool · 상담원 연결을 같은 Agent 구조에서 운영합니다.

Period2025.03 – 현재
RoleAI 엔지니어 · AI 프로덕트 팀장
Scope실시간 통화 · Agent · Tool Calling · 상담원 연결 · 운영 분석
CH 01병원 전화 Voice AI 전체 구조

전체 시스템 아키텍처

전화망, 실시간 미디어, Agent 실행, 업무 API와 후처리를 서로 다른 책임으로 분리했습니다.

녹음 · 관측 · 후처리 경로
LiveKit Egress → S3Room을 별도 구독해 통화 녹음 저장
OpenTelemetry → Langfuseturn·component latency와 trace
Kafka → Analysis Consumer통화 결과·품질을 비동기로 재구성

Kafka가 실시간 경로와 분석의 경계입니다. 분석이 지연되거나 실패해도 전화 처리 경로는 계속 동작합니다.

CH 01병원 전화 Voice AI LiveKit 확대

LiveKit 기반 실시간 음성 처리

LiveKit Server는 미디어를 전달하고, 통화별 Agent job이 STT·LLM·TTS와 Tool 실행을 담당합니다.

한 통화 = Room + Job통화 상태와 process를 서로 격리합니다.
SFU ≠ AI RuntimeSTT·LLM·TTS는 SFU가 아니라 Agent container에서 실행됩니다.
Egress는 별도 경로Room을 구독해 녹음하고 S3에 저장합니다.
CH 01병원 전화 Voice AI 예약 안전 경계

안전한 Tool Calling 기반 예약 처리

LLM은 예약을 직접 확정하지 않습니다. 병원 정책을 확인하고, 조회된 일정과 환자의 동의가 일치할 때만 예약 신청을 기록합니다.

POLICY GATE양방향 공통
예약 Tool 호출실행보다 병원 정책을 먼저 확인
auto코드 검증 후 AI가 처리
transfer상담원 연결로 전환
leave_memo메모를 접수하고 종료

병원마다 신규 예약·조회에 다른 action mode를 적용합니다.

INBOUND · DYNAMIC BOOKING V3auto 경로 확대
모델이 만든 시간은 사용하지 않음 끊긴 assistant 발화는 증거에서 제외 동의 후 staging 변경 시 Commit 차단
수긍을 날짜로 오해“네”를 검색 조건으로 사용해 존재하지 않는 날짜를 생성
stale 후보 재사용소진된 EarliestOffer가 다음 승인에 다시 사용됨
빈 결과를 임의 대체검색 결과가 없는데 다른 시간을 조용히 선택
예방 · stage-before-commit환자에게 발화된 검증 후보만 신청 대상으로 유지
탐지 · UNSOUND_COMMIT18 / 24,647 예약 시도 · 0.073%
경계 · Commit ≠ EMR 확정통화에서는 예약 신청을 기록합니다. 아웃바운드는 레거시 경로에서 완전한 신청 정보만 staging합니다.
CH 01병원 전화 Voice AI Human Handoff

Warm Transfer 기반 상담 연속성

AI가 모든 통화를 끝내는 것이 목표가 아닙니다. 사람의 판단이 필요한 순간에도 환자가 같은 맥락으로 상담을 이어가게 만듭니다.

병원 정책같은 업무도 병원별로 AI 처리·상담원 연결·메모 접수 정책이 다릅니다.
자동화의 경계사람의 확인과 판단이 필요한 요청은 AI가 완료한 것처럼 말하지 않습니다.
상담 맥락 유지환자가 AI에게 설명한 내용을 상담원에게 다시 처음부터 말하지 않게 합니다.
실제 운영 통화PROD · REDACTED
개인정보를 비식별 처리한 Agent Admin 화면. Warm Transfer 시작, 대기열 진입, 상담원 DTMF 수락, 연결 성공, AI 브리핑과 상담원 연결 결과가 순서대로 표시되어 있다.
구현 증거 · 대기열 진입 → 상담원 DTMF 수락 → 연결 성공 → AI 브리핑 · 환자명과 전화번호는 완전히 마스킹했습니다.
COLD TRANSFER빠르고 단순

SIP REFER로 즉시 전달하고 caller가 LiveKit Room을 떠나면서 AI 세션이 끝납니다. 상담 맥락 브리핑은 없습니다.

SIP REFERRoom 이탈AI 종료
WARM TRANSFER맥락을 유지

환자를 대기시키고 상담원 응답을 확인한 뒤, AI가 요청과 대화 맥락을 브리핑하고 연결 후 이탈합니다.

대기호출브리핑연결AI 이탈

LiveKit 공식 Warm Transfer의 사용자 경험 단계를 참고하되, 현재 구현은 custom SingleRoomWarmTransferTask입니다.

CH 01병원 전화 Voice AI 공용 대기줄

상담원 연결 요청을 순서대로 처리합니다

인바운드와 아웃바운드 요청이 동시에 들어오면 병원별 하나의 대기줄에 세우고, 먼저 기다린 통화부터 상담원에게 연결합니다.

01먼저 온 통화부터요청이 들어온 순서를 그대로 유지합니다.
02재시도해도 같은 자리상담원 호출을 다시 해도 뒤로 가거나 새치기하지 않습니다.
03끊어진 통화는 제거환자가 통화를 종료하면 대기줄에서 빼고 다음 순서를 진행합니다.
04한 회선에 한 통화같은 상담원에게 여러 통화를 동시에 연결하지 않습니다.
연결 성공첫 번째 통화가 빠지고 다음 통화가 연결 차례가 됩니다.
대기가 길어질 때환자에게 계속 기다릴지 확인하며 통화를 유지합니다.
연결하지 못할 때Leave Memo로 용건을 받아 병원의 후속 연락으로 이어갑니다.
CH 01병원 전화 Voice AI 성과

성과와 배운 점

프로덕션에서 반복 통화를 운영하며, AI가 직접 끝낸 일과 사람에게 이어준 일을 실제 결과로 확인했습니다.

620,000+인·아웃바운드 누적 성공 통화
4,000건/일양방향 일 평균 통화
300개+Voice AI 도입 병원

실제 인바운드 처리 결과

2026.08.13–26 · PROD
AI 단독 처리율 7.4%

상담원 연결이나 메모 접수 없이 AI가 끝까지 처리한 통화입니다.

예약 조회 요청 완료91.0%
예약 취소 요청 완료36.6%
예약 신청 요청 완료16.8%
예약 변경 요청 완료10.5%

업무별 숫자는 각 요청을 시도한 건 중 해당 흐름을 끝까지 처리한 비율입니다. 예약 신청은 신청 정보 기록이며, 변경·취소 완료도 실제 EMR 상태 변경 수치가 아닙니다.

운영하며 배운 세 가지

01AI는 대화하고, 중요한 결정은 코드가 확인합니다예약 시간·환자 동의·Tool 결과를 실제 데이터와 상태로 다시 확인했습니다.
02AI가 해결하지 못해도 환자 요청은 남아야 합니다Warm Transfer와 Leave Memo로 상담과 후속 연락이 끊기지 않게 했습니다.
03통화를 단계별로 기록해 막힌 곳부터 고쳤습니다본인확인·일정 안내·상담원 연결 중 멈춘 지점을 찾아 해당 구간부터 개선했습니다.
CH 02통화 분석 및 평가 무엇인가

인/아웃바운드 통화 분석 및 평가

2026 · Kafka 기반 후처리·평가 파이프라인 · 설계·구현

대화 내용·시스템 이벤트·녹음을 결합해 업무 처리 결과와 대화 품질을 분석하고 운영 지표로 제공합니다.

장애 격리실시간 통화와 분석을 Kafka로 분리해, 분석이 실패해도 실제 전화는 계속됩니다.
상세 범위다음 장부터는 인바운드 분석 v2를 중심으로 설명합니다. 아웃바운드는 별도 파이프라인입니다.
CH 02통화 분석 및 평가 기능

상담원 연결 이후 통화 내용 복원

AI가 대화에서 빠진 이후의 환자·상담원 발화를 녹음에서 복원해, 한 통화의 전체 시간순 기록을 만듭니다.

녹음 준비 지연준비되지 않았으면 가용성을 다시 확인합니다.
짧거나 조용한 오디오분석 품질이 낮은 구간은 억지로 전사하지 않습니다.
상담원 발화 없음상담 결과를 추정하지 않고 확인할 수 없음으로 남깁니다.
CH 02통화 분석 및 평가 규칙 분류

28개 규칙 기반 통화 분류

Developer 이벤트를 규칙으로 해석해 예약·정보·상담원·종료 활동을 28개 항목으로 표시합니다. 한 통화에서 여러 항목이 동시에 감지될 수 있습니다.

실제 Agent Admin 분류 화면PROD · 개인·병원·통화 식별정보 제외
상단 통화·환자·병원 정보와 내부 통화 ID를 완전히 제외한 카드 영역
CH 02통화 분석 및 평가 기능

업무별 처리 결과와 통화 결과 분류

한 통화 안의 여러 업무 결과는 각각 기록하고, 통화 전체의 대표 결과는 하나만 남겨 중복 집계를 막습니다.

요청별로 따로 기록하나의 상담원 연결을 앞선 모든 요청에 중복 반영하지 않습니다.
종료 원인을 구분시스템이 종료한 통화를 환자 이탈로 계산하지 않습니다.
실패 지점을 구분본인 확인 전 중단과 확인 후 실패를 같은 원인으로 계산하지 않습니다.
CH 02통화 분석 및 평가 기능

LLM 기반 대화 품질 평가

업무 처리 결과는 규칙으로 유지하고, 요청 의도·응답 품질처럼 해석이 필요한 항목만 실제 대화 근거를 요구해 LLM으로 평가합니다.

업무 결과는 코드가 유지LLM 평가가 처리 결과를 덮어쓰지 않습니다.
근거 없으면 확인할 수 없음상담원 발화가 없으면 상담 결과를 추정하지 않습니다.
민감한 평가 결과 분리임상·QA 소견은 downstream Kafka에서 제외하고, Langfuse에는 원문 없이 집계 점수만 보냅니다.
CH 02통화 분석 및 평가 운영 활용

운영 지표로 현황 확인

응대·셀프 처리·예약·상담원 연결과 초기이탈을 같은 기간에서 비교해 운영 상태의 변화를 먼저 확인합니다.

인바운드 운영 현황2026-08-24 · PROD · inbound_daily_v4
실제 PROD 집계 화면 · 비식별 상단 영역만 사용
CH 02통화 분석 및 평가 운영 활용

통화 분석으로 문제 진단

통화를 하나의 결과와 업무별 시도로 나눠 어디에서 실패했고 다음 개선을 누가 맡아야 하는지 확인합니다.

인바운드 콜 분석 진단실2026-08-13–26 · PROD · Analytics v2.1.0
실제 PROD 집계 화면 · 전화번호가 포함된 의미 진단 표는 캡처에서 제외
CH 02통화 분석 및 평가 운영 개선

분석 결과를 운영 개선으로 연결

지표를 보는 데서 끝내지 않고, 문제를 찾은 뒤 규칙을 검증하고 과거 통화를 같은 기준으로 다시 계산합니다.

변경 전 미리 검증기간·병원·통화 ID를 좁혀 실제 저장 없이 결과부터 확인합니다.
버전별 재계산규칙이 바뀌면 LLM 호출 없이 과거 통화를 새 버전으로 다시 계산합니다.
평가 기준 조정저장된 평가 원본을 유지하고 신뢰도 기준은 리포트 시점에 바꿉니다.
버전 보존 원칙기존 결과를 덮어쓰지 않고 이전 버전과 새 버전을 함께 남겨, 규칙 변경 전후를 같은 통화로 비교합니다.
CH 03병원 고객상담 무엇인가

병원 고객상담 AI Agent

2025.03 – 2026.03 · 초기 상담 그래프와 서비스 경계 설계·주요 구현

웹·Kakao에서 환자 문의를 받고, 병원별 지식 안내부터 필요한 상담 절차까지 이어주는 텍스트 기반 상담 챗봇입니다.

예약을 직접 실행하지 않습니다의도를 확인하고 해당 화면을 엽니다.
의학적 판단을 하지 않습니다진단·처방 요청은 안내 범위에서 차단합니다.
CH 03병원 고객상담 구조와 기술

LangGraph 기반 상담 시스템 아키텍처

정해진 규칙으로 먼저 처리하고, 필요한 문의만 상담 Agent와 도구 실행으로 연결합니다.

CH 03병원 고객상담 상태 흐름

상태 기반 상담 흐름

개인정보 수집이 중간에 끼어들어도 원래 질문과 이미 수집한 값을 보존해 상담을 이어갑니다.

CH 03병원 고객상담 지식 검색

병원별 지식 검색과 근거 응답

같은 질문도 병원마다 답이 다르기 때문에 병원과 질문 종류를 먼저 좁힌 뒤 근거가 있는 답만 사용합니다.

CH 03병원 고객상담 운영 결과와 배운 점

데모가 아니라, 300개 병원에서 운영 중인 제품입니다

2025년 5월 출시 후 1년 3개월 — 실제 퍼널 수치와, 그 수치를 만든 설계 원칙입니다.

CH 04AIU 사내 업무지원 무엇인가

사내 AX 프로젝트 — 동료의 반복 업무를 AI 코워커에게

2026.08 – 현재 · 설계·구축 · AX(AI Transformation): 반복 업무를 AI로 전환하는 사내 프로젝트

매뉴얼·통화 기록·운영 지표가 흩어져 있어, 답 하나 찾으려면 사내 시스템 여러 곳을 뒤져야 했습니다. 동료가 이미 쓰는 웹과 Slack에서 질문 한 번으로 답을 받는 사내 AI 코워커를 만들었습니다.

AIU는 병원 AI 제품군(전화 AI · 통화 분석 · Agent Admin · 운영 도구)의 이름이고, OpenBot은 신원·권한·실행·감사를 담당하는 사내 Agent 플랫폼입니다. AIU 코워커는 OpenBot 위에서 동작합니다.

동료웹 · Slack에서 질문
OpenBot신원 확인 · 권한 · 감사
AIU 코워커찾고, 근거로 답한다

운영 동료의 하루에서, 세 장면을 따라갑니다

09:30어제 성과 확인"어제 A병원 전화, 예약 전환 어땠어?"
10:00문제 통화 검토"예약 안 된 통화, 무슨 일이 있었지?"
14:00병원 문의 응대"이 화면 사용법을 물어보는데?"
스스로 실행하지 않습니다 · 지식은 읽기 전용, 데이터베이스는 SELECT만, 실행·권한·감사는 OpenBot이 소유합니다.
CH 04AIU 사내 업무지원 구조와 기술

OpenBot 위에서, Supervisor가 네 전문 Agent를 지휘합니다

권한·감사·실행은 플랫폼(OpenBot)이 맡고, 도메인 지식과 답변은 범위를 나눈 전문 Agent가 맡는 Multi-Agent 구조입니다.

동료웹 · Slack
OpenBot 플랫폼신원 검증 · 권한 · 감사 · 실행 게이트웨이
AIU Supervisor질문 해석 · 위임 · 최종 답변만 노출

위임 — 범위를 나눈 전문 Agent 넷

인바운드

받는 전화 · 통화 조회 · QA

아웃바운드

거는 전화 · 전환 분석

Agent Admin

통화 관리 화면 매뉴얼

HQ · SVC

본사·서비스 운영 도구

지식 번들

5개 제품 · 322개 문서 — 읽기 전용, Agent마다 선언된 자기 소스만 접근합니다

운영 데이터베이스

MySQL — SELECT-only, 이름·전화번호·원문을 제외하고 조회합니다

Supervisor는 원본 문서를 직접 읽지 못합니다 — 위임만 하고, 전문 Agent의 답을 근거와 함께 돌려받습니다.

기술 스택

TypeScript · Bun Deep Agents · LangGraph AG-UI GPT-5.6 Luna · Gemini MySQL Zod Slack Docker
CH 04AIU 사내 업무지원 09:30 · 성과 확인
09:30
"어제 A병원 아웃바운드 전화, 예약 전환 어땠어?"운영 동료 · Slack

자연어로 물으면, 검증된 지표로 답합니다

왜 지표 계산을 코드가 소유하나

"전환율"이 무엇을 세는지가 질문마다 달라지면 대시보드와 답변이 어긋납니다. 계산 규칙을 코드에 고정해 누가 언제 물어도 같은 숫자가 나오게 했습니다.

  • 한 전화번호가 여러 번 기록돼도 최대 1건으로만 집계합니다
  • 메모 접수로 마무리된 통화는 전환 실패로 세지 않습니다
질문병원과 날짜만 있으면 됩니다
코드가 소유한 조회미리 검증된 SQL만 실행합니다
지표 답변전환율 · 처리 결과 · 통화 목록
SELECT-only · 답변에는 이름·전화번호·대화 원문·녹음이 포함되지 않습니다.
답변 속에서 예약이 안 된 통화가 눈에 띄면 — 그대로 다음 장면으로 이어집니다 →
CH 04AIU 사내 업무지원 10:00 · 통화 검토
10:00
"그중 예약이 안 된 이 통화, 무슨 일이 있었는지 보여줘"같은 대화에서 이어서 · 통화 ID 지정

무슨 일이 있었는지, 안전장치 안에서 확인합니다

환자와의 대화 원문은 민감 정보입니다. 검토는 하되 유출은 못 하도록 네 개의 안전장치를 코드로 강제했습니다.

01 · 지정한 통화만정확한 통화 ID 1~5건만 받습니다"어제 통화 전부 보여줘" 같은 광범위 요청은 불가능합니다
02 · 마스킹이름·전화번호를 가리고 보여줍니다한국 전화·주민등록번호·이메일 패턴을 치환합니다
03 · 분량 제한턴당 1,200자, 긴 대화는 앞뒤 60개만 읽습니다
04 · 재진술최종 답변은 요약으로만 — 원문을 다시 노출하지 않습니다
대화 원문은 untrusted data로 취급합니다 — 통화 내용에 지시가 섞여 있어도 따르지 않습니다.
CH 04AIU 사내 업무지원 14:00 · 문의 응대
14:00
"병원에서 Agent Admin 화면 두 개가 뭐가 다른지 물어보는데, 어떻게 설명하지?"운영 동료 · 웹

322개 매뉴얼에서 근거를 찾아, 화면까지 붙여 답합니다

한 AI가 다 읽지 않고, 제품별 전문 Agent 넷이 나눠 맡습니다. 각자 자기 제품의 매뉴얼만 읽을 수 있어, 비슷한 화면이 많아도 답이 섞이지 않습니다.

받는 전화 담당

인바운드 Voice AI

거는 전화 담당

아웃바운드 Voice AI

Agent Admin 담당

통화 관리 화면

HQ · SVC 담당

본사·서비스 운영 도구

322개5개 제품의 매뉴얼 문서 — 시작할 때 문서 수·접근 정책·스크린샷 경로를 전부 검증합니다
접근할 수 없는 문서는 숨기되, "문서가 없다"고 단정해 답하지 않습니다.
실제 답변 화면Web
AIU 웹 채팅 화면 — Agent Admin의 인바운드 운영 현황과 통화 분석 v2 화면 차이를 표로 비교하는 답변
WEB비슷한 두 화면의 차이를 비교표로 구분해 답한 실제 사례입니다.
CH 04AIU 사내 업무지원 다음 단계

다음 단계 — 찾아주는 AI에서, 실행하는 AI로

지금 AIU 코워커는 찾아서 답하는 읽기 전용입니다. 실행을 맡길 기반은 이미 준비되어 있습니다.

NOW · 운영 중

묻고, 찾고, 답한다

  • 매뉴얼 답변 · 통화 조회 · 통화 QA를 웹과 Slack에서
  • 3주 만에 구축 — 5개 제품 · 322개 문서 · 4개 전문 Agent · 45개 계약 테스트
  • 읽기 전용 지식 · SELECT-only 조회 · 개인정보 마스킹
확장 후에도 AI가 임의로 실행하는 경로는 없습니다 — 모든 실행은 OpenBot의 정책·감사·사람 승인을 거칩니다.
One pattern · Four chapters 송희웅 · AI Product Engineer

AI를 가능성에서
프로덕션으로 옮기는
엔지니어입니다.

병원 전화 · 통화 분석 · 챗봇 상담 · 사내 업무지원 — 업무를 이해하고, 할 일과 안 할 일을 정하고, 운영으로 증명합니다.

91.0% 예약 조회 요청 완료율 CH 01 · VOICE AI
28 통화마다 감지하는 활동 플래그 CH 02 · CALL ANALYTICS
7,464 누적 상담 시작 사용자 CH 03 · CHATBOT
322 AI가 근거로 답하는 매뉴얼 CH 04 · AIU