Uma postagem no blog explicando o trabalho por trás deste projeto.
Um aplicativo full stack para chamadas telefônicas interrompíveis, de baixa latência e com qualidade quase humana, criadas a partir de LLMs, ferramentas de compreensão de fala, modelos de conversão de texto em fala e API de telefone da Twilio
Ouça o exemplo de chamada
Os seguintes componentes foram implementados e combinados em streaming para realizar as tarefas de chamadas de IA interrompíveis e de baixa latência :
(Você pode querer criar um ambiente virtual Python para minimizar a chance de conflitos.)
pip install -r requirements.txt
ngrok
A Twilio requer um servidor acessível externamente para poder rotear chamadas. Para fazer isso durante a execução de uma instância local, é necessário expor o servidor ao mundo externo. Uma maneira de fazer isso é usando ngrok
Execute ngrok
para obter uma URL externa que encaminhe o tráfego para o seu servidor web local:
ngrok http 3000
Copie a URL fornecida pelo ngrok (por exemplo, 1bf0-157-131-155-236.ngrok-free.app
) sem https://
no início e defina-a como sua variável SERVER
na seção seguinte.
Faça uma cópia do arquivo .env.example
e renomeie-o para .env
. Em seguida, defina as credenciais e configurações necessárias.
Observe que você pode escolher entre anthropic
e openai
para o serviço LLM, e entre deepgram
e elevenlabs
para o serviço 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
Supondo que você tenha criado um número de telefone do Twilio e instalado a CLI do Twilio, execute o seguinte para configurar o Twilio para usar o endpoint do seu aplicativo:
twilio phone-numbers:update YOURNUMBER --voice-url=https://NGROKURL/incoming
python app.py
streamlit ui/streamlit_app.py
Contribuições são bem-vindas! Sinta-se à vontade para enviar uma solicitação pull.
Direitos autorais Amir Kiani, 2024
Código compartilhado sob licença MIT
Este projeto não teria acontecido sem este excelente exemplo de TypeScript do Twilio Labs. Claude Sonnet 3.5, GPT-4o e Aider também forneceram ampla ajuda na escrita de partes desta base de código?