Una publicación de blog que explica el trabajo detrás de este proyecto.
Una aplicación completa para llamadas telefónicas de IA interrumpibles, de baja latencia y de calidad casi humana creada a partir de la unión de LLM, herramientas de comprensión del habla, modelos de texto a voz y la API del teléfono de Twilio.
Escuche una llamada de ejemplo
Los siguientes componentes se han implementado y combinado en forma de transmisión para lograr las tareas de llamadas de IA interrumpibles y de baja latencia :
(Es posible que desee crear un entorno virtual de Python para minimizar la posibilidad de conflictos).
pip install -r requirements.txt
ngrok
Twilio requiere un servidor accesible externamente para poder enrutar llamadas. Para hacer esto mientras ejecuta una instancia local, necesita exponer el servidor al mundo exterior. Una forma de hacerlo es mediante el uso de ngrok
Ejecute ngrok
para obtener una URL externa que reenvíe el tráfico a su servidor web local:
ngrok http 3000
Copie la URL que le proporciona ngrok (por ejemplo, 1bf0-157-131-155-236.ngrok-free.app
) sin https://
al principio y configúrela como su variable SERVER
en la siguiente sección.
Haga una copia del archivo .env.example
y cámbiele el nombre a .env
. Luego establezca las credenciales y configuraciones requeridas.
Tenga en cuenta que puede elegir entre anthropic
y openai
para el servicio LLM, y entre deepgram
y elevenlabs
para el servicio 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
Suponiendo que creó un número de teléfono de Twilio e instaló la CLI de Twilio, ejecute lo siguiente para configurar Twilio para usar el punto final de su aplicación:
twilio phone-numbers:update YOURNUMBER --voice-url=https://NGROKURL/incoming
python app.py
streamlit ui/streamlit_app.py
¡Las contribuciones son bienvenidas! No dude en enviar una solicitud de extracción.
Copyright Amir Kiani, 2024
Código compartido bajo licencia MIT
Este proyecto no habría existido sin este gran ejemplo de TypeScript de Twilio Labs. Claude Sonnet 3.5, GPT-4o y Aider también brindaron amplia ayuda para escribir partes de este código base.