このプロジェクトの背後にある作業を説明するブログ投稿。
ステッチング LLM、音声理解ツール、テキスト読み上げモデル、Twilio の電話 API から構築された、中断可能、低遅延、人間に近い品質の AI 通話のためのフルスタック アプリ
通話例を聞く
次のコンポーネントは、低遅延で割り込み可能なAI 呼び出しのタスクを実現するために、ストリーミング形式で実装され、まとめられています。
(競合の可能性を最小限に抑えるために、Python 仮想環境を作成することもできます。)
pip install -r requirements.txt
ngrok
をセットアップするTwilio では、通話をルーティングできるように、外部からアクセス可能なサーバーが必要です。ローカル インスタンスの実行中にこれを行うには、サーバーを外部に公開する必要があります。これを行う 1 つの方法は、 ngrok
使用することです。
ngrok
実行して、トラフィックをローカル Web サーバーに転送する外部 URL を取得します。
ngrok http 3000
ngrok が提供する URL (例: 1bf0-157-131-155-236.ngrok-free.app
) を先頭のhttps://
を除いてコピーし、次のセクションでSERVER
変数として設定します。
.env.example
ファイルのコピーを作成し、名前を.env
に変更します。次に、必要な認証情報と構成を設定します。
LLM サービスの場合はanthropic
とopenai
どちらかを選択でき、TTS サービスの場合はdeepgram
とelevenlabs
どちらかを選択できることに注意してください。
# 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
Twilio 電話番号を作成し、Twilio の CLI をインストールしていると仮定して、次のコマンドを実行して、アプリのエンドポイントを使用するように Twilio を構成します。
twilio phone-numbers:update YOURNUMBER --voice-url=https://NGROKURL/incoming
python app.py
streamlit ui/streamlit_app.py
貢献は大歓迎です!お気軽にプルリクエストを送信してください。
著作権アミール・キアニ、2024
MIT ライセンスに基づいて共有されるコード
このプロジェクトは、Twilio Labs のこの素晴らしい TypeScript サンプルがなければ実現しなかったでしょう。 Claude Sonnet 3.5、GPT-4o、および Aider も、このコード ベースの一部を記述する際に十分な支援を提供してくれました。