빠른 시작
프로젝트 설정 및 자격 증명
섹션 제목: “프로젝트 설정 및 자격 증명”-
프로젝트 생성
이 빠른 시작에서는 브라우저에서 사용할 수 있는 음성 에이전트를 만듭니다. 새 프로젝트의 기본 구조를 생성하려면
Next.js또는Vite로 시작할 수 있습니다.Terminal window npm create vite@latest my-project -- --template vanilla-ts -
권장 패키지 설치 (Zod v4 필요)
Terminal window npm install @openai/agents zod -
클라이언트 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로 보내는sessionpayload에 그 호스티드 MCP 구성을 포함하세요.
음성 에이전트 생성 및 연결
섹션 제목: “음성 에이전트 생성 및 연결”-
첫 Agent 생성
새
RealtimeAgent를 만드는 방법은 일반Agent를 만드는 것과 매우 비슷합니다.import { RealtimeAgent } from '@openai/agents/realtime';const agent = new RealtimeAgent({name: 'Assistant',instructions: 'You are a helpful assistant.',}); -
세션 생성
일반 에이전트와 달리 음성 에이전트는
RealtimeSession내부에서 지속적으로 실행되며, 이 세션이 시간에 따라 대화와 모델 연결을 처리합니다. 또한 이 세션은 이후 설정하게 될 오디오 처리, 인터럽션(중단 처리), 그리고 더 넓은 범위의 대화 수명 주기도 관리합니다.import { RealtimeSession } from '@openai/agents/realtime';const session = new RealtimeSession(agent, {model: 'gpt-realtime-1.5',});RealtimeSession생성자는 첫 번째 인수로agent를 받습니다. 이 에이전트가 사용자가 처음 상호작용하게 될 에이전트입니다. -
세션 연결
세션에 연결하려면 앞서 생성한 클라이언트 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는 약간 나중에 도착할 수 있습니다. 전송 방식 선택에 대해서는 전송 방식 가이드에서 더 자세히 알아볼 수 있습니다.
앱 실행 및 테스트
섹션 제목: “앱 실행 및 테스트”-
전체 구성 결합
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 codeconst 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 .valueapiKey: 'ek_...(put your own key here)',});console.log('You are connected!');} catch (e) {console.error(e);}} -
앱 실행 및 대화 시작
웹 서버를 시작하고 새 Realtime Agent 코드가 포함된 페이지를 여세요. 마이크 권한 요청이 표시되어야 합니다. 접근 권한을 허용하면 에이전트와 대화를 시작할 수 있습니다.
Terminal window npm run dev
다음 단계
섹션 제목: “다음 단계”이제 여기서부터 직접 음성 에이전트를 설계하고 구축할 수 있습니다.
- 도구, 핸드오프, 가드레일을 추가하세요
- 턴 감지와 음성 활동 감지, 인터럽션(중단 처리), 수동 응답 제어가 대화 루프에 어떤 영향을 주는지 알아보세요
- 텍스트 입력, 이미지 입력, 세션 기록 관리를 추가하세요
- 배포에 맞는 전송 방식을 선택하세요: WebRTC, WebSocket, 또는 사용자 지정 전송 방식