DEV Community

Cover image for 무료 Grok Voice 사용법: 콘솔 설정, 음성 복제 및 실시간 음성 에이전트
Rihpig
Rihpig

Posted on • Originally published at apidog.com

무료 Grok Voice 사용법: 콘솔 설정, 음성 복제 및 실시간 음성 에이전트

xAI는 Grok 4.3 릴리스와 함께 Grok Voice를 공개했습니다. 개발자 관점에서 핵심은 명확합니다. xAI Console에서 무료로 사용할 수 있으며, 분당 요금이나 토큰당 음성 요금 없이 음성 에이전트, TTS, STT, 맞춤형 음성 클론 도구에 접근할 수 있습니다. 실제로 과금될 수 있는 부분은 에이전트가 추론할 때 사용하는 기본 Grok 4.3 토큰이며, 테스트용 무료 콘솔 할당량이 제공됩니다.

지금 Apidog 사용해 보기

이 가이드에서는 Grok Voice를 비용 없이 실행하는 방법을 단계별로 다룹니다. 콘솔 키를 만들고, 음성을 선택하거나 복제하고, WebSocket 세션을 구성한 뒤, 제품에 연결하기 전에 Apidog로 전체 흐름을 테스트하는 방법까지 확인합니다.

더 넓은 범위의 API 사용법은 Grok 4.3 API 가이드를 참고하세요. OpenAI 스택과 직접 비교하려면 Grok Voice 대 GPT-Realtime을 확인하면 됩니다.

요약

  • Grok Voice는 console.x.ai의 xAI Console 사용자에게 무료로 제공됩니다.
  • TTS, STT, 음성 에이전트, 맞춤형 음성에는 분당 또는 토큰당 음성 요금이 없습니다.
  • 주력 모델은 grok-voice-think-fast-1.0입니다.
  • xAI는 첫 오디오까지 1초 미만이며, 가장 가까운 경쟁사보다 약 5배 빠르다고 설명합니다.
  • 28개 언어에 걸쳐 80개 이상의 사전 설정 음성을 사용할 수 있습니다.
  • 내장 음성 에이전트 페르소나는 Eve, Ara, Rex, Sal, Leo입니다.
  • 약 1분 분량의 음성 샘플로 맞춤형 음성을 복제할 수 있으며, 2분 이내에 프로덕션 준비 완료 음성이 생성됩니다.
  • WebSocket 엔드포인트는 다음과 같습니다.
wss://api.x.ai/v1/realtime?model=grok-voice-think-fast-1.0
Enter fullscreen mode Exit fullscreen mode
  • TTS, STT, 맞춤형 음성은 REST 엔드포인트를 통해 사용할 수 있습니다.
  • Apidog를 사용하면 WebSocket 세션을 스크립팅하고, 오디오를 매번 다시 녹음하지 않고도 테스트를 반복할 수 있습니다.

Grok Voice가 무료로 제공하는 것

xAI Console이 무료 액세스의 시작점입니다. console.x.ai에서 로그인하고 API 키를 생성하면, 음성 기능 자체에 대한 추가 비용 없이 다음 인터페이스를 호출할 수 있습니다.

Grok Voice Console

1. 음성 에이전트

실시간 음성-음성 대화 모델입니다.

지원되는 기능은 다음과 같습니다.

  • 실시간 음성 입력 및 출력
  • 도구 호출
  • 서버 측 음성 활동 감지
  • 교대 발화 처리

2. 텍스트-음성 변환, TTS

텍스트를 음성으로 변환합니다.

  • 28개 언어 지원
  • 80개 이상의 사전 설정 음성
  • MP3 출력
  • 전화 통신용 μ-law 출력

3. 음성-텍스트 변환, STT

음성을 텍스트로 변환합니다.

  • 25개 입력 언어 지원
  • 스트리밍 및 배치 스크립트 작성
  • 단어 수준 타임스탬프
  • 화자 분리

4. 맞춤형 음성

짧은 샘플에서 음성을 복제하고, 생성된 voice_id를 TTS와 음성 에이전트 API에서 재사용할 수 있습니다.

주의할 점은 음성 기능 자체는 무료지만, 음성 에이전트가 Grok 4.3을 사용해 추론할 때는 콘솔 크레딧이 사용된다는 점입니다. 콘솔은 테스트용 무료 크레딧을 제공하므로, 프로덕션에 연결하기 전에 엔드투엔드 흐름을 검증하기에 적합합니다.

1단계: 콘솔 키 얻기

먼저 console.x.ai로 이동해 X 계정으로 로그인합니다.

그다음 API 키 페이지에서 새 키를 생성합니다. 음성 에이전트와 추론을 함께 테스트하려면 다음 범위가 활성화되어 있어야 합니다.

  • voice
  • chat

로컬 개발 환경에서는 환경 변수로 저장합니다.

export XAI_API_KEY="xai-..."
Enter fullscreen mode Exit fullscreen mode

Node.js에서 사용할 경우 다음처럼 읽을 수 있습니다.

const apiKey = process.env.XAI_API_KEY;
Enter fullscreen mode Exit fullscreen mode

브라우저 앱에서는 상위 API 키를 직접 노출하지 마세요. 대신 서버에서 임시 토큰을 발급해야 합니다.

임시 토큰은 다음 방식으로 사용할 수 있습니다.

  1. 서버에서 /v1/realtime/sessions를 호출합니다.
  2. 짧게 만료되는 토큰을 생성합니다.
  3. 해당 토큰만 브라우저에 전달합니다.
  4. 브라우저는 임시 토큰으로 WebSocket에 연결합니다.

이 방식이면 상위 키가 클라이언트로 전달되지 않습니다.

2단계: 음성 선택하기

Grok Voice에서 음성을 사용하는 방법은 두 가지입니다.

사전 설정 음성 사용

음성 에이전트는 다섯 가지 기본 페르소나를 제공합니다.

음성 특징 추천 사용 사례
Eve 여성, 활기찬 목소리 활발한 고객 지원
Ara 여성, 따뜻한 목소리 일반 지원 기본값
Rex 남성, 자신감 있는 목소리 세일즈 스크립트
Sal 중성적, 부드러운 목소리 내레이션, 긴 글 읽기
Leo 남성, 권위 있는 목소리 규정 준수, 공식 안내

TTS API에서는 더 많은 사전 설정 음성을 사용할 수 있습니다. 28개 언어에 걸쳐 80개 이상의 음성이 있으며, voice 매개변수로 선택합니다.

예를 들어 TTS 요청에서는 다음처럼 사용할 수 있습니다.

{
  "voice": "ara"
}
Enter fullscreen mode Exit fullscreen mode

맞춤형 음성 클론 만들기

맞춤형 음성이 필요하다면 단일 화자의 깨끗한 WAV 파일을 업로드합니다.

권장 조건은 다음과 같습니다.

  • 약 60초 분량
  • 단일 화자
  • 조용한 방에서 녹음
  • 배경 음악 없음
  • 일정한 마이크 거리 유지
  • WAV 형식 사용

요청 예시는 다음과 같습니다.

curl https://api.x.ai/v1/custom-voices \
  -H "Authorization: Bearer $XAI_API_KEY" \
  -F "name=narrator-jane" \
  -F "language=en" \
  -F "audio=@sample.wav"
Enter fullscreen mode Exit fullscreen mode

응답으로 voice_id가 반환됩니다. 이 ID는 TTS와 음성 에이전트에서 모두 사용할 수 있습니다.

참조 클립의 최대 길이는 120초이지만, 길다고 항상 좋은 것은 아닙니다. 테스트 기준으로는 깨끗하고 일관된 60초 샘플이 시끄러운 120초 샘플보다 더 안정적입니다.

3단계: WebSocket으로 Grok Voice 연결하기

음성 에이전트는 하나의 WebSocket 세션으로 동작합니다.

기본 흐름은 다음과 같습니다.

  1. WebSocket 연결을 엽니다.
  2. session.update로 음성, 지침, 오디오 포맷을 설정합니다.
  3. 사용자 오디오를 input_audio_buffer.append로 전송합니다.
  4. 서버가 response.audio.delta로 오디오 조각을 반환합니다.
  5. response.audio.done으로 응답 종료를 확인합니다.

최소 Node.js 클라이언트는 다음과 같습니다.

import WebSocket from "ws";

const ws = new WebSocket(
  "wss://api.x.ai/v1/realtime?model=grok-voice-think-fast-1.0",
  {
    headers: {
      Authorization: `Bearer ${process.env.XAI_API_KEY}`,
    },
  }
);

ws.on("open", () => {
  ws.send(JSON.stringify({
    type: "session.update",
    session: {
      voice: "ara",
      instructions: "You are a friendly support agent. Keep replies under two sentences.",
      input_audio_format: "pcm16",
      output_audio_format: "pcm16",
      turn_detection: {
        type: "server_vad",
      },
    },
  }));
});

ws.on("message", (raw) => {
  const event = JSON.parse(raw.toString());

  if (event.type === "response.audio.delta") {
    const audioChunk = Buffer.from(event.delta, "base64");
    process.stdout.write(audioChunk);
  }

  if (event.type === "response.audio.done") {
    console.log("Audio response completed");
  }
});
Enter fullscreen mode Exit fullscreen mode

사용자 오디오는 base64 PCM16 프레임으로 전송합니다.

이벤트 형태는 다음과 같습니다.

{
  "type": "input_audio_buffer.append",
  "audio": "BASE64_ENCODED_PCM16_AUDIO"
}
Enter fullscreen mode Exit fullscreen mode

브라우저나 데스크톱 앱에서는 24kHz PCM16을 기본값으로 두는 것이 안전합니다. 전화 시스템과 연결할 때는 μ-law를 사용하세요.

4단계: 도구 호출 추가하기

음성 에이전트는 함수 호출을 지원합니다. 즉, 모델이 대화 중 필요한 시점에 사용자 API를 호출할 수 있습니다.

예를 들어 주문 상태 조회 도구를 선언할 수 있습니다.

ws.send(JSON.stringify({
  type: "session.update",
  session: {
    tools: [
      {
        type: "function",
        name: "lookup_order",
        description: "Look up the status of a customer order by order number.",
        parameters: {
          type: "object",
          properties: {
            order_id: {
              type: "string",
            },
          },
          required: ["order_id"],
        },
      },
    ],
  },
}));
Enter fullscreen mode Exit fullscreen mode

모델이 도구를 호출하려 하면 response.function_call_arguments.done 이벤트가 발생합니다.

처리 흐름은 다음과 같습니다.

  1. response.function_call_arguments.done 이벤트를 수신합니다.
  2. 이벤트에서 함수 이름과 인자를 읽습니다.
  3. 서버 또는 백엔드 API에서 실제 함수를 실행합니다.
  4. 결과를 conversation.item.create로 다시 전달합니다.
  5. 모델이 결과를 바탕으로 음성 응답을 이어갑니다.

도구 결과를 전달하는 구조는 다음과 같습니다.

{
  "type": "conversation.item.create",
  "item": {
    "type": "function_call_output",
    "call_id": "CALL_ID_FROM_MODEL",
    "output": "{\"status\":\"shipped\",\"eta\":\"Friday\"}"
  }
}
Enter fullscreen mode Exit fullscreen mode

내장 web_search 도구도 제공됩니다. 자체 검색 계층을 만들지 않고 최신 데이터 기반 응답을 제공해야 할 때 유용합니다.

5단계: 에이전트 없이 TTS만 사용하기

실시간 대화가 필요 없다면 WebSocket을 사용할 필요가 없습니다.

다음과 같은 경우에는 REST TTS 엔드포인트가 더 단순합니다.

  • 앱 보이스오버
  • 오디오 프롬프트
  • 팟캐스트 인트로
  • 알림 메시지
  • 고객센터 안내 멘트

요청 예시는 다음과 같습니다.

curl https://api.x.ai/v1/tts \
  -H "Authorization: Bearer $XAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "grok-tts-1",
    "voice": "ara",
    "input": "Welcome back to your account. Your last login was Tuesday at 3pm.",
    "format": "mp3"
  }' \
  --output greeting.mp3
Enter fullscreen mode Exit fullscreen mode

지원 형식은 다음과 같습니다.

형식 용도
mp3 일반 고음질 오디오
mulaw 8kHz 전화 통신

TTS 엔드포인트는 동기식입니다. 스트리밍 세션 없이 요청에 대한 오디오 바이트를 바로 반환합니다.

6단계: Apidog에서 전체 흐름 테스트하기

WebSocket API는 터미널에서 디버그하기 어렵습니다. 연결이 상태를 유지하고, 이벤트가 순서대로 오가며, 오디오 프레임까지 포함되기 때문입니다.

Apidog에서는 다음 패턴으로 테스트할 수 있습니다.

Apidog WebSocket Test

  1. WebSocket URL을 저장합니다.
  2. 환경 변수에 베어러 토큰을 등록합니다.
  3. session.update 메시지를 준비합니다.
  4. 고정 오디오 프레임을 포함한 input_audio_buffer.append 메시지를 준비합니다.
  5. response.create를 전송합니다.
  6. 서버 이벤트를 트리 구조로 캡처합니다.
  7. 음성 또는 지침을 바꿔가며 실행 결과를 비교합니다.

Apidog를 다운로드한 뒤 새 WebSocket 요청을 만들고, 환경 변수에 XAI_API_KEY를 붙여넣으세요.

같은 프로젝트 안에서 다음 API를 함께 관리할 수 있습니다.

  • Grok Voice WebSocket
  • TTS REST API
  • STT REST API
  • 맞춤형 음성 생성 API

상태를 유지하는 API 테스트 패턴은 QA 엔지니어를 위한 API 테스트 도구에서도 더 자세히 다룹니다.

무료 티어 제한

Grok Voice는 음성 기능 자체에 대해 분당 또는 토큰당 요금을 부과하지 않습니다. 다만 실제 개발 시 다음 제한은 고려해야 합니다.

속도 제한

콘솔은 남용을 방지하기 위해 엔드포인트별 분당 요청 제한을 적용합니다.

개발과 데모에는 충분하지만, 프로덕션 트래픽을 전제로 한 허용량은 아닙니다.

맞춤형 음성 할당량

단일 계정은 동시에 제한된 수의 맞춤형 음성 클론을 보유할 수 있습니다.

슬롯이 부족하면 기존 음성을 삭제하고 다시 만들 수 있습니다.

추론 토큰

음성 에이전트가 내부적으로 Grok 4.3을 사용해 추론할 때는 콘솔 크레딧이 사용됩니다.

무료 크레딧은 프로토타입 검증에 적합합니다. 프로덕션에서는 유료 플랜이 필요할 수 있습니다.

속도 제한 오류가 발생하면 다음 중 하나를 선택하세요.

  • 요청 배치 처리
  • 재시도 간격 증가
  • 유료 요금제로 전환

API 동작은 동일하며, 제한만 달라집니다.

음성 비교 체크리스트

배포 전에 모든 후보 음성에 동일한 문장을 실행해 보세요. 음성마다 억양과 속도, 숫자 읽기 방식이 다를 수 있습니다.

최소 테스트 문장은 다음 세 가지를 권장합니다.

  • 두 문장으로 된 인사말
  • 확인 문구 예: “알겠습니다, 모두 준비되었습니다.”
  • 숫자, 날짜, 쉼표가 포함된 긴 문장

내부 테스트에서는 같은 프롬프트를 세 가지 톤으로 실행합니다.

  1. 차분하게
  2. 보통으로
  3. 긴급하게

이 방식은 음성이 실제 서비스 문맥에서 어떻게 반응하는지 빠르게 확인하는 데 유용합니다. Grok의 사전 설정 음성은 우리가 벤치마킹한 대부분의 TTS 엔진보다 억양 변화를 잘 처리했지만, 서비스 출시 전에는 반드시 직접 들어보고 검증해야 합니다.

자주 묻는 질문

API가 정말 무료인가요?

음성 기능인 TTS, STT, 음성 에이전트, 맞춤형 음성에는 콘솔에서 분당 또는 토큰당 음성 요금이 부과되지 않습니다.

다만 음성 에이전트가 내부 추론 모델을 사용할 때는 콘솔 크레딧이 사용됩니다. 무료 콘솔 할당량은 프로토타이핑에 적합합니다.

X 계정이 필요한가요?

예. xAI Console 로그인에는 X 계정이 필요합니다.

브라우저에서 Grok Voice를 사용할 수 있나요?

예. 임시 토큰을 사용하면 됩니다.

권장 구조는 다음과 같습니다.

  1. 서버에서 /v1/realtime/sessions를 호출합니다.
  2. 임시 토큰을 생성합니다.
  3. 브라우저에 임시 토큰만 전달합니다.
  4. 브라우저에서 WebSocket에 직접 연결합니다.

상위 API 키는 서버 밖으로 나가지 않습니다.

어떤 오디오 품질을 기대할 수 있나요?

TTS 출력은 고음질 MP3 또는 8kHz μ-law를 사용할 수 있습니다.

음성 에이전트는 내부적으로 24kHz PCM16을 사용합니다. 품질은 주요 상업용 TTS 엔진과 동등하며, 지연 시간이 주요 차별점입니다.

전화 통신과도 연동할 수 있나요?

예. μ-law 출력은 SIP 및 PSTN 브리지에서 일반적으로 사용하는 형식입니다.

다만 SIP 제공업체는 별도로 필요합니다. xAI는 현재 자체 SIP 게이트웨이를 제공하지 않습니다.

음성 클로닝 품질은 무엇에 좌우되나요?

클로닝 품질은 샘플 길이보다 참조 오디오 품질에 더 크게 좌우됩니다.

조용한 방에서 녹음한 깨끗한 60초 샘플이, 잡음이 많은 120초 샘플보다 더 좋은 결과를 낼 수 있습니다.

생성된 voice_id는 다시 클로닝하지 않고도 TTS 엔드포인트와 음성 에이전트에서 사용할 수 있습니다.

게임 캐릭터 음성에도 사용할 수 있나요?

예. TTS 엔드포인트는 런타임 생성에 사용할 수 있을 만큼 빠르며, 맞춤형 음성을 사용하면 캐릭터별 고유 음성을 만들 수 있습니다.

긴 대사는 지연 시간을 고려해야 합니다. 이런 경우에는 청크 단위 TTS 생성 패턴을 사용하는 것이 좋습니다.

마무리

Grok Voice는 실시간 음성 에이전트를 빠르게 프로토타이핑할 수 있는 무료 경로입니다. xAI Console에서는 음성 기능에 대한 분당 요금이 없고, 지연 시간은 낮으며, 맞춤형 음성 기능은 음성 제품 출시 시 자주 발생하는 라이선스와 제작 부담을 줄여줍니다.

가장 빠른 검증 방법은 다음과 같습니다.

  1. xAI Console에서 키를 생성합니다.
  2. 사전 설정 음성 3개를 고릅니다.
  3. WebSocket 세션을 Apidog에서 스크립팅합니다.
  4. 같은 오디오 입력으로 반복 실행합니다.
  5. 응답 지연 시간, 억양, 교대 발화 품질을 비교합니다.

Grok 4.3 추론 API까지 연결하려면 Grok 4.3 API 가이드를 참고하세요. OpenAI 스택과 비교하려면 Grok Voice 대 GPT-Realtime을 확인하면 됩니다.

Top comments (0)