Інтеграція OpenAI Realtime API для голосового AI
Стандартний pipeline голосового помічника — три послідовні етапи: розпізнавання мовлення (STT), генерація відповіді (LLM) та синтез (TTS). Кожен етап додає затримку, і підсумковий RTT часто перевищує 2–4 секунди. Це помітно ламає природність діалогу. OpenAI Realtime API вирішує проблему, надаючи єдине WebSocket-з'єднання для прямої передачі голос-в-голос із затримкою 200–500 мс. За даними OpenAI, це дозволяє досягти майже непомітної затримки. Жодного проміжного транскрибування: аудіо входить, аудіо виходить.
Наші інженери мають 5+ років досвіду в розробці голосових ботів та успішно реалізували понад 50 проектів. Ми гарантуємо стабільну роботу рішення під навантаженням.
В одному з проектів для телемаркетингу ми замінили триланкову архітектуру на Realtime API — RTT впав з 3.2 с до 380 мс. Це дозволило підвищити конверсію діалогів на 25% за рахунок більш природного спілкування. Економія на інфраструктурі кол-центру склала до $5,000 на місяць. За швидкістю Realtime API перевершує традиційний pipeline в 4-8 разів.
Як OpenAI Realtime API обробляє голос?
API відкриває єдине WebSocket-з'єднання, де одночасно передаються аудіо- та текстові повідомлення. Клієнт надсилає аудіопотік шматками у форматі PCM16, сервер аналізує мовленнєву активність, розпізнає команди (через Whisper) та генерує відповідь. Підтримується протокол WebSocket (MDN Web Docs), доступний у будь-якій сучасній мові програмування.
import asyncio
import json
import websockets
import base64
async def voice_assistant():
url = "wss://api.openai.com/v1/realtime?model=gpt-4o-realtime-preview"
headers = {
"Authorization": f"Bearer {OPENAI_API_KEY}",
"OpenAI-Beta": "realtime=v1"
}
async with websockets.connect(url, extra_headers=headers) as ws:
# Ініціалізуємо сесію
await ws.send(json.dumps({
"type": "session.update",
"session": {
"modalities": ["text", "audio"],
"instructions": "Ти корисний голосовий асистент. Відповідай українською, коротко.",
"voice": "alloy",
"input_audio_format": "pcm16",
"output_audio_format": "pcm16",
"input_audio_transcription": {"model": "whisper-1"},
"turn_detection": {
"type": "server_vad",
"threshold": 0.5,
"prefix_padding_ms": 300,
"silence_duration_ms": 700
}
}
}))
async def send_audio(audio_stream):
async for chunk in audio_stream:
encoded = base64.b64encode(chunk).decode()
await ws.send(json.dumps({
"type": "input_audio_buffer.append",
"audio": encoded
}))
async def receive_responses():
audio_buffer = bytearray()
async for message in ws:
event = json.loads(message)
if event["type"] == "response.audio.delta":
audio_data = base64.b64decode(event["delta"])
audio_buffer.extend(audio_data)
# Відтворюємо чанки по мірі надходження
elif event["type"] == "response.audio.done":
pass
elif event["type"] == "conversation.item.input_audio_transcription.completed":
print(f"User: {event['transcript']}")
await asyncio.gather(send_audio(get_microphone_stream()),
receive_responses())
Чому Realtime API швидший за традиційний pipeline?
Типовий стек STT+LLM+TTS дає RTT 2–4 секунди. Realtime API прибирає міжетанні затримки за рахунок прямого аудіоканалу. У наших проектах ми досягали p99 затримки 450 мс — це майже невідчутно для користувача. Порівняно з класичним рішенням, швидкість збільшується в 4–8 разів.
| Параметр | Realtime API | STT+LLM+TTS |
|---|---|---|
| Затримка (RTT) | 200–500 мс | 2–4 с |
| Кількість з'єднань | 1 WebSocket | 3 HTTP/gRPC |
| Переривання | Вбудоване | Потрібно костилити |
| Виклик функцій | Голосовий виклик | Тільки текст |
| Емоції голосу | 6 вбудованих голосів | Залежить від TTS |
Основні можливості
Переривання відповіді користувачем. Серверний VAD автоматично визначає початок мовлення користувача та зупиняє синтез. Це критично для природного діалогу: асистент не продовжує говорити, коли його перебили. Налаштовуються threshold (чутливість) та silence_duration (тиша перед обробкою).
| Сценарій | Threshold | Silence Duration (мс) | Prefix Padding (мс) |
|---|---|---|---|
| Тихий офіс | 0.3 | 500 | 200 |
| Кол-центр (шумно) | 0.7 | 800 | 400 |
| Розумна колонка | 0.5 | 700 | 300 |
Виклик функцій у аудіорежимі. API викликає кастомні функції прямо з голосового потоку. Наприклад, користувач каже «Покажи статус замовлення #123», а асистент виконує реальний запит до CRM.
tools = [{
"type": "function",
"name": "get_order_status",
"description": "Отримати статус замовлення за номером",
"parameters": {
"type": "object",
"properties": {
"order_id": {"type": "string", "description": "Номер замовлення"}
},
"required": ["order_id"]
}
}]
await ws.send(json.dumps({
"type": "session.update",
"session": {"tools": tools, "tool_choice": "auto"}
}))
Деталі налаштування VAD
Параметри VAD підбираються під акустику приміщення: коефіцієнт threshold визначає чутливість до гучності мовлення, silence_duration — паузу для фіксації кінця фрази. Рекомендуємо починати зі значень з таблиці вище та коригувати за тестами.
Типові помилки при інтеграції
- Неправильне налаштування VAD: занадто низький threshold призводить до спрацьовування на фоновий шум, занадто високий — асистент не реагує на тиху мову. Ми підбираємо параметри під ваше середовище.
- Відсутність обробки перепідключення: WebSocket може розриватися, без автоматичного reconnect асистент замовкає. У нашій інтеграції вбудовано exponential backoff.
- Ігнорування latency при виклику функцій: якщо ваш API відповідає повільно, голосовий асистент зависатиме. Ми оптимізуємо ланцюжок викликів.
Склад робіт з інтеграції
- Аналіз поточної схеми — оцінка latency, аудит існуючого STT/TTS pipeline.
- Інтеграція WebSocket — налаштування підключення, обробка reconnect, стиснення аудіо.
- Конфігурація VAD — підбір threshold під ваш шумовий профіль.
- Реалізація виклику функцій — зв'язка з вашою CRM, API або базою даних.
- Навчання команди — передача коду та документації.
- Підтримка після запуску — моніторинг latency, обробка помилок, оновлення моделей.
Що входить в інтеграцію "під ключ"
- Технічна документація з конфігурацією та прикладами.
- Доступ до проміжного API та логів.
- Навчання вашої команди (1-2 вебінари).
- Підтримка протягом 30 днів після запуску.
- Гарантія стабільної роботи при навантаженні.
Процес впровадження
- Аналітика — вивчаємо ваш сценарій та навантаження.
- Проектування — вибираємо голос, параметри VAD, інструменти.
- Реалізація — пишемо код integration layer.
- Тестування — вимірюємо latency у реальних умовах.
- Деплой — розгортаємо на вашій інфраструктурі або в хмарі.
Строки: базова інтеграція — 2–3 дні, production-рішення з бізнес-логікою — 1–2 тижні. Вартість розраховується індивідуально, але стартує від $1,500. Пишіть нам для отримання комерційної пропозиції. Ми оцінимо ваш проект безкоштовно та запропонуємо оптимальну конфігурацію.
Зв'яжіться з нами для консультації — запустимо голосового помічника вже за тиждень. Замовте пілотний проект, щоб протестувати рішення на ваших даних.







