bolna-ai/bolna
Conversational voice AI agents
Bol na – オープンソース音声AIオーケストレーションプラットフォーム
何であるか – Bol na は、大規模言語モデル(LLM)で駆動される 音声優先 の対話アシスタントを構築できる本格的なフレームワークです。音声認識(ASR)、LLM、音声合成(TTS)のプロバイダーを接続し、電話通話の発信・受信が可能です。オーケストレーションのすべてのロジックはこのリポジトリに含まれており、Bol naが提供するホストAPIやUIも、この上に構築されています。
コアコンセプト
| コンポーネント | 役割 | 例:プロバイダー |
|---|---|---|
| 電話通話 | 電話通話を開始・受信し、WebSocketで音声をストリーミング | Twilio、Plivo(他のものも追加可能) |
| ASR(トランスクリプター) | 入力音声をテキストに変換 | Deepgram、Azure |
| LLMエージェント | 対話応答を生成 | OpenAI、DeepSeek、Llama、Cohere、Mistral(LiteLLM経由) |
| TTS(シンセサイザー) | LLMの出力を音声に変換 | AWS Polly、ElevenLabs、OpenAI、Cartesiaなど |
| Redis | エージェントの状態とプロンプトデータを永続化 | |
| ngrok | ローカルサーバーを公開インターネットに公開し、通話コールバックを可能に |
主な機能
- エンドツーエンドのオーケストレーション – 1つのPythonレベルのパイプライン(
Assistant)で音声 → テキスト → LLM → 音声のストリーミングを実現。 - プロバイダー非依存 – 環境変数で任意の対応ASR、LLM、TTSサービスを接続可能。LLMには
liteLLMラッパーを使用。 - 電話通話統合 – TwilioとPlivo用の準備済みDockerコンテナを提供。Vonage、Telnyxなど他のものへの追加も明確な道筋あり。
- ストリーミング – トランスクリプションと合成の両方がストリーミング可能。低遅延の音声インタラクションを実現。
- セルフホスティング – すべてのコンポーネントがDocker Composeで実行(Bol naサーバー、通話サーバー、Redis、ngrok)。データとキーは自社内に保有可能。
- 拡張性 – 新しい通話プロバイダーやTTSプロバイダーを追加するには、ハンドラクラスを実装し、小さなサーバーラッパーを書くだけ。
一般的なワークフロー(Python API)
from bolna.assistant import Assistant
from bolna.models import (
Transcriber, Synthesizer, ElevenLabsConfig,
LlmAgent, SimpleLlmAgent,
)
assistant = Assistant(name="demo_agent")
# 1️⃣ 音声認識
transcriber = Transcriber(provider="deepgram", model="nova-2", stream=True)
# 2️⃣ LLM応答
llm = LlmAgent(
agent_type="simple_llm_agent",
agent_flow_type="streaming",
llm_config=SimpleLlmAgent(
provider="openai",
model="gpt-4o-mini",
temperature=0.3,
),
)
# 3️⃣ 音声合成
synth = Synthesizer(
provider="elevenlabs",
provider_config=ElevenLabsConfig(voice="George", voice_id="JBFqnCBsd6RMkjVDRZzb"),
stream=True,
audio_format="wav",
)
assistant.add_task(
task_type="conversation",
llm_agent=llm,
transcriber=transcriber,
synthesizer=synth,
enable_textual_input=False,
)
# 実行 – インクリメンタルな結果辞書を生成
async for chunk in assistant.execute():
print(chunk)
同じAssistantは、トランスクリプター/シンセサイザーを省略し、enable_textual_input=Trueに設定することで テキスト専用 モードでも使用可能。
ローカルでの開始手順
- リポジトリをクローンし、
.env.sample→.envをコピー。使用するプロバイダー(OpenAI、Deepgram、ElevenLabs、Twilioなど)のAPIキーを入力。 - Docker-compose –
local_setup/フォルダにdocker-compose.ymlがあり、以下の4つのコンテナをビルドします:bolna-app– コアオーケストレーションサーバーtwilio-appまたはplivo-app– 通話Webhookサーバーngrok– Webhook URLを公開redis– 状態ストア
- すべてを起動するためのヘルパースクリプトを使用:
cd local_setup chmod +x start.sh ./start.sh # BuildKitでビルドし、デタッチモードで実行 - REST API(
API.md)または上記のPython SDKを使ってエージェントを作成。 - 通話を行う – 通話サーバーがTwilio/PlivoからのWebhookを受け取り、音声をBol naに転送し、合成された返信を通話者にストリーミング。
プラットフォームの拡張
- 新しい通話プロバイダーの追加 –
bolna/input_handlers/telephony_providers/にインプットハンドラーを実装し、bolna/output_handlers/telephony_providers/にアウトプットハンドラーを実装。その後、twilio_api_server.pyに似た小さなサーバーを書く。 - 新しいASR/TTSプロバイダーの追加 –
.envで必要な認証情報を公開し、bolna/providers.pyのマッピングにプロバイダーを追加。 - カスタムLLMロジック – 異なる
LlmAgentサブクラスを接続するか、プロンプトフローを変更。フレームワークはLLMをブラックボックスとして扱います。
コミュニティとサポート
- Discord – ヘルプや機能議論のためのアクティブなチャットチャンネル。
- ドキュメント – https://docs.bolna.ai にホスト(APIリファレンス、プロバイダー詳細、デプロイガイド)。
- 貢献 – MITライセンス。PRを歓迎。リポジトリには
CONTRIBUTING.mdとオープンな課題リストあり。
ライセンス
MIT – コードを自由に使用、変更、再配布可能。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト