Gemini API 백그라운드 툴 호출로 통화를 이어가는 법

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

Wednesday, September 16, 2026Omid Saffari
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가 스스로 예약을 처리한다는 뜻은 아닙니다. 함수 호출을 받아 캘린더나 주문 시스템을 조회하고 결과를 돌려주는 주체는 여전히 애플리케이션입니다. 모델은 그 작업이 진행되는 동안 대화를 맡습니다.

선택적합한 상황툴 동작완료 신호
gemini-3.8-live작업이 단순하고 툴 응답이 빠를 때기본값은 비동기지만 블로킹 모드도 지원turnComplete: true가 턴을 종료
gemini-3.8-live-extended-thinking여러 단계가 필요하거나 툴 실행에 수초가 걸릴 때비동기 전용이며 low, medium, high 사고 수준 지원interaction_status: "IDLE"이 될 때까지 대기

프로덕션에서 특히 조심해야 할 부분은 마지막 열입니다. 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에 저장합니다. 툴 결과는 로컬 스텁이므로 실제 캘린더에는 접근하지 않습니다.

Bash
pip install -U google-genai
export GEMINI_API_KEY="YOUR_API_KEY"
Python
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 통화 비용 분석에서 어느 쪽이든 완료 작업 수를 분모로 삼아야 하는 이유를 확인할 수 있습니다.

데모가 아니라 원장을 중심으로 파일럿을 운영합니다

  1. 완료 이벤트를 하나로 정합니다

    확정 예약처럼 범위가 좁은 워크플로 하나를 고릅니다. 완료를 증명하는 정확한 데이터베이스 이벤트를 적고, 실패·포기·중복 작업·상담원 이관으로 분류할 모든 상태를 정의합니다.

  2. 라이브 라이프사이클을 기록합니다

    세션 ID와 모든 툴 호출 ID, interaction_status 변경 내역, 툴 시작·종료 시각, usageMetadata를 저장합니다. 음성으로 시간을 메우는 것은 진행 상황이지 완료가 아닙니다.

  3. 비용이 발생한 모든 계층을 연결합니다

    Gemini 사용량, 캘린더 또는 CRM 요금, 통신사 비용, 인프라, 재시도, 직원 투입 시간을 같은 통화 기록에 연결합니다. Google이 제시한 $0.061의 오디오 소계와 기존 시스템의 총비용 청구액을 직접 비교해서는 안 됩니다.

  4. 실패 경로를 시험합니다

    에이전트의 말을 끊고, 조회 중 요청 날짜를 바꾸고, 툴을 타임아웃시키고, 예약 가능 시간이 없다는 응답을 반환하고, 결과가 나오기 전에 전화를 끊어봅니다. 더 이상 유효하지 않은 호출이 예약을 기록하지 못하는지 확인합니다.

  5. 완료된 작업을 비교합니다

    같은 유형의 통화를 기존 흐름과 새 흐름으로 각각 처리합니다. 검증된 완료, 통화 포기, 상담원 이관 업무, 중복 처리, 완료 작업당 총비용을 비교합니다. 이 기록들이 서로 맞아떨어진 뒤에만 절감 효과를 주장해야 합니다.

반드시 알아야 할 한계

모델은 침묵을 채울 수 있지만, 느린 캘린더를 빠르게 만들거나 불량한 전화 연결을 고치고 비즈니스가 무엇을 완료로 볼지 대신 정해줄 수는 없습니다.

더 긴 대화를 위한 세션 관리 기법을 추가하지 않으면 오디오 전용 세션은 15분으로 제한됩니다. 네이티브 오디오의 컨텍스트 한도는 128,000 tokens입니다. 턴이 많고 긴 통화는 이전 컨텍스트를 다시 처리할 수 있으므로 단순한 통화 시간 추정치와 실제 비용이 달라집니다.

보안은 여전히 애플리케이션의 책임입니다. 브라우저에서 직접 연결할 때는 일반 API 키가 아니라 임시 토큰을 사용해야 합니다. 예약, 환불, 계정 변경에는 여전히 인증, 검증, 멱등성, 감사 추적이 필요합니다.

비동기 경로에는 오래된 작업이라는 프로덕션 위험도 하나 더 생깁니다. 툴이 실행되는 동안 고객이 요청을 바꾸면 이전 결과가 뒤늦게 도착할 수 있습니다. 작업 상태를 명시적으로 추적하고 현재 의도와 맞지 않는 결과는 거부해야 합니다.

월요일의 실행 과제: 좁은 대기열 하나를 계측합니다

툴을 기다리는 침묵 때문에 고객이 말을 반복하거나 예약을 포기하고, 직원이 뒤처리를 해야 한다면 이번 주에 시작하십시오. 직접 조회에는 Gemini 3.8 Live를, 실제로 여러 단계가 필요한 흐름 하나에는 Extended Thinking을 적용합니다. 두 모델 모두 동일한 완료 원장으로 추적해야 합니다.

자체 시스템에서 완료를 아직 증명할 수 없거나, 통신사 연결 경로가 안정되지 않았거나, 확인 절차 없이 되돌릴 수 없는 작업을 수행하는 워크플로라면 기다리십시오. 새 모델보다 기록 체계가 먼저입니다.

텍스트 전용 제품, 툴이 이미 즉시 응답하는 음성 흐름, 완료율·이관율·비용 목표를 이미 달성한 전화 에이전트에는 이번 출시가 중요하지 않습니다. 새 모델이 나왔다는 사실만으로 측정된 시스템을 교체할 이유는 없습니다.

운영비와 워크플로를 바꾸는 업데이트를 더 쉽게 이해하고 싶다면 뉴스레터를 구독하세요.

마지막 업데이트
2026년 9월 16일
카테고리
Explained

Google에서 이 사이트를 우선하기

Google 검색에서 omidsaffari.com을 선호 소스로 추가

omidsaffari.com을 선호 소스로 지정하면 Google이 Top Stories, AI Overviews, AI Mode에서 우선적으로 보여 줍니다.

Grok Voice Transcribe 2.0 전환: 음성 텍스트 변환 비용과 기본 모델 점검법

Grok Voice Transcribe 2.0 전환: 음성 텍스트 변환 비용과 기본 모델 점검법

Grok Voice Transcribe 2.0은 배치 시간당 $0.10, 스트리밍 시간당 $0.20을 유지합니다. 기본 모델 변경은 같은 API 호출의 음성 텍스트 변환 결과와 후속 업무를 바꿀 수 있습니다. 모델 고정과 실제 오디오 검증 절차를 정리했습니다.2026년 9월 20일Explained
Cloudflare Browser Run 실패, HAR 파일로 재실행 전에 진단하기

Cloudflare Browser Run 실패, HAR 파일로 재실행 전에 진단하기

Cloudflare Browser Run의 새 Inspect 패널에서 HAR 파일, 콘솔 로그, 네트워크 요청, 최종 DOM을 확인해 실패 원인을 찾는 방법을 정리합니다. 기록을 언제 켜야 하는지, 재실행 전에 무엇을 점검해야 하는지, 비용과 기록의 한계까지 알아봅니다.2026년 9월 19일Explained
v0에서 사내 디자인 시스템을 그대로 재사용하는 법

v0에서 사내 디자인 시스템을 그대로 재사용하는 법

디자인 시스템의 비공개 npm 패키지를 Vercel v0에 안전하게 연결하는 방법을 정리합니다. NPM_TOKEN과 NPM_RC의 차이, 최소 권한 설정, 요금, 한계, 프로토타입을 실제 저장소로 넘길 때 확인할 항목까지 실무 기준으로 함께 살펴봅니다.2026년 9월 19일Explained
Claude Code 비용, 자동 모드 분류기 과금이 사라지는 조건

Claude Code 비용, 자동 모드 분류기 과금이 사라지는 조건

Claude Code 2.1.278은 서버가 자동 모드 검사를 처리할 때 별도 분류기 요청 비용을 없앱니다. API·Enterprise·게이트웨이 환경에서 /status로 실제 과금 경로를 확인하고, 비용 예측 전에 점검해야 할 호환 조건과 폴백 신호를 정리했습니다.2026년 9월 19일Explained
Vercel 배포 한 번에만 Turbo를 적용하는 방법과 비용

Vercel 배포 한 번에만 Turbo를 적용하는 방법과 비용

Vercel 배포마다 프로젝트의 빌드 머신 설정을 바꿀 필요가 없습니다. Pro와 Enterprise에서 긴급한 배포 한 번에만 Turbo를 적용하는 3가지 방법과 분당 비용을 살펴보고, Basic과 비교해 실제로 아낀 시간과 추가 비용을 검증하는 절차까지 정리했습니다.2026년 9월 18일Explained
워드 AI 실전 가이드: ChatGPT로 Word 문서 작성부터 수정까지

워드 AI 실전 가이드: ChatGPT로 Word 문서 작성부터 수정까지

Word 안에서 ChatGPT로 초안을 만들고 열린 문서를 요약·수정하는 방법을 정리했습니다. 애드인 설치 조건, 공유 사용량과 토큰 요율, 데이터 경계, 검토 절차를 확인하고 앱 사이 복사·붙여넣기를 줄이는 워드 AI 업무 흐름을 안전하게 시작해 보세요.2026년 9월 18일Explained
AI 에이전트 운영자를 위한 Google Antigravity 마이그레이션 가이드

AI 에이전트 운영자를 위한 Google Antigravity 마이그레이션 가이드

Google Antigravity의 5월 에이전트가 2026년 10월 5일 종료됩니다. AI 에이전트 작업의 출력 전용·로컬 툴 경로별 마이그레이션 범위와 새 파일 툴 계약, 안전한 어댑터 테스트, 예약 작업 점검 순서를 실무 기준으로 한눈에 정리했습니다.2026년 9월 18일Explained
Cloudflare Workers RPC 추적, 느린 고객 요청의 병목을 드러내다

Cloudflare Workers RPC 추적, 느린 고객 요청의 병목을 드러내다

Cloudflare Workers의 JavaScript RPC 추적이 Worker와 Durable Object 사이의 호출을 하나의 트레이스로 잇는 방식을 살펴봅니다. 느린 고객 요청의 병목을 찾는 법부터 샘플링, 보존 기간, 2026년 10월 1일 이후 과금까지 정리합니다.2026년 9월 17일Explained
뉴스레터

매주 일요일, 한 통의 편지.뜨거운 의견이 아닌, 돌아가는 시스템.

주간 발행. 스팸 없음. 언제든 해지 가능합니다.