콘텐츠로 이동

빠른 시작

  1. 프로젝트 생성

    이 빠른 시작에서는 브라우저에서 사용할 수 있는 음성 에이전트를 만듭니다. 새 프로젝트의 기본 구조를 생성하려면 Next.js 또는 Vite로 시작할 수 있습니다.

    Terminal window
    npm create vite@latest my-project -- --template vanilla-ts
  2. 권장 패키지 설치 (Zod v4 필요)

    Terminal window
    npm install @openai/agents zod
  3. 클라이언트 ephemeral token 생성

    이 애플리케이션은 사용자의 브라우저에서 실행되므로, Realtime API를 통해 모델에 안전하게 연결할 방법이 필요합니다. 권장 흐름은 공식 Realtime API with WebRTC 가이드와 동일합니다. 백엔드에서 수명이 짧은 ephemeral 클라이언트 토큰을 생성한 뒤, 브라우저가 그 토큰을 사용해 WebRTC 연결을 설정합니다. 테스트 목적이라면 curl과 일반 OpenAI API 키를 사용해 토큰을 생성할 수도 있습니다.

    Terminal window
    export OPENAI_API_KEY="sk-proj-...(your own key here)"
    curl -X POST https://api.openai.com/v1/realtime/client_secrets \
    -H "Authorization: Bearer $OPENAI_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
    "session": {
    "type": "realtime",
    "model": "gpt-realtime"
    }
    }'

    응답에는 ek_ 접두사로 시작하는 최상위 value 필드와 적용된 session 객체가 포함됩니다. WebRTC 연결을 설정할 때 클라이언트 시크릿으로 value를 사용하세요. 이 토큰은 수명이 짧으므로 필요할 때마다 백엔드에서 새로 발급해야 합니다. 브라우저 세션에 authorization 또는 사용자 지정 headers가 포함된 호스티드 MCP 서버 도구가 필요하다면, 해당 자격 증명을 브라우저 코드에 노출하는 대신 서버 측에서 POST /v1/realtime/client_secrets로 보내는 session payload에 그 호스티드 MCP 구성을 포함하세요.

  1. 첫 Agent 생성

    RealtimeAgent를 만드는 방법은 일반 Agent를 만드는 것과 매우 비슷합니다.

    import { RealtimeAgent } from '@openai/agents/realtime';
    const agent = new RealtimeAgent({
    name: 'Assistant',
    instructions: 'You are a helpful assistant.',
    });
  2. 세션 생성

    일반 에이전트와 달리 음성 에이전트는 RealtimeSession 내부에서 지속적으로 실행되며, 이 세션이 시간에 따라 대화와 모델 연결을 처리합니다. 또한 이 세션은 이후 설정하게 될 오디오 처리, 인터럽션(중단 처리), 그리고 더 넓은 범위의 대화 수명 주기도 관리합니다.

    import { RealtimeSession } from '@openai/agents/realtime';
    const session = new RealtimeSession(agent, {
    model: 'gpt-realtime-1.5',
    });

    RealtimeSession 생성자는 첫 번째 인수로 agent를 받습니다. 이 에이전트가 사용자가 처음 상호작용하게 될 에이전트입니다.

  3. 세션 연결

    세션에 연결하려면 앞서 생성한 클라이언트 ephemeral token을 전달해야 합니다.

    await session.connect({ apiKey: 'ek_...(put your own key here)' });

    브라우저에서는 WebRTC를 사용해 Realtime API에 연결되며, 마이크 캡처와 오디오 재생이 자동으로 구성됩니다. 기본 WebRTC 경로에서는 데이터 채널이 열리자마자 SDK가 초기 세션 구성을 전송하고, connect()가 resolve되기 전에 해당하는 session.updated 확인 응답을 기다리려고 시도하며, 그 확인 응답이 오지 않으면 timeout fallback을 사용합니다. Node.js와 같은 서버 런타임에서 RealtimeSession을 실행하면 SDK는 자동으로 WebSocket으로 대체합니다. WebSocket 경로에서는 소켓이 열리고 초기 구성이 전송된 후 connect()가 resolve되므로 session.updated는 약간 나중에 도착할 수 있습니다. 전송 방식 선택에 대해서는 전송 방식 가이드에서 더 자세히 알아볼 수 있습니다.

  1. 전체 구성 결합

    import { RealtimeAgent, RealtimeSession } from '@openai/agents/realtime';
    export async function setupCounter(element: HTMLButtonElement) {
    // ....
    // for quickly start, you can append the following code to the auto-generated TS code
    const agent = new RealtimeAgent({
    name: 'Assistant',
    instructions: 'You are a helpful assistant.',
    });
    const session = new RealtimeSession(agent);
    // Automatically connects your microphone and audio output in the browser via WebRTC.
    try {
    await session.connect({
    // To get this ephemeral key string, you can run the following command or implement the equivalent on the server side:
    // curl -s -X POST https://api.openai.com/v1/realtime/client_secrets -H "Authorization: Bearer $OPENAI_API_KEY" -H "Content-Type: application/json" -d '{"session": {"type": "realtime", "model": "gpt-realtime"}}' | jq .value
    apiKey: 'ek_...(put your own key here)',
    });
    console.log('You are connected!');
    } catch (e) {
    console.error(e);
    }
    }
  2. 앱 실행 및 대화 시작

    웹 서버를 시작하고 새 Realtime Agent 코드가 포함된 페이지를 여세요. 마이크 권한 요청이 표시되어야 합니다. 접근 권한을 허용하면 에이전트와 대화를 시작할 수 있습니다.

    Terminal window
    npm run dev

이제 여기서부터 직접 음성 에이전트를 설계하고 구축할 수 있습니다.