跳到主要内容

快速开始

本章将说明如何使用 RustPBX 搭建一个语音智能体。

前期准备

在开始之前,需要准备好以下内容:

运行环境

  • Docker:用于运行 RustPBX 服务
  • Go 编译器:用于运行客户端代码

云服务 API Key

这里我们以阿里云作为示例。

你需要开通阿里云百炼 并创建 API Key,会用到以下服务:

信息
  • 我们还支持腾讯云和 Deepgram 的 TTS 和 ASR 服务。
  • 你可以选择任何兼容 OpenAI API 的大语言模型服务。

启动 RustPBX 服务

我们需要创建一个配置文件,然后使用 Docker 启动 RustPBX。

创建配置文件

在工作目录创建 config.toml 配置文件:

cat > config.toml << 'EOF'
http_addr = "0.0.0.0:8080"
log_level = "info"
stun_server = "stun.l.google.com:19302"
recorder_path = "/tmp/recorders"
media_cache_path = "/tmp/mediacache"

[ua]
addr = "0.0.0.0"
udp_port = 13050
EOF

http_addr = "0.0.0.0:8080" 是 RustPBX 的 WebSocket 地址,用于客户端连接。

使用 Docker 启动 RustPBX

运行以下命令,将 your_dashscope_api_key 替换为你的 API Key:

docker run -d \
--name rustpbx \
-p 8080:8080 \
-p 15060:15060/udp \
-p 13050:13050/udp \
-p 20000-30000:20000-30000/udp \
-e DASHSCOPE_API_KEY=your_dashscope_api_key \
-v $(pwd)/config.toml:/app/config.toml \
-v $(pwd)/recordings:/tmp/recorders \
ghcr.io/restsend/rustpbx:latest \
--conf /app/config.toml

下载 SDK

GitHub 下载 RustPBXGo 代码:

git clone https://github.com/restsend/rustpbxgo.git
cd rustpbxgo

RustPBXGo 的 cmd 目录中包含一个示例应用。

我会在下一章代码详解 中详细说明。

启动客户端

运行客户端,将 your_dashscope_api_key 替换为你的 API Key:

go run ./cmd \
--endpoint ws://127.0.0.1:8080 \
--tts aliyun --speaker longyumi_v2 \
--asr aliyun \
--openai-key your_dashscope_api_key \
--model qwen-plus \
--openai-endpoint https://dashscope.aliyuncs.com/compatible-mode/v1 \
--greeting "你好,有什么可以帮你的吗"
参数说明
  • --endpoint:RustPBX WebSocket 地址,在之前创建的 config.toml 中的 http_addr 字段中配置
  • --openai-key:大模型 API Key
  • --model qwen-plus:模型名
  • --openai-endpoint:OpenAI 兼容 API 端点,如果使用其他模型,需要修改成相应的地址。
  • --greeting:欢迎语。

测试语音智能体

现在你可以对着麦克风说话,可以尝试以下问题:

  • "今天天气怎么样?"
  • "讲个笑话"
  • "1+1等于几?"
  • "你是谁?"

架构

RustPBX
RustPBX
UserAgent
UserAgent
SDK
SDK
语音会话
语音会话
通话控制
通话控制
媒体引擎
媒体引擎
TTS 命令
TTS 命令
ASR 事件

ASR 事件
WebRTC Peer
WebRTC Peer
LLM
LLM
ASR
ASR
TTS
TTS
阿里云百炼
阿里云百炼
客户端
客户端
Text is not SVG - cannot display
  1. 客户端创建 WebRTC Peer
  2. 客户端连接到 RustPBX,然后发送 Invite 命令
  3. RustPBX 连接 WebRTC Peer (在第 1 步创建)
  4. 当有语音输入时,RustPBX 会调用 ASR 服务,通过 ASR 事件将识别的文本结果发送到客户端
  5. 客户端使用文本结果请求大模型
  6. 客户端使用 TTS 命令播放大模型回复结果
  7. RustPBX 调用 TTS 服务将文字转换成语音并发送到 WebRTC Peer,然后重复 4-7 步
信息
  • 为了简便,客户端启动了一个 WebRTCPeer。在实际场景中,WebRTC Peer (或 SIP Phone) 会在外部,客户端只负责业务逻辑和大模型交互。

更多内容