🎉️ 도서 제가 만든 GPT는 당신이 만든 GPT와 전혀 다릅니다 책이 출간 되었습니다! 🥳️

프롬프트해커 대니의 최신 소식 구독하기!

Skip to main content

Realtime API 사용법 및 예제 - 혁신적인 실시간 대화형 챗봇 만들기

· 9 min read
프롬프트해커 대니

인공지능 기술의 발전으로 대화형 인터페이스가 우리 일상 생활에 깊숙이 파고들고 있습니다. 그 중심에 OpenAI의 혁신적인 Realtime API가 있습니다. 이 글에서는 Realtime API의 사용법과 예제를 통해 여러분이 어떻게 최첨단 실시간 대화형 챗봇을 만들 수 있는지 상세히 알아보겠습니다.

Realtime API란 무엇인가?

Realtime API는 OpenAI가 2024년 10월 1일에 공개한 최신 기술로, 개발자들이 빠른 응답 속도와 다중 모달리티를 지원하는 대화형 경험을 애플리케이션에 구현할 수 있게 해줍니다. 이 API는 텍스트와 오디오를 입력과 출력으로 모두 지원하며, 도구 호출 기능까지 제공합니다.

Realtime API

Realtime API의 주요 특징

  1. 네이티브 음성-음성 변환: 텍스트 중간 단계 없이 낮은 지연 시간과 뉘앙스 있는 출력을 제공합니다.
  2. 자연스럽고 조절 가능한 음성: 모델은 자연스러운 억양을 가지며 웃음, 속삭임 등을 표현할 수 있고 톤 지시에 따를 수 있습니다.
  3. 동시 다중 모달 출력: 텍스트는 모더레이션에 유용하며, 실시간보다 빠른 오디오 생성으로 안정적인 재생을 보장합니다.

Realtime API의 작동 원리

Realtime API는 WebSocket 인터페이스를 통해 서버에서 실행되도록 설계되었습니다. 이를 통해 클라이언트와 서버 간의 지속적인 연결을 유지하며 실시간으로 메시지를 교환할 수 있습니다.

연결 설정하기

Realtime API에 연결하기 위해서는 다음과 같은 파라미터가 필요합니다:

  • URL: wss://api.openai.com/v1/realtime
  • 쿼리 파라미터: ?model=gpt-4o-realtime-preview-2024-10-01
  • 헤더:
    • Authorization: Bearer YOUR_API_KEY
    • OpenAI-Beta: realtime=v1

다음은 Node.js에서 ws 라이브러리를 사용하여 WebSocket 연결을 설정하는 간단한 예제 코드입니다:

import WebSocket from "ws";

const url = "wss://api.openai.com/v1/realtime?model=gpt-4o-realtime-preview-2024-10-01";
const ws = new WebSocket(url, {
headers: {
"Authorization": "Bearer " + process.env.OPENAI_API_KEY,
"OpenAI-Beta": "realtime=v1",
},
});

ws.on("open", function open() {
console.log("서버에 연결되었습니다.");
ws.send(JSON.stringify({
type: "response.create",
response: {
modalities: ["text"],
instructions: "사용자를 도와주세요.",
}
}));
});

ws.on("message", function incoming(message) {
console.log(JSON.parse(message.toString()));
});

Realtime API의 주요 개념

세션 (Session)

세션은 클라이언트와 서버 간의 단일 WebSocket 연결을 나타냅니다. 세션에는 기본 설정이 포함되어 있으며, 이는 언제든지 업데이트할 수 있습니다.

{
"id": "sess_001",
"object": "realtime.session",
"model": "gpt-4o",
"voice": "alloy"
}

대화 (Conversation)

대화는 항목(Item)들의 리스트로 구성됩니다. 기본적으로 세션 시작 시 하나의 대화가 생성됩니다.

{
"id": "conv_001",
"object": "realtime.conversation"
}

항목 (Item)

항목은 메시지, 함수 호출, 또는 함수 호출 출력의 세 가지 유형 중 하나입니다.

{
"id": "msg_001",
"object": "realtime.item",
"type": "message",
"status": "completed",
"role": "user",
"content": [{
"type": "input_text",
"text": "안녕하세요, 어떻게 지내세요?"
}]
}

Realtime API 사용 예제

사용자 메시지 보내기

const event = {
type: 'conversation.item.create',
item: {
type: 'message',
role: 'user',
content: [
{
type: 'input_text',
text: '안녕하세요!'
}
]
}
};
ws.send(JSON.stringify(event));
ws.send(JSON.stringify({type: 'response.create'}));

오디오 입력 처리하기

Realtime API는 24kHz의 1채널 little-endian 16비트 PCM 오디오와 8kHz의 G.711 (u-law 및 a-law) 두 가지 형식을 지원합니다. 오디오는 base64로 인코딩된 오디오 프레임의 청크로 전송해야 합니다.

다음은 Python에서 pydub 라이브러리를 사용하여 오디오 파일을 유효한 오디오 메시지 항목으로 변환하는 코드 예제입니다:

import io
import json
from pydub import AudioSegment

def audio_to_item_create_event(audio_bytes: bytes) -> str:
# 바이트 스트림에서 오디오 파일 로드
audio = AudioSegment.from_file(io.BytesIO(audio_bytes))

# 24kHz 모노 pcm16으로 리샘플링
pcm_audio = audio.set_frame_rate(24000).set_channels(1).set_sample_width(2).raw_data

# base64 문자열로 인코딩
pcm_base64 = base64.b64encode(pcm_audio).decode()

event = {
"type": "conversation.item.create",
"item": {
"type": "message",
"role": "user",
"content": [{
"type": "input_audio",
"audio": pcm_base64
}]
}
}
return json.dumps(event)

Realtime API의 고급 기능

함수 호출 (Function Calling)

Realtime API는 함수 호출을 지원하여 모델이 특정 작업을 수행하거나 외부 데이터를 가져올 수 있습니다. 함수는 세션 설정이나 응답 생성 시 도구로 전달될 수 있습니다.

{
"tools": [
{
"name": "get_weather",
"description": "주어진 위치의 날씨 정보를 가져옵니다",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "날씨를 확인할 위치",
},
"scale": {
"type": "string",
"enum": ['celsius', 'fahrenheit']
},
},
"required": ["location", "scale"],
},
}
]
}

대화 기록 추가 및 지속

Realtime API는 대화 기록을 유지하고 실시간 음성 세션을 시작할 수 있게 해줍니다. 클라이언트는 conversation.item.create를 사용하여 대화 기록을 채울 수 있습니다.

{
"type": "conversation.item.create",
"item": {
"type": "message"
"role": "user",
"content": [{
"type": "input_text",
"text": "이전 대화 내용입니다."
}]
}
}

Realtime API의 안전성과 개인정보 보호

OpenAI는 Realtime API의 오남용 위험을 줄이기 위해 여러 계층의 안전 보호 장치를 사용합니다. 여기에는 자동화된 모니터링과 플래그가 지정된 모델 입력 및 출력에 대한 인간의 검토가 포함됩니다.

또한, 개발자들은 사용자들에게 AI와 상호작용하고 있다는 것을 명확히 알려야 합니다. OpenAI는 API 서비스에 대한 엔터프라이즈 개인정보 보호 약속을 준수하며, 명시적 허가 없이는 이 서비스에 사용된 입력이나 출력을 모델 학습에 사용하지 않습니다.

결론

Realtime API는 개발자들에게 혁신적인 실시간 대화형 경험을 구축할 수 있는 강력한 도구를 제공합니다. 음성 인식, 자연어 처리, 음성 합성을 단일 API 호출로 통합함으로써, 개발자들은 보다 자연스럽고 몰입감 있는 AI 애플리케이션을 만들 수 있게 되었습니다.

이 기술은 고객 지원, 언어 학습, 가상 비서 등 다양한 분야에서 혁신을 가져올 것으로 기대됩니다. Realtime API를 통해 우리는 인간과 AI 사이의 상호작용이 더욱 자연스럽고 효율적으로 발전하는 미래를 그려볼 수 있습니다.

OpenAI의 Realtime API에 대한 더 자세한 정보와 최신 업데이트는 OpenAI 공식 문서에서 확인할 수 있습니다.