Інтеграція OpenAI Realtime API для голосового AI

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1566 послуг
Інтеграція OpenAI Realtime API для голосового AI
Середній
від 1 тижня до 3 місяців
Часті запитання

Напрямки AI-розробки

Етапи розробки AI-рішення

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1284
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1196
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    901
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1119
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    586
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    853

Інтеграція OpenAI Realtime API для голосового AI OpenAI Realtime API (жовтень 2024) — WebSocket API для створення голосових помічників із затримкою 200–500 мс. Забирає необхідність будувати окремий pipeline STT + LLM + TTS - все в одному з'єднанні. Підтримує переривання відповіді користувачем. ### Ключові можливості - Нативний voice-to-voice без проміжних транскрипцій - Server VAD: автоматичне визначення початку/кінця мови - Interruption handling: користувач може перебити відповідь - Function calling у голосовому режимі - Підтримка text+audio одночасно ### WebSocket інтеграція```python

import asyncio import json import websockets import base64

async def voice_assistant(): url = "wss://api.openai.com/v1/realtime?model=gpt-4o-realtime-preview-2024-12-17" 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",  # alloy | echo | fable | onyx | nova | shimmer
            "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())

### Function calling в голосовому режиміpython 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"} }))