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

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

Wednesday, September 16, 2026Omid Saffari
Gemini API 백그라운드 툴 호출로 통화를 이어가는 법

2026년 9월 15일, GoogleGemini 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_statusIDLE이 될 때까지 계속 수신하고, 툴 호출 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에서 우선적으로 보여 줍니다.

Cloudflare Workers 권한, 클라이언트별 배포 경계를 만든다

Cloudflare Workers 권한, 클라이언트별 배포 경계를 만든다

Cloudflare Workers의 개별 Worker 권한으로 클라이언트 CI 배포 범위를 좁히는 방법을 설명합니다. Editor 역할, 계정 소유 API 토큰, 바인딩과 Durable Objects의 숨은 권한까지 실제 인계 절차에 맞춰 점검합니다.2026년 9월 15일Explained
npm ci를 실행할 때만 네트워크를 여는 Claude Code 권한 설정

npm ci를 실행할 때만 네트워크를 여는 Claude Code 권한 설정

Claude Code 2.1.271이 샌드박스 자동 모드에 명령 단위 네트워크 접근을 추가했습니다. npm ci 설치에만 레지스트리를 열고 이후 빌드와 테스트 단계에서는 다시 닫는 설정법, 상시 허용 목록과의 차이, 실제 보안 경계를 구체적으로 정리합니다.2026년 9월 15일Explained
Claude Code 구독으로 Vercel AI SDK 에이전트 비용 줄이기

Claude Code 구독으로 Vercel AI SDK 에이전트 비용 줄이기

기존 Claude Code 구독을 Vercel AI SDK 에이전트 실행에 연결하면 어떤 계정에 모델 비용이 잡히는지 설명합니다. auto·direct·ai-gateway 인증 우선순위부터 공유 사용량 한도, 별도로 남는 Sandbox 비용, 팀별 운영 선택까지 한 번에 정리했습니다.2026년 9월 15일Explained
Playwright 자동화에 Cloudflare 승인 호스트와 읽기 전용 검토 적용하기

Playwright 자동화에 Cloudflare 승인 호스트와 읽기 전용 검토 적용하기

Cloudflare Browser Run의 세션 가드레일과 읽기 전용 Live View를 고객 프로젝트에 적용하는 법을 설명합니다. Playwright 설정, 승인 호스트 목록, 차단 테스트, 검토 링크 보안과 Browser Sessions 요금까지 실무 기준으로 확인합니다.2026년 9월 14일Explained
음성 AI 통화 비용, GPT-Live-1의 $0.05가 전부는 아닙니다

음성 AI 통화 비용, GPT-Live-1의 $0.05가 전부는 아닙니다

음성 AI 모델 GPT-Live-1의 분당 $0.05 요금만 보면 실제 통화 비용을 놓치기 쉽습니다. 음성 세션, 백엔드 추론과 툴, 통신사 비용을 합쳐 처리가 완료된 통화 한 건의 총비용을 계산하는 법과 90초 예약 전화 사례, 도입 전 점검할 기준을 정리했습니다.2026년 9월 14일Explained
ChatGPT 윈도우 Appshots 활용법: 컨텍스트 복사 시간을 줄이는 방법

ChatGPT 윈도우 Appshots 활용법: 컨텍스트 복사 시간을 줄이는 방법

ChatGPT 윈도우 Appshots로 이메일, 오류 창, 설정 화면을 채팅에 바로 첨부하는 방법을 정리했습니다. 두 Alt 키 단축키와 대상 채팅 설정, 보이지 않는 텍스트의 공유 범위, Google 앱의 한계, 실제 업무 시간이 줄었는지 측정하는 기준까지 확인하세요.2026년 9월 14일Explained
Vercel 요금 절감: FastAPI 정적 파일이 Function을 건너뛴다

Vercel 요금 절감: FastAPI 정적 파일이 Function을 건너뛴다

Vercel이 FastAPI의 app.frontend()와 StaticFiles 요청을 CDN에서 직접 처리하기 시작했습니다. Function 호출·컴퓨팅 사용량은 줄지만 CDN 요청과 전송량은 남습니다. 적용 조건, 보안 예외, 실제 Vercel 요금 절감 범위를 정리합니다.2026년 9월 13일Explained
OpenAI API 키 만료, 서비스 중단 없이 교체하는 법

OpenAI API 키 만료, 서비스 중단 없이 교체하는 법

OpenAI API 키 만료에 대비해 서비스 중단 없이 새 키를 배포하는 방법을 설명합니다. 최대 수명 정책의 범위부터 담당자 지정, 교체 비용 산정, 시크릿 저장소 배포, 실제 작업 검증, 기존 키 폐기까지 안전한 API 키 관리 절차를 한 번에 정리했습니다.2026년 9월 13일Explained
뉴스레터

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

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