Un article de blog expliquant le travail derrière ce projet.
Une application complète pour les appels téléphoniques IA disruptibles, à faible latence et de qualité quasi humaine, construite à partir de LLM d'assemblage, d'outils de compréhension vocale, de modèles de synthèse vocale et de l'API téléphonique de Twilio.
Écoutez un exemple d'appel
Les composants suivants ont été implémentés et assemblés en mode streaming pour réaliser les tâches d'appels IA à faible latence et disruptibles :
(Vous souhaiterez peut-être créer un environnement virtuel Python pour minimiser les risques de conflits.)
pip install -r requirements.txt
ngrok
Twilio nécessite un serveur accessible en externe pour pouvoir acheminer les appels. Pour ce faire lors de l'exécution d'une instance locale, vous devez exposer le serveur au monde extérieur. Une façon de procéder consiste à utiliser ngrok
Exécutez ngrok
pour obtenir une URL externe qui transfère le trafic vers votre serveur Web local :
ngrok http 3000
Copiez l'URL que ngrok vous donne (par exemple 1bf0-157-131-155-236.ngrok-free.app
) sans le https://
au début et définissez-la comme variable SERVER
dans la section suivante.
Faites une copie du fichier .env.example
et renommez-le en .env
. Définissez ensuite les informations d’identification et les configurations requises.
Veuillez noter que vous avez le choix entre anthropic
et openai
pour le service LLM, et entre deepgram
et elevenlabs
pour le service 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
En supposant que vous avez créé un numéro de téléphone Twilio et installé la CLI de Twilio, exécutez ce qui suit pour configurer Twilio afin qu'il utilise le point de terminaison de votre application :
twilio phone-numbers:update YOURNUMBER --voice-url=https://NGROKURL/incoming
python app.py
streamlit ui/streamlit_app.py
Les contributions sont les bienvenues ! N'hésitez pas à soumettre une Pull Request.
Copyright Amir Kiani, 2024
Code partagé sous licence MIT
Ce projet n'aurait pas vu le jour sans cet excellent exemple TypeScript de Twilio Labs. Claude Sonnet 3.5, GPT-4o et Aider ont également fourni une aide précieuse pour écrire des parties de cette base de code ?