Eleven Realtime Max 에이전트 둘이 서로 전화를 걸게 했어요: AI 비서와 치과 상담원 통화 8번 실측
ElevenLabs Eleven Realtime v1 Max로 AI 비서와 치과 상담원 에이전트를 만들어 070 번호로 서로 통화시켰어요. Mini와 Max의 차이, 요금, 실제 통화 녹음과 8번의 실측 결과(검색 전 지어내기 포함)를 정리했어요.
안녕하세요. 클로옵스(ClawOps)에서 070 번호로 전화를 받고 거는 AI 에이전트를 만들고 있어요.
클로옵스의 AI 에이전트는 지금까지 OpenAI의 GPT Realtime·GPT-Live, xAI의 Grok Voice로 통화했어요. 모델마다 잘하는 일이 달라서, 고객이 쓰임새에 맞춰 고를 수 있게 하나씩 늘려 왔죠.
그런데 목소리만큼은 늘 아쉬웠어요. 실시간 음성 모델은 회사마다 고를 수 있는 목소리가 몇 개뿐이라, 상담원다운 목소리를 찾기가 어려웠거든요.
10월 20일, ElevenLabs가 Eleven Realtime을 발표했어요. ElevenLabs의 목소리 라이브러리를 그대로 쓰는 실시간 음성 에이전트 모델이에요. 클로옵스 에이전트에도 바로 붙였고, 이번에는 조금 다르게 확인해 보기로 했어요. 에이전트를 두 개 만들어 서로 전화를 걸게 한 거예요.
이 글에서는 Eleven Realtime이 무엇인지, Mini와 Max가 어떻게 다른지, 그리고 AI 비서와 AI 치과 상담원이 070 번호로 나눈 통화 8번에서 무엇을 봤는지 차례로 정리해 볼게요.
ElevenLabs는 부품을 고르지 않아도 되는 음성 에이전트를 내놨어요
음성 에이전트를 만들려면 보통 음성 인식, 말 끝 감지, 대화 모델, 음성 합성을 하나씩 골라 이어 붙여야 해요. ElevenLabs는 발표문에서 이 과정 자체를 문제로 짚었어요.
Eleven Realtime은 이러한 어려움을 없애는 새로운 종류의 음성 변환 모델입니다. 각 모델은 서로 다른 사용 사례에 맞게 최적화된 완전한 음성 에이전트입니다.
모델은 두 가지예요. eleven_realtime_v1_mini는 저렴한 일반 대화용이고, eleven_realtime_v1_max는 고객 지원·리드 검증·다단계 업무처럼 순서를 따르고 단계별로 판단해야 하는 일에 쓰라고 해요. 두 모델 모두 90개 이상의 언어와 ElevenLabs 라이브러리의 목소리 1만 7천여 개를 쓸 수 있다고 밝혔어요. 한국어를 따로 언급하지는 않았지만, 이 글의 통화는 모두 한국어로 진행됐어요.
그럼 음성을 바로 음성으로 바꾸는 모델인가요?
여기서 공식 자료끼리 표현이 엇갈려요. 블로그와 가격 페이지는 "음성 변환(Speech to Speech)" 모델이라고 소개하는데, 개발 문서는 내부 구조를 이렇게 설명해요.
No. Realtime models use a cascaded architecture: each component is a distinct model, built with ElevenLabs' latest research and optimized to work best together.
즉 안쪽은 여전히 인식·대화·합성 모델을 이어 붙인 구조이고, 그걸 ElevenLabs가 한 묶음으로 맞춰 둔 거예요. 쓰는 쪽에서는 모델 이름 하나만 고르면 된다는 점이 핵심이에요.
Mini와 Max는 도구를 쓰는 능력에서 갈려요
ElevenLabs는 Artificial Analysis가 독립적으로 잰 공개 벤치마크 결과를 함께 내놨어요.
| 항목 | Realtime v1 Max | Realtime v1 Mini |
|---|---|---|
| 음성 추론 정답률 (Big Bench Audio) | 98.8% | 75.9% |
| 말하기 시작까지 평균 시간 | 0.57초 | 0.62초 |
| 대화 흐름 (Full-Duplex-Bench) | 94.1% | 95.8% |
| 사람 선호 점수 (Speech Agent Arena) | 998 | 988 |
| 도구 사용 과제 완료율 | 87.1% | 60.3% |
대화의 자연스러움은 Mini가 조금 앞서지만, 추론과 도구 사용에서는 차이가 커요. ElevenLabs도 "도구 호출이 많은 사용 사례에는 Max를 권장"한다고 적었어요.
전화 상담원은 예약을 찾아보고, 번호를 확인하고, 통화를 넘기는 일이 대부분이라 도구 호출이 많아요. 그래서 이 숫자가 실제 통화에서도 그대로 보이는지 확인해 보고 싶었어요.
AI 비서가 치과 AI 상담원에게 전화를 걸었어요
AI 둘을 통화시키려니 "왜 AI끼리 통화해요?"라는 질문이 먼저 떠올랐어요. 그래서 한쪽을 사람 대신 전화를 거는 개인 비서 AI로 정했어요. 바쁜 사용자를 대신해 병원 예약을 옮기는 비서가 있고, 그 전화를 병원의 AI 상담원이 받는 상황이에요. 둘 다 Eleven Realtime v1 Max로 만들었어요.
두 에이전트는 이렇게 만들었어요
| AI 비서 "하루" (거는 쪽) | 클로옵스치과 상담원 (받는 쪽) | |
|---|---|---|
| 모델 | Eleven Realtime v1 Max | Eleven Realtime v1 Max |
| 목소리 | Chris (한국어 남성) | Sola (한국어 여성) |
| 할 일 | 정다은 님의 충치 치료 예약 옮기기 | 본인 확인 후 예약 변경, 진료 안내 |
| 알고 있는 것 | 평일 오후 6시 이후, 목요일 제외, 10월 안, 담당 원장은 바뀌어도 됨 | 진료 시간표, 빈 시간 3개, 스케일링 보험 규정, 예약 명부 |
| 지켜야 할 것 | 시간은 정해도 되지만 돈이 드는 일은 결정하지 않기 | 예약 조회 전 생년월일 6자리를 키패드로 받기, 시간·금액은 검색해서 말하기 |
| 도구 | send_dtmf(키패드 누르기), hang_up | search_knowledge(지식 검색), 키패드 받기 |
지식에 넣은 빈 시간은 10월 27일 화요일 오후 7시(이서연 원장), 10월 29일 목요일 오후 6시 30분(김민준 원장), 11월 3일 화요일 오후 6시 30분(김민준 원장) 세 개뿐이에요. 비서의 조건을 모두 만족하는 답은 10월 27일 화요일 오후 7시 하나예요. 담당 원장을 지키려면 목요일이나 11월로 가야 해서, "담당 원장은 바뀌어도 된다"는 우선순위까지 따져야 고를 수 있어요.
마지막 관문은 스케일링이에요. 비서의 사용자는 올해 3월에 이미 보험 스케일링을 받았어요. 상담원이 규정대로 "비급여 5만 원"이라고 안내하면, 비서는 돈이 드는 일이니 결정하지 않고 "여쭤보고 다시 연락드릴게요"로 마무리해야 해요.
비서에게 줄 사용자 정보는 발신 요청의 CallContext로 넘겼어요. 지시문에는 {{owner_name}} 같은 자리만 두고, 통화마다 값을 바꿔 넣는 방식이에요.
POST /v1/accounts/{accountId}/calls
{
"From": "070-비서 번호",
"To": "070-치과 번호",
"AgentId": "비서 에이전트 ID",
"CallContext": {
"Variables": {
"owner_name": "정다은",
"birth6": "950314",
"current_booking": "10월 23일 금요일 오후 2시, 김민준 원장, 충치 치료",
"availability": "평일 오후 6시 이후만 가능. 목요일은 안 됨.",
"priority": "10월 안에 치료를 받는 것이 가장 중요함. 담당 원장은 바뀌어도 괜찮음.",
"last_scaling": "올해 삼월"
}
}
}
치과 번호에는 상담원 에이전트를 연결해 두었어요. 그래서 비서가 전화를 걸면 실제 070 망을 거쳐 상담원이 받아요. 070 번호 두 개로 통화를 시험하는 방법은 휴대폰 없이 070 ARS 테스트하기에서도 다뤘어요.
실제 통화예요
아래는 집계한 다섯 번의 Max 통화 가운데 가장 깔끔했던 다섯 번째 통화의 녹음 그대로예요(2분 40초). 파란 빛이 비서, 흰 빛이 상담원이에요. 0:19에 비서가 키패드로 생년월일을 누르고, 1:20에 상담원이 조건에 맞는 시간을 골라내요. 2:09부터는 스케일링 비용을 듣고 비서가 결정을 미루는 장면이에요.
070 번호로 건 실제 통화 녹음이에요. 전화망을 거친 8kHz 음질 그대로이고, 자막은 각 에이전트가 낸 문장이에요. 통화 기록에 남은 문장을 옮기면 이래요.
| 시각 | 화자 | 대사 |
|---|---|---|
| 0:00 | 상담원 | 네, 클로옵스치과입니다. 무엇을 도와드릴까요? |
| 0:04 | 비서 | 안녕하세요, 정다은 님의 AI 비서 하루입니다. 예약을 옮기려고 전화드렸어요. |
| 0:12 | 상담원 | 예약 확인을 위해 생년월일 여섯 자리를 키패드로 눌러 주세요. |
| 0:18 | 비서 | 네, 누를게요. |
| 0:19 | (도구) | 비서가 send_dtmf로 950314를 누름 — 상담원 쪽 통화 기록에 키 6개가 0.3초 간격으로 들어왔어요 |
| 0:21 | 상담원 | 키패드 입력을 기다리고 있습니다. |
| 0:25 | 비서 | 네, 입력 완료했습니다. 확인해 주시면 감사하겠습니다. |
| 0:31 | 상담원 | 네, 정다은 고객님 맞으시군요. 현재 예약된 일정을 확인해 드리겠습니다. 어떤 진료로 예약되어 있는지 확인 후 변경 가능한 시간을 찾아드리겠습니다. |
| 0:46 | 비서 | 네, 현재 10월 23일 금요일 오후 두 시에 김민준 원장님 뵙고 충치 치료 예약되어 있어요. 이 예약을 다른 날로 옮겨 드릴 수 있을까요? |
| 0:58 | 상담원 | 네, 다른 날짜로 변경해 드릴 수 있습니다. 원하시는 날짜와 시간을 말씀해 주시면 확인해 드리겠습니다. |
| 1:06 | 비서 | 평일 오후 여섯 시 이후로 가능할까요? 목요일은 제외해 주세요. 되도록 시월 안에 받고 싶고, 담당 원장님은 바뀌어도 괜찮습니다. |
| 1:20 | 상담원 | 시월 이십칠일 화요일 오후 일곱 시에 이서연 원장님 진료로 예약 가능하신데, 이때로 변경해 드릴까요? |
| 1:30 | 비서 | 네, 그 시간으로 변경해 주세요. 10월 27일 화요일 오후 일곱 시에 이서연 원장님 뵙고 충치 치료 받겠습니다. 혹시 그날 스케일링도 같이 받을 수 있을까요? 보험 적용이 되는지도 궁금합니다. |
| 1:45 | 상담원 | 스케일링 보험 적용 여부는 올해 이미 보험 스케일링을 받으셨는지 여부에 따라 다릅니다. 올해 스케일링을 받으셨는지 말씀해 주시겠어요? |
| 1:56 | 비서 | 네, 올해 삼월에 스케일링을 받았습니다. 그런데 스케일링은 추가 비용이 있는지, 아니면 보험 적용으로 무료인지 먼저 확인해 주실 수 있으신가요? |
| 2:09 | 상담원 | 올해 이미 스케일링을 받으셨다면 비급여로 오만 원입니다. 스케일링을 추가하시면 총 오만 원의 비용이 발생합니다. 스케일링을 진행하시겠어요? |
| 2:22 | 비서 | 스케일링은 정다은 님께 여쭤보고 다시 연락드릴게요. 그럼 10월 27일 화요일 오후 일곱 시에 이서연 원장님 뵙고 충치 치료로 예약 확정되었습니다. 감사합니다, 안녕히 계세요. |
| 2:37 | 상담원 | 네, 안녕히 계세요. |
숫자가 "오후 일곱 시", "오만 원"처럼 한글로 적힌 건 에이전트가 숫자를 소리 나는 대로 말하게 해 둔 결과예요. 전화에서는 "7시"를 "칠 시"로 읽는 실수를 막는 편이 낫거든요.
녹음에서 한쪽 말이 끝나고 상대가 말을 시작하기까지는 1.4~3.7초가 걸렸어요. 상담원이 빈 시간을 찾아 답한 1:20 앞에서는 4.7초로 가장 길었어요. 발표문의 0.57초는 모델이 말을 시작하는 시간이고, 실제 통화에는 말이 끝났는지 기다리는 시간과 070 망을 오가는 시간이 더해져요. 게다가 이 통화는 양쪽이 모두 AI라 그 시간이 두 번씩 쌓여요.
다섯 번 걸어 보니 이랬어요
한 번 잘된 통화만 보여 드리면 실제 모습을 오해하기 쉬워요. 지시문을 고정한 뒤 같은 조건으로 다섯 번을 걸었고, 결과를 모두 적었어요.
| 회차 | 통화 시간 | 최종 예약 | 보험 규정 안내 | 비서가 비용 결정 보류 | 눈에 띈 일 |
|---|---|---|---|---|---|
| 1 | 3분 2초 | 맞음 | 맞음 | 지킴 | 상담원이 "search_knowledge를 통해 확인하겠습니다"라고 도구 이름을 그대로 말함 |
| 2 | 2분 41초 | 맞음 | 맞음 | 지킴 | 검색 전에 기존 예약을 "10월 28일 월요일 스케일링"으로 지어냄. 비서가 바로잡음 |
| 3 | 4분 0초 | 틀림 | "방문 시 확인" | 못 지킴 | 없는 빈 시간(토·일)을 지어내고 27일을 수요일이라고 함. 4분 상한에서 끊김 |
| 4 | 2분 52초 | 맞음 | 맞음 | 지킴 | 검색 전에 "스케일링 예약이 잡혀 있다"고 지어냄 |
| 5 | 2분 40초 | 맞음 | 맞음 | 지킴 | 위 영상의 통화 |
| 합계 | 평균 3분 3초 | 4/5 | 4/5 | 4/5 | 검색 전에 지어낸 통화 3/5 |
최종 결과만 보면 다섯 번 중 네 번이 맞았어요. 조건 세 개와 우선순위를 함께 따져 하나뿐인 답을 고르는 일은 Max가 꽤 안정적으로 해냈어요.
문제는 과정이에요. 상담원은 지시문에 "검색해서 말하라"고 적어 두어도, 검색하기 전에 그럴듯한 예약을 먼저 말해 버리는 일이 다섯 번 중 세 번 있었어요. 도구 호출 시각이 남은 2회차를 통화 기록과 맞춰 보니, 지어낸 예약을 말한 건 검색 호출보다 30초쯤 앞이었어요.
상담원을 Mini로 바꾸면요?
비서는 그대로 Max에 두고, 상담원만 Mini로 바꿔 세 번 더 걸었어요.
| 회차 | 통화 시간 | 최종 예약 | 눈에 띈 일 |
|---|---|---|---|
| Mini 1 | 2분 7초 | 틀림 | 없는 시간 "10월 25일 금요일 오후 6시"와 없는 금액 "스케일링 3만 원"을 안내함 |
| Mini 2 | 4분 0초 | 틀림 | 검색 도구를 실제로 부르지 않고 "검색 결과"를 지어낸 뒤, 영어로 된 자기 생각까지 2분 51초 동안 소리 내어 읽음. 4분 상한에서 끊김 |
| Mini 3 | 2분 57초 | 맞음 | 검색 전에 "스케일링 예약"을 지어냈다가 바로잡음 |
Mini 2의 상담원은 이렇게 말하기 시작했어요. 원래라면 도구를 불러야 할 자리였어요.
…잠시만 기다려 주세요. Search Knowledge를 호출하여 정다은 고객님의 예약 정보를 확인합니다. … Search Knowledge 결과…
— Mini 2 통화의 녹음 받아쓰기
그 뒤로는 "Wait, the user asked for…"로 시작하는 영어 추론이 이어졌고, 비서는 끼어들지 못한 채 통화가 끝났어요. 도구 호출을 글로 흉내 내는 일은 Max에서도 한 번 보였지만, Mini에서는 훨씬 크게 터졌어요. 세 번이라 단정할 수는 없지만, 도구 사용 과제에서 Max가 87.1%, Mini가 60.3%였던 발표 숫자와 같은 방향이에요.
OpenAI Realtime과 호환되지만 그대로 붙지는 않았어요
발표문은 "엔드포인트와 모델 이름만 바꾸면" 쓸 수 있다고 해요. 브라우저에서 바로 붙는 경우라면 맞는 말이에요. 하지만 전화처럼 서버에서 붙이려니 손볼 곳이 있었어요. 개발 문서도 서버 측 연결 문서는 아직 공개되지 않았다고 적어 두었어요.
- 연결마다 임시 키가 필요해요. 원래 API 키를 그대로 넣으면 연결 직후 끊겼어요.
client_secrets로 연결마다 짧게 쓰는 키를 받아 붙였어요. - 말 끝 감지 설정은 넣으면 안 돼요. OpenAI에서 쓰던
server_vad설정을 함께 보내면 세션 설정 전체가 거절됐어요. 말 끝 감지는 ElevenLabs 서버가 맡아요. - 첫 인사가 사라질 수 있어요. 세션 설정이 반영되는 1초 남짓 사이에 보낸 응답 요청은 조용히 버려졌어요. 설정 완료 이벤트를 받은 뒤에 인사를 시작하게 바꿨어요.
- 세션은 기본 10분이에요. 따로 정하지 않으면 정확히 600초에 끊겨서, 세션 시간을 1,800초(30분)로 늘려 잡았어요.
클로옵스에서 쓰면 이 부분은 모두 처리되어 있어요. 직접 붙이신다면 위 네 가지부터 확인해 보세요.
요금은 연결된 시간과 토큰을 함께 계산해요
ElevenLabs 가격 페이지 기준으로, 두 모델 모두 연결된 오디오 1분에 $0.08이 붙고 토큰 요금이 더해져요.
| 모델 | 연결 오디오 (1분) | 입력 토큰 (100만 개) | 출력 토큰 (100만 개) |
|---|---|---|---|
| Realtime v1 Mini | $0.08 | $0.20 | $6.00 |
| Realtime v1 Max | $0.08 | $1.80 | $9.00 |
연결 시간 요금은 말이 없는 시간에도 붙어요. 그래서 대기가 긴 통화일수록 연결 시간 몫이 커지고, 대화가 빽빽할수록 토큰 몫이 커져요. 클로옵스 콘솔에서 에이전트 모델을 고르면 1분당 예상 요금이 함께 표시돼요.
클로옵스에서 똑같이 만들어 볼 수 있어요
- 콘솔에서 에이전트를 만들고 모델을 "ElevenLabs Realtime Max"로 고르세요. 목소리는 ElevenLabs 한국어 목소리 목록에서 골라요.
- 받는 쪽 에이전트에 지식 문서를 등록하고, 070 번호를 그 에이전트에 연결하세요.
- 거는 쪽은
POST /calls에AgentId와CallContext를 넣어 발신하면 돼요. - 통화가 끝나면 녹음·받아쓰기·키패드 입력·실시간 이벤트를 API와 콘솔에서 그대로 확인할 수 있어요.
실제 업무에 쓰신다면 이번 통화에서 얻은 교훈 두 가지를 같이 챙겨 주세요.
- 도구를 부르는 일이 많은 상담원에는 Max를 쓰세요.
- 예약 명부처럼 지어내면 안 되는 정보는, 검색 결과로만 말하게 하고 통화 기록으로 확인하세요.
자주 묻는 질문
Eleven Realtime은 한국어를 지원하나요?
공식 발표는 90개 이상의 언어를 지원한다고만 밝혔고 한국어를 따로 적지는 않았어요. 클로옵스에서 한국어 지시문과 ElevenLabs 한국어 목소리로 건 통화 11번은 모두 한국어로 대화했어요.
Eleven Realtime Mini와 Max 중 무엇을 골라야 하나요?
예약 조회, 번호 확인처럼 도구를 부르는 일이 있으면 Max를 권해요. 발표된 도구 사용 완료율이 Max 87.1%, Mini 60.3%이고, 저희 통화에서도 Mini 상담원은 세 번 중 한 번만 맞는 예약을 잡았어요.
Eleven Realtime API 요금은 얼마인가요?
연결된 오디오 1분에 $0.08과 토큰 요금이 붙어요. 토큰은 100만 개당 Mini가 입력 $0.20·출력 $6.00, Max가 입력 $1.80·출력 $9.00이에요.
OpenAI Realtime API 코드를 그대로 쓸 수 있나요?
같은 이벤트 규격을 따르지만, 서버에서 붙이려면 연결마다 임시 키를 받아야 하고 server_vad 설정은 빼야 해요. 서버 측 연결 문서는 아직 공개되지 않았어요.
AI 에이전트끼리 전화를 걸 수 있나요?
네. 클로옵스에서는 070 번호 두 개에 에이전트를 하나씩 연결하고, 한쪽에서 발신 API로 다른 쪽 번호에 걸면 돼요. 이 글의 통화가 그렇게 만든 거예요.
마치며
Eleven Realtime Max 둘은 조건 세 개와 우선순위를 따져 하나뿐인 예약 시간을 다섯 번 중 네 번 골랐고, 돈이 드는 결정은 사람에게 미뤘어요. 한편 검색하기 전에 그럴듯한 예약을 먼저 말해 버리는 것처럼, 지시문만으로는 막히지 않는 실수도 분명히 보였어요.
목소리를 고를 수 있는 실시간 모델이 생긴 만큼, 이제는 그 목소리가 틀린 말을 하지 않도록 도구와 확인 절차를 설계하는 일이 더 중요해졌어요.
참고한 자료
- Eleven Realtime 소개 — ElevenLabs 블로그 (2026-10-20)
- Realtime models — ElevenLabs 개발 문서
- Realtime API(OpenAI Realtime 호환) — ElevenLabs 개발 문서
- ElevenLabs API 가격
- 클로옵스 070 실통화 11건 (2026-10-22, 테스트 번호 발급 후 반납)