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に設定することで テキスト専用 モードでも使用可能。


ローカルでの開始手順

  1. リポジトリをクローンし、.env.sample.env をコピー。使用するプロバイダー(OpenAI、Deepgram、ElevenLabs、Twilioなど)のAPIキーを入力。
  2. Docker-composelocal_setup/フォルダにdocker-compose.ymlがあり、以下の4つのコンテナをビルドします:
    • bolna-app – コアオーケストレーションサーバー
    • twilio-app または plivo-app – 通話Webhookサーバー
    • ngrok – Webhook URLを公開
    • redis – 状態ストア
  3. すべてを起動するためのヘルパースクリプトを使用:
    cd local_setup
    chmod +x start.sh
    ./start.sh   # BuildKitでビルドし、デタッチモードで実行
    
  4. REST API(API.md)または上記のPython SDKを使ってエージェントを作成。
  5. 通話を行う – 通話サーバーが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 – コードを自由に使用、変更、再配布可能。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト