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 來使用 純文字 模式。
本地快速上手
- 克隆倉儲 並將
.env.sample→.env複製,填入您計畫使用的提供者(OpenAI、Deepgram、ElevenLabs、Twilio 等)的 API 金鑰。 - Docker-compose –
local_setup/資料夾包含docker-compose.yml,建構四個容器: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 – 您可自由使用、修改與重新分發程式碼。
相關
- 專案
- 專案
- 專案
- 專案
- 專案