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 將本機伺服器暴露至公開網際網路,用於通話回調

主要功能

  • 端對端編排 – 一個 Python 級別的流程(Assistant),實現音訊 → 文字 → LLM → 音訊的串流。
  • 提供者無關 – 透過環境變數連接任何支援的 ASR、LLM 或 TTS 服務;程式碼使用 liteLLM 包裝器處理 LLM。
  • 通話整合 – 提供 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,建構四個容器:
    • bolna-app – 核心編排伺服器
    • twilio-appplivo-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 – 您可自由使用、修改與重新分發程式碼。

相關

  • 專案
  • 專案
  • 專案
  • 專案
  • 專案