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 – 您可以自由使用、修改和重新分发代码。
相关
- 项目
- 项目
- 项目
- 项目
- 项目