Gemini API 백그라운드 툴 호출로 통화를 이어가는 법
Gemini 3.8 Live의 비동기 함수 호출로 음성 에이전트가 조회 중에도 대화를 이어가는 방식을 살펴봅니다. Gemini API의 오디오 비용, 완료 신호, 구현 코드와 운영 체크리스트를 통해 예약·주문·지원 전화에서 중복 실행 없이 완료율을 측정하는 방법까지 정리했습니다.

2026년 9월 15일, Google은 Gemini 3.8 Live와 Gemini 3.8 Live Extended Thinking을 정식 출시했습니다. 이번 Gemini API 업데이트의 핵심은 분명합니다. 캘린더나 주문 시스템, 예약 API가 백그라운드에서 오래 걸리는 작업을 처리하는 동안에도 AI 음성 에이전트가 고객에게 진행 상황을 알리며 대화를 이어갈 수 있습니다.
Gemini API는 조회가 끝날 때까지 통화를 멈추지 않습니다
음성 에이전트는 보통 두 가지 일을 동시에 해야 합니다. 사람과 자연스럽게 대화하는 한편, 다른 시스템에서 실제 업무도 처리해야 합니다.
통화가 어색해지는 지점은 대개 두 번째 작업입니다. 에이전트가 예약 API에 빈 시간을 요청한 뒤 아무 말 없이 기다리면, 고객은 요청을 되풀이하거나 상대가 듣고 있는지 묻다가 전화를 끊습니다. 애플리케이션이 반복된 말을 새 지시로 받아들이면 같은 작업을 두 번 시작할 수도 있습니다.
Gemini 3.8 Live는 비동기 함수 호출로 이 흐름을 바꿉니다. 비동기 방식에서는 툴이 실행되는 동안에도 라이브 세션 전체가 멈추지 않습니다. 조회가 진행 중이어도 고객은 정보를 덧붙이거나 잘못 말한 내용을 바로잡고, 현재 상황을 안내받을 수 있습니다.
Gemini 3.8 Live Extended Thinking은 한 단계 더 나아갑니다. 여러 단계로 이뤄진 작업을 추론하면서, 툴이 실행되는 동안 짧은 진행 안내를 음성으로 전달할 수 있습니다. Google이 제시한 사례도 여러 시스템을 확인하되 실시간 대화를 끊지 않는 여행 예약 흐름입니다.
그렇다고 Gemini가 스스로 예약을 처리한다는 뜻은 아닙니다. 함수 호출을 받아 캘린더나 주문 시스템을 조회하고 결과를 돌려주는 주체는 여전히 애플리케이션입니다. 모델은 그 작업이 진행되는 동안 대화를 맡습니다.
프로덕션에서 특히 조심해야 할 부분은 마지막 열입니다. Extended Thinking에서는 turnComplete: true가 중간 진행 안내의 발화가 끝났다는 뜻일 수 있습니다. 조회 작업은 여전히 실행 중일 수 있습니다. 이때 세션을 닫거나 예약 버튼을 활성화하고 작업을 완료로 표시하면 실제로는 끝나지 않은 일을 완료 처리하게 됩니다.

비즈니스 성과는 완료 작업당 비용으로 판단해야 합니다
백그라운드에서 안내 음성이 나온다고 자동으로 비용이 절감되는 것은 아닙니다. 툴이 실행되는 동안 모델 출력이 늘어날 수 있고, 대화가 길어지면 이후 턴에서 다시 처리되는 컨텍스트도 많아질 수 있습니다. 추가된 대화 연속성이 예약 완료를 늘리고 통화 포기를 줄이거나, 상담원의 사후 처리를 덜어줄 때에만 이 기능은 제값을 합니다.
Google이 공개한 두 신규 모델의 표준 요금은 같습니다. 오디오 입력은 분당 $0.005, 오디오 출력은 분당 $0.018입니다. 텍스트 입력은 1 million tokens당 $0.75이며, 사고 토큰을 포함한 텍스트 출력은 1 million tokens당 $4.50입니다.
모델이 2분 동안 말하는 5분짜리 예약 전화를 예로 들어보겠습니다. 프로액티브 오디오가 항상 활성화되므로, 새로 발생한 오디오만 단순 계산하면 입력 5분에 $0.025, 출력 2분에 $0.036입니다. 원시 오디오 소계는 $0.061입니다.
하지만 이것이 최종 통화 비용은 아닙니다.
Live API 결제 가이드에 따르면 지속형 세션은 이후 턴에서 누적된 컨텍스트를 다시 처리할 수 있습니다. 전사를 사용하면 텍스트 토큰 요금이 붙고, Extended Thinking은 사고 출력 비용을 더할 수 있습니다. 캘린더, CRM, 통신사, 호스팅, 재시도, 상담원 이관 비용도 Google의 오디오 소계에는 포함되지 않습니다.
대신 다음 공식을 사용해야 합니다.
완료 작업당 비용 = 모델, 툴, 전화, 인프라, 재시도, 상담원 이관에 든 모든 비용 ÷ 검증된 완료 작업 수.
대화 기록이 자연스럽다고 작업이 완료된 것은 아닙니다. 예약 전화라면 예약 ID가 한 번만 기록되고, 정확하게 다시 안내됐으며, 고객이 이를 수락해야 완료입니다. 주문 지원이라면 올바른 계정에 정확한 주문 처리가 연결돼야 합니다. 통화 이관이라면 맥락이 유지된 채 의도한 상담 대기열에 도착해야 합니다.
Google은 소모된 토큰 합계를 usageMetadata로 주기적으로 반환합니다. 이 기록을 툴 호출 ID, 통신사 세션, 최종 비즈니스 결과, 상담원 작업과 연결하십시오. 그러면 믿어야만 하는 분당 추정치가 아니라, 감사할 수 있는 통화별 원장을 확보할 수 있습니다.
출시 때 공개된 수치가 이 파일럿을 대신할 수는 없습니다. Google에 따르면 Extended Thinking은 tau-Voice 작업 벤치마크에서 68.6%, 그중 은행 업무 버전에서 35.1%를 기록했습니다. 이 점수는 에이전트형 음성 업무에 모델을 시험해볼 근거일 뿐입니다. 자체 캘린더와 정책, 전화 연결 환경에서 실제 고객이 예약을 마칠 비율까지 알려주지는 않습니다.
대기 시간이 성과를 가르는 네 가지 워크플로
치과의 예약 접수
운영 담당자는 에이전트가 고객이 원하는 날짜를 받은 뒤 빈 시간을 조회하고, 캘린더 응답을 기다리는 동안에도 아직 확인 중이라고 안내하게 할 수 있습니다. 단순히 침묵이 줄어드는 것보다 중요한 성과는 직원의 회신 전화는 줄고 확정 예약은 늘어나는 것입니다.
안전 원칙은 엄격해야 합니다. 음성으로 진행 상황을 알렸다고 예약이 성립된 것은 아닙니다. 고객이 조회 결과로 받은 시간 중 하나를 선택한 뒤에만 시스템이 예약을 생성해야 하며, 재시도할 때는 멱등성 키를 재사용해 한 통의 전화에서 같은 예약이 두 번 만들어지지 않게 해야 합니다.
이커머스 주문 조회
지원 담당자는 에이전트가 주문 시스템을 조회하는 동안에도 고객을 같은 대화에 머물게 할 수 있습니다. 고객의 요청이 “택배가 어디에 있나요?”에서 “배송지를 바꿔 주세요”로 바뀐다면, 애플리케이션은 새 요청을 현재 유효한 지시로 취급하고 이전 작업을 취소하거나 무시해야 합니다.
반복 문의를 상담원에게 넘기는 횟수가 줄어드는 것이 이점입니다. 반면 고객의 관심사가 이미 바뀐 뒤 예전 질문에 대한 정확한 답을 내놓는 것이 위험입니다.
여행 일정 재예약
항공편 검색, 정책 확인, 호텔 객실 조회, 운임 비교가 함께 필요한 업무는 Extended Thinking에 더 적합합니다. 여러 비블로킹 함수가 실행되는 동안 모델이 진행 상황을 설명할 수 있습니다.
결제와 항공권 변경 전에는 반드시 확인 단계를 두어야 합니다. 자연스러운 음성이 되돌릴 수 없는 작업의 승인 기준까지 낮춰주지는 않습니다.
계정 문제를 진단하는 기술 지원 대기열
빠른 계정 조회에는 Gemini 3.8 Live가 적합합니다. 여러 로그를 모으고 설정을 확인해야 하는 진단이라면 Extended Thinking을 선택할 이유가 있습니다.
추론이 깊어질수록 비용도 커지기 때문에 이 구분이 중요합니다. 업무 복잡도에 따라 라우팅한 뒤 해결률과 이관률을 비교하십시오. 모델 이름이 더 안전해 보인다는 이유만으로 모든 비밀번호 재설정을 무거운 경로에 태우면 안 됩니다.
전화선을 연결하기 전에 백그라운드 라이프사이클부터 구현합니다
먼저 텍스트로 시작되는 세션과 스텁 툴을 사용하십시오. 통신사, 마이크, 오디오 브리지, 실제 캘린더라는 네 군데의 디버깅 지점이 더해지기 전에 비동기 동작만 분리해 확인할 수 있습니다.
아래 예제는 Google의 현재 Python SDK와 Extended Thinking 설정, 비블로킹 함수 선언, 툴 응답 패턴, interaction_status, usageMetadata 필드를 따릅니다. 반환된 24 kHz 오디오는 response.wav에 저장합니다. 툴 결과는 로컬 스텁이므로 실제 캘린더에는 접근하지 않습니다.
pip install -U google-genai
export GEMINI_API_KEY="YOUR_API_KEY"import asyncio
import wave
from google import genai
from google.genai import types
client = genai.Client()
model = "gemini-3.8-live-extended-thinking"
check_availability = types.FunctionDeclaration(
name="check_availability",
description="Checks the calendar for the next available appointment.",
behavior="NON_BLOCKING",
parameters={
"type": "OBJECT",
"properties": {},
},
)
config = types.LiveConnectConfig(
response_modalities=["AUDIO"],
thinking_config=types.ThinkingConfig(thinking_level="low"),
tools=[types.Tool(function_declarations=[check_availability])],
)
async def main():
async with client.aio.live.connect(model=model, config=config) as session:
await session.send_client_content(
turns={
"parts": [
{"text": "Find the next available appointment and keep me updated."}
]
}
)
with wave.open("response.wav", "wb") as audio:
audio.setnchannels(1)
audio.setsampwidth(2)
audio.setframerate(24000)
async for message in session.receive():
status = getattr(message, "interaction_status", None)
if message.data is not None:
audio.writeframes(message.data)
if message.usage_metadata:
print("Tokens:", message.usage_metadata.total_token_count)
if message.tool_call:
replies = []
for call in message.tool_call.function_calls:
replies.append(
types.FunctionResponse(
id=call.id,
name=call.name,
response={"result": "Tuesday morning is available."},
)
)
await session.send_tool_response(function_responses=replies)
if status == "IDLE":
print("Interaction complete")
break
if __name__ == "__main__":
asyncio.run(main())가장 흔한 실수는 첫 번째 turnComplete에서 수신을 중단하는 것입니다. Extended Thinking이 “확인 중입니다”라고 말한 뒤에도 툴 응답을 기다리고 있을 수 있습니다. interaction_status가 IDLE이 될 때까지 계속 수신하고, 툴 호출 ID를 최종 비즈니스 결과와 연결해 두십시오.
프로덕션 전화 에이전트라면 이 루프가 제대로 동작하는 것을 확인한 뒤 오디오 브리지를 추가하십시오. 모델 주변의 통신사와 오케스트레이션 계층을 고를 때는 폭넓은 음성 에이전트 비용 비교가 도움이 됩니다. Google의 토큰 계량 방식과 더 단순한 프런트엔드 음성 요금을 비교하고 있다면, GPT-Live-1 통화 비용 분석에서 어느 쪽이든 완료 작업 수를 분모로 삼아야 하는 이유를 확인할 수 있습니다.
데모가 아니라 원장을 중심으로 파일럿을 운영합니다
완료 이벤트를 하나로 정합니다
확정 예약처럼 범위가 좁은 워크플로 하나를 고릅니다. 완료를 증명하는 정확한 데이터베이스 이벤트를 적고, 실패·포기·중복 작업·상담원 이관으로 분류할 모든 상태를 정의합니다.
라이브 라이프사이클을 기록합니다
세션 ID와 모든 툴 호출 ID,
interaction_status변경 내역, 툴 시작·종료 시각,usageMetadata를 저장합니다. 음성으로 시간을 메우는 것은 진행 상황이지 완료가 아닙니다.비용이 발생한 모든 계층을 연결합니다
Gemini 사용량, 캘린더 또는 CRM 요금, 통신사 비용, 인프라, 재시도, 직원 투입 시간을 같은 통화 기록에 연결합니다. Google이 제시한 $0.061의 오디오 소계와 기존 시스템의 총비용 청구액을 직접 비교해서는 안 됩니다.
실패 경로를 시험합니다
에이전트의 말을 끊고, 조회 중 요청 날짜를 바꾸고, 툴을 타임아웃시키고, 예약 가능 시간이 없다는 응답을 반환하고, 결과가 나오기 전에 전화를 끊어봅니다. 더 이상 유효하지 않은 호출이 예약을 기록하지 못하는지 확인합니다.
완료된 작업을 비교합니다
같은 유형의 통화를 기존 흐름과 새 흐름으로 각각 처리합니다. 검증된 완료, 통화 포기, 상담원 이관 업무, 중복 처리, 완료 작업당 총비용을 비교합니다. 이 기록들이 서로 맞아떨어진 뒤에만 절감 효과를 주장해야 합니다.
반드시 알아야 할 한계
모델은 침묵을 채울 수 있지만, 느린 캘린더를 빠르게 만들거나 불량한 전화 연결을 고치고 비즈니스가 무엇을 완료로 볼지 대신 정해줄 수는 없습니다.
더 긴 대화를 위한 세션 관리 기법을 추가하지 않으면 오디오 전용 세션은 15분으로 제한됩니다. 네이티브 오디오의 컨텍스트 한도는 128,000 tokens입니다. 턴이 많고 긴 통화는 이전 컨텍스트를 다시 처리할 수 있으므로 단순한 통화 시간 추정치와 실제 비용이 달라집니다.
보안은 여전히 애플리케이션의 책임입니다. 브라우저에서 직접 연결할 때는 일반 API 키가 아니라 임시 토큰을 사용해야 합니다. 예약, 환불, 계정 변경에는 여전히 인증, 검증, 멱등성, 감사 추적이 필요합니다.
비동기 경로에는 오래된 작업이라는 프로덕션 위험도 하나 더 생깁니다. 툴이 실행되는 동안 고객이 요청을 바꾸면 이전 결과가 뒤늦게 도착할 수 있습니다. 작업 상태를 명시적으로 추적하고 현재 의도와 맞지 않는 결과는 거부해야 합니다.
월요일의 실행 과제: 좁은 대기열 하나를 계측합니다
툴을 기다리는 침묵 때문에 고객이 말을 반복하거나 예약을 포기하고, 직원이 뒤처리를 해야 한다면 이번 주에 시작하십시오. 직접 조회에는 Gemini 3.8 Live를, 실제로 여러 단계가 필요한 흐름 하나에는 Extended Thinking을 적용합니다. 두 모델 모두 동일한 완료 원장으로 추적해야 합니다.
자체 시스템에서 완료를 아직 증명할 수 없거나, 통신사 연결 경로가 안정되지 않았거나, 확인 절차 없이 되돌릴 수 없는 작업을 수행하는 워크플로라면 기다리십시오. 새 모델보다 기록 체계가 먼저입니다.
텍스트 전용 제품, 툴이 이미 즉시 응답하는 음성 흐름, 완료율·이관율·비용 목표를 이미 달성한 전화 에이전트에는 이번 출시가 중요하지 않습니다. 새 모델이 나왔다는 사실만으로 측정된 시스템을 교체할 이유는 없습니다.
운영비와 워크플로를 바꾸는 업데이트를 더 쉽게 이해하고 싶다면 뉴스레터를 구독하세요.
- 마지막 업데이트
- 2026년 9월 16일
- 카테고리
- Explained







