Initial voice call center app

This commit is contained in:
Magzhan
2026-06-20 17:38:19 +05:00
commit bbb6985876
12 changed files with 2833 additions and 0 deletions
+50
View File
@@ -0,0 +1,50 @@
# 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