Sebuah posting blog menjelaskan pekerjaan di balik proyek ini.
Aplikasi tumpukan penuh untuk panggilan telepon AI yang dapat diinterupsi, latensi rendah, dan kualitas mendekati manusia yang dibangun dari penggabungan LLM, alat pemahaman ucapan, model text-to-speech, dan API telepon Twilio
Dengarkan contoh panggilan
Komponen berikut telah diimplementasikan dan disusun bersama dalam mode streaming untuk mencapai tugas panggilan AI berlatensi rendah dan dapat diinterupsi :
(Anda mungkin ingin membuat Lingkungan Virtual Python untuk meminimalkan kemungkinan konflik.)
pip install -r requirements.txt
ngrok
Twilio memerlukan server yang dapat diakses secara eksternal untuk dapat merutekan panggilan. Untuk melakukan ini saat menjalankan instance lokal, Anda perlu mengekspos server ke dunia luar. Salah satu caranya adalah dengan menggunakan ngrok
Jalankan ngrok
untuk mendapatkan URL eksternal yang meneruskan lalu lintas ke server web lokal Anda:
ngrok http 3000
Salin URL yang diberikan ngrok kepada Anda (misalnya 1bf0-157-131-155-236.ngrok-free.app
) tanpa https://
di awal dan tetapkan itu sebagai variabel SERVER
Anda di bagian berikut.
Buat salinan file .env.example
dan ganti namanya menjadi .env
. Kemudian atur kredensial dan konfigurasi yang diperlukan.
Harap dicatat bahwa Anda memiliki pilihan antara anthropic
dan openai
untuk layanan LLM, dan antara deepgram
dan elevenlabs
untuk layanan TTS.
# Server Configuration
SERVER=your_server_here
# port number if you are running the server locally
PORT=3000
# Service API Keys
# Twlio
TWILIO_ACCOUNT_SID=your_twilio_account_sid
TWILIO_AUTH_TOKEN=your_twilio_auth_token
# AI Services
## LLM
OPENAI_API_KEY=your_openai_api_key
ANTHROPIC_API_KEY=your_anthropic_api_key
## Speech Understanding/TTS
DEEPGRAM_API_KEY=your_deepgram_api_key
## TTS
ELEVENLABS_API_KEY=your_elevenlabs_api_key
ELEVENLABS_MODEL_ID=eleven_turbo_v2
ELEVENLABS_VOICE_ID=XrExE9yKIg1WjnnlVkGX
# Which service to use for TTS
TTS_SERVICE=elevenlabs
# Which service to use for LLM
LLM_SERVICE=openai
# When you call a number, what should the caller ID be?
APP_NUMBER=your_app_number
# When UI launches, what number should it call by default
YOUR_NUMBER=your_number
# When a call needs to be transferred, what number should it be transferred to?
TRANSFER_NUMBER=your_transfer_number
# AI Configuration
SYSTEM_MESSAGE="You are a representative called Sarah from El Camino Hospital. Your goal is to obtain a prior authorization for a patient called John Doe for a knee surgery. Be brief in your correspondence."
INITIAL_MESSAGE="Hello, my name is Sarah, and I'm calling from El Camino Hospital. I need to discuss a prior authorization for a patient. Could you please direct me to the appropriate representative?"
# Should calls be recorded? (this has legal implications, so be careful)
RECORD_CALLS=false
Dengan asumsi Anda telah membuat nomor telepon Twilio dan menginstal CLI Twilio, jalankan perintah berikut untuk mengonfigurasi Twilio agar menggunakan titik akhir aplikasi Anda:
twilio phone-numbers:update YOURNUMBER --voice-url=https://NGROKURL/incoming
python app.py
streamlit ui/streamlit_app.py
Kontribusi dipersilahkan! Silakan kirimkan Permintaan Tarik.
Hak Cipta Amir Kiani, 2024
Kode dibagikan di bawah Lisensi MIT
Proyek ini tidak akan terjadi tanpa contoh TypeScript yang hebat dari Twilio Labs. Claude Sonnet 3.5, GPT-4o, dan Aider juga memberikan banyak bantuan dalam menulis bagian basis kode ini?