2026-06-20 17:38:19 +05:00
2026-06-20 17:38:19 +05:00
2026-06-20 17:38:19 +05:00
2026-06-20 17:38:19 +05:00
2026-06-20 17:38:19 +05:00
2026-06-20 17:38:19 +05:00
2026-06-20 17:38:19 +05:00

Simple Call Center

Простой Python/FastAPI прототип голосовой сессии:

  1. браузер отправляет микрофон в WebSocket как PCM 16 kHz;
  2. сервер стримит аудио в ElevenLabs realtime STT;
  3. финальный фрагмент речи отправляется в OpenAI Responses API с общей историей текущей сессии;
  4. текст ответа одновременно стримится в ElevenLabs TTS WebSocket;
  5. браузер проигрывает PCM-аудио чанки по мере генерации.

Быстрый старт

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env

Заполните .env:

OPENAI_API_KEY=...
ELEVENLABS_API_KEY=...

Запуск:

uvicorn app.main:app --reload --port 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 очищает локальную историю.

Полезные ссылки

S
Description
recovered from docker image 2026-08-10
Readme
220 KiB
Languages
Python 75.3%
JavaScript 17.6%
CSS 5.1%
HTML 1.8%
Dockerfile 0.2%