51 lines
2.7 KiB
Markdown
51 lines
2.7 KiB
Markdown
# 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
|