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

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • 项目