# Simple Call Center Простой Python/FastAPI прототип голосовой сессии: 1. браузер отправляет микрофон в WebSocket как PCM 16 kHz; 2. сервер стримит аудио в ElevenLabs realtime STT; 3. финальный фрагмент речи отправляется в OpenAI Responses API с общей историей текущей сессии; 4. текст ответа одновременно стримится в ElevenLabs TTS WebSocket; 5. браузер проигрывает PCM-аудио чанки по мере генерации. ## Быстрый старт ```bash python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt cp .env.example .env ``` Заполните `.env`: ```bash OPENAI_API_KEY=... ELEVENLABS_API_KEY=... ``` Запуск: ```bash uvicorn app.main:app --reload --port 8000 ``` Откройте [http://127.0.0.1:8000](http://127.0.0.1:8000). ## Настройки - `OPENAI_MODEL` по умолчанию стоит `gpt-5.4-nano`, потому что в актуальной документации OpenAI `gpt-5.4 nano` описан как самый дешевый GPT-5.4-class вариант, а `gpt-5.4 mini` и `nano` рекомендуются для latency/cost задач. - `ELEVENLABS_STT_MODEL=scribe_v2_realtime` использует realtime STT WebSocket. - `AI_VOICE_V2_STREAMING_TTS=0` использует обычный HTTP TTS, поэтому `AI_VOICE_TTS_ELEVENLABS_MODEL_ID=eleven_v3` применяется напрямую. - Если вернуть `AI_VOICE_V2_STREAMING_TTS=1`, приложение автоматически использует `AI_VOICE_TTS_ELEVENLABS_STREAMING_FALLBACK_MODEL=eleven_flash_v2_5`, потому что ElevenLabs `/stream-input` не поддерживает `eleven_v3`. - `LOCAL_KB_ENABLED=1` включает локальную базу знаний из JSONL-файлов в `knowledge/`. - `LOCAL_KB_MAX_RESULTS=4` задает, сколько найденных записей подмешивать в один ответ. - Контекст хранится в памяти на один WebSocket-сеанс браузера. Кнопка reset очищает локальную историю. ## Полезные ссылки - OpenAI streaming Responses API: https://developers.openai.com/api/docs/guides/streaming-responses - OpenAI models: https://developers.openai.com/api/docs/models - ElevenLabs realtime STT: https://elevenlabs.io/docs/api-reference/speech-to-text/v-1-speech-to-text-realtime - ElevenLabs realtime TTS WebSocket: https://elevenlabs.io/docs/eleven-api/guides/how-to/websockets/realtime-tts