<!-- Canonical: https://temp.tokenmap.com.cn/research/realtime-voice-assistant -->

[返回全部研究](/research)

词元映射研究工程实践

# 实时语音助手的架构与实现

效果示例：

[[7月24日(1).mp4](https://cdn.tokenmap.com.cn/paper/originals/realtime-voice-assistant/QcGAbjcHnoGg7MxB6jBcpvEvnud-03fd75d0f470.mp4)](https://cdn.tokenmap.com.cn/paper/originals/realtime-voice-assistant/QcGAbjcHnoGg7MxB6jBcpvEvnud-03fd75d0f470.mp4)

手把手教大家在【电脑网页上实现ai实时语音】的搭建：

![](/article-media/research/FxPvb58g7omwz1x81SMcYQoonjf.png)

```
本项目可以在服务器上长期运行，也可以在个人电脑（windows、mac）上进行搭建、体验.本文主要以windows电脑为例
```

## 1.安装node。

1. 1. 如果要在服务器上运行，则可以使用命令行拉取：

```
sudo apt install nodejs npm
```

1. 1. 如果要在自己电脑上运行，下载地址：https://nodejs.org/zh-cn/download，选择你的电脑系统后，点击安装程序按钮开始下载。

![](/article-media/research/Yki1bqTrToBqUQxfQHWcGFK1nyg.png)

1. 1. 安装过程与安装其他软件类似，注意尽量不要安装在C盘即可。
2. 2. 安装可能会有点慢，安装过程中继续往下走，不用刻意等安装完成。
3. 3. 安装完成后会有【Type ENTER to exit:】的字样。

![](/article-media/research/IIr6b54v9ohdyZxuqHtchIa5n6g.png)

## 2.下载及运行项目。

### 2.1项目介绍

项目分为两部分：

1. 1. 声网token的获取、更新（后端程序）
2. 2. 网页（前端）

通过下方下载链接下载项目，项目下载时可以先继续往下走，后续会用到。

```
项目下载地址：
https://github.com/15093083169/Agora_AI/archive/refs/heads/main.zip
```

### 2.2注册声网账号，前期准备

1. 1. 前往https://console.shengwang.cn，进行注册、登录、个人认证。
2. 2. 认证完成后，前往https://console.shengwang.cn/settings/projects，创建新建个项目

![](/article-media/research/MhWkbo10DouQlQx6QwqcYCrBnig.png)

```
项目类型选择通用项目
项目名称取一个方便区分的即可。
场景标签选择【其他】
鉴权机制选择【安全模式：app id +token】
开启【开通RTM】
开启【开通即时通讯IM】
```

1. 1. 创建完成后，前往https://console.shengwang.cn/product/ConversationAI?tab=config**，**点击开通服务，在弹出窗口点确认。

![](/article-media/research/ZpJpbKUSpobYoHxIx2TcvzvrnIb.png)

![](/article-media/research/Tc1sbNvtFoKiQtxJ3ijcRc4KnOh.png)

### 2.3后端程序部署、运行。（声网token获取，非必须）

```
如果是为了尝鲜，可以跳过该流程，直接查看2.4，后面会讲如何获取有效期为24小时的的token。
如果是为了长期使用，建议走该流程。
```

1. 1. 前往https://console.shengwang.cn/overview，选择你的项目，复制APP ID和 主要证书的值。![](/article-media/research/E3PdbKIrGoXbfoxWr5NcHqJPnYg.png)
2. 2. 解压【步骤3.1时下载的项目】，打开项目文件夹，在token文件夹找到里面的.env文件。（.env文件默认无法打开，可以右键点击打开方式，选择记事本即可）

![](/article-media/research/OlLtb3ZXEocWLpxpZf9c2TaEnFc.png)

```
将<your_appid>修改为复制的APP ID的值
将<your_app_Certificate>修改为复制的主要证书的值。
注意: <>也要一起改掉，＝后面只有复制的值。修改后需要保存。
```

![](/article-media/research/JmDebqgTWoIO5exbYJvcEAMfnld.png)

修改前

![](/article-media/research/N9KCb5FpooIBHzxeqsJcX8hjnog.png)

修改后示例，记得保存

1. 1. 运行项目：
   1. a. 打开项目文件夹，进入token文件夹，在地址栏输入cmd，回车。
   2. b.  在弹出的终端中，输入：

   ```
   npm i
   node DemoServer.js
   注意：上面的这是两行，每行输入完成后要按回车键。
   除首次运行外，后续运行，只需要执行第二行命令即可。
   ```

![](/article-media/research/Brakb7dPsoSIk4xoMBlcv1scncd.png)

![](/article-media/research/Ld6ybHv0zoYb7GxttBjcLtefnAg.png)

看到：AgoraSignServer starts at 8081，证明运行成功了。

### 2.4网页（前端）

1. 1. 前往https://console.shengwang.cn/settings/restfulApi，点击添加密钥按钮，添加一个密钥。
   1. a. 添加完成后，客户密钥会有一个下载按钮，下载你的key和密钥。下载后密钥无法再重新获取，请注意妥善保管。
   2. b. 下载后打开如图2，复制客户ID/key和客户密钥/secret的值。

![](/article-media/research/MB2jb0SnAo4n9Mxd7tZcxotbnZf.png)

![](/article-media/research/O4sWb87AmoIEDRx6F8Ic8yX0nBg.png)

1. 1. 前往https://console.shengwang.cn/overview，复制APP ID的值。

![](/article-media/research/HH0VbYo8hobEPgxupIOcjsrGnIg.png)

1. 1. 解压【步骤3.1时下载的项目】，打开项目文件夹，进入到web文件夹，找到.env文件。（.env文件默认无法打开，可以右键点击打开方式，选择记事本即可）

![](/article-media/research/IS5kb2rx3oyrQbxXoL5cwiy5nhd.png)

```
将<your_appid>修改修改为APP ID的值
将<your_client_id>修改为key的值
将<your_client_secret>修改为secret的值
注意: <>也要一起删掉，＝后面只有复制的值。修改后需要保存
```

![](/article-media/research/SX3WbkwP6oOrTlxtEWDc6ni5n8c.png)

修改前

![](/article-media/research/FAYSbhaDworH8wxdP2NcVnANnxd.png)

修改后示例，记得保存

1. 1. 运行项目
   1. a. 进入到web文件夹，在地址栏输入cmd，回车。
   2. b.  在弹出的终端中，输入：

   ```
   npm i
   npm start
   注意：上面的这是两行。每行输入完成后要按回车键。
   除首次运行外，后续运行，只需要执行第二行命令即可。
   ```

   ![](/article-media/research/TWCKbqSbvow08bx8HO8cpSPtnnO.png)

   ![](/article-media/research/RMCHbAZp6o6KyzxJ6DZc45jKnhh.jpg)

   看到：有环境变量已正确配置！证明运行成功了。
2. 2. 运行成功后可打开浏览器，输入localhost:3000,即可访问。

注意不要用微信浏览器，要用系统的浏览器。能够访问后继续往下走。

![](/article-media/research/RVdybJyAJoi2yJxZSXyc74esnBe.png)

## 3.项目配置：

### 3.1声网token

1. 1. 如果你没有按照2.3做，要使用临时token：

   前往https://console.shengwang.cn/overview，临时token生成器，选择产品RTC，频道名写一个方便区分的。

   生成后，复制你获取到的临时token，以及你的频道名。

   输入到【步骤3.4.5打开的网页】的声网token选项卡的临时token输入框中。

![](/article-media/research/T0xxbNV8AowIXAx1fW6c7bwMntd.png)

![](/article-media/research/EvajbO1TqorPOJxAXHIcJSQGnZf.png)

![](/article-media/research/IKhVbUYdkoGGu7xlhPuczN8gn5e.png)

1. 1. 如果你按照2.3做了：那就选择后端获取token。 地址我已经预设过了，如果是放在服务器上的话，要把localhost改为服务器ip或域名。

![](/article-media/research/BOwobjcuOoYM9IxdXRXcXTewnQh.png)

### 3.2llm（大语言模型）

1. 1. 大模型的接入，采用标准化ai的api接入方式。理论上所有平台均可，包括工作流平台、中转站、ai提供商。

![](/article-media/research/HeFpbJbr7oFuhLxZpILc70Ibnbe.png)

1. 1. 本文以火山平台的大模型为例，其他平台填入内容的方式一致，各个平台获取方法可能会有差异。
   1. a. 前往火山方舟https://console.volcengine.com/ark/ ，如果没有使用过的话，需要先进行注册、登录、认证。
   2. b. 登录认证完成后：
      1. i. 前往在线推理，创建推理接入点。 接入点名称方便后续区分即可。模型选择，选择你想使用的模型。（模型的速度会影响语音回复的速度，如果希望更快速，可以选择doubao1.5lite）然后点击右侧的开通模型并接入。创建完成后，复制接入点id的值。

      ![](/article-media/research/SpVhbQnjTofyJzx6POycI5edn1d.jpg)

      ![](/article-media/research/Td1EbNP7SoWqGtxZNL3cq7pEnT0.png)

      这里创建时可能会已经实名认证过了，但是开通按钮仍然置灰，悬停提示请先进行实名认证，需要刷新页面。

      ![](/article-media/research/SvA1bt2XLonWqoxlHT5cekABnAb.png)

      1. i. 前往apikey管理，创建apikey。名称方便后续区分即可。创建完成后，先点击apikey后面的小眼睛，使你能看到apikey的值，然后点击复制。获得apikey的值

      ![](/article-media/research/GOfcbz7kQoh8ayxRhXvc6wLLnjf.png)

      ![](/article-media/research/Ek1Zbc1opoFYqxxLocGcbjrAnUN.png)

      ![](/article-media/research/NFXQb1jOfounV2xSD2LcaBOMn0e.png)
2. 2. 回到我们的项目，将获取到的值输入到对应位置：

   ![](/article-media/research/MT08bSGcIo76wixEpZOcDgELn2g.png)

   ```
   api地址：https://ark.cn-beijing.volces.com/api/v3/chat/completions
   api密钥：前面复制的apikey的值
   模型名称：前面复制的接入点id的值
   系统提示词，填入你的提示词。
   问候语，ai首次打招呼的话术。
   ```

   其他平台接入原理也一致，只要获取到对应的api地址、api密钥、模型名称即可。

### 3.3VAD语音灵敏度参数配置

1. 1. 这些参数是对ai灵敏度的参数配置，默认值是我调试后我认为合适的值。
2. 2. 每个字段具体含义，在项目中也有气泡解释，悬停可以查看具体介绍。

![](/article-media/research/X0O8bdOTAogDdcxs9a5cmjTqn0b.png)

```
人声持续阈值 (ms)：持续检测到人声信号的最小时间长度，人声持续时长超过该数值时视为有声输入，避免误打断。取值120-1200
前缀填充阈值 (ms)：开始新的语音片段所需的最短语音持续时间，避免非常短的声音触发语音活动检测。取值0-5000
静音持续阈值 (ms)：语音结束时的最短静音持续时间，确保短暂的停顿不会过早结束语音片段。取值0-2000
灵敏度：ai识别人声的灵敏度，越低越灵敏，取值0-1
启用优雅打断：启用后，会允许用户说话时，打断ai说话
```

### 3.4tts(文本转语音) 我预设好了【火山引擎、腾讯云】的tts模板，可以按照你想用的平台来配置。3.4.1和3.4.2任选其一即可。

#### 3.4.1火山引擎：

![](/article-media/research/OjG9blx2CoIVOGxWWLvcDy3VnVh.png)

1. 1. 前往：https://console.volcengine.com/speech，登录认证。
2. 2. 在语音合成大模型板块，创建个应用。应用名称方便区分即可，选择服务中，要勾选语音合成大模型，语音合成。
3. 3. 侧边点击语音合成，获取【APPID、AccessToken、ClusterID】的值。
4. 4. 语音类型，可以前往https://www.volcengine.com/product/tts，能力体验板块进行试听，选择好合适的音色后，可以前往https://www.volcengine.com/docs/6561/1257544找到你选择的音色所对应的voice\_type的值。

![](/article-media/research/VNOnb9bXTo1IivxzN4jczNiLnCV.png)

![](/article-media/research/La06by55LoaKzbxXrIQcYTRvnTh.png)

![](/article-media/research/FkG0bI8eAohFVsxxRGicljwSnMh.png)

1. 1. 把这几个获取到的值，填入到项目中，调整你想要的语速等。保存配置就可以开始体验喽。

#### 3.4.2腾讯tts：

![](/article-media/research/Va58bTU7ToNJPoxTl6gcnn7nnRf.png)

1. 1. 前往https://console.cloud.tencent.com/cam/capi，登录认证。
2. 2. 新建密钥，获取【APPID、SecretId、SecretKey】，下载后密钥无法再重新获取，请注意妥善保管。
3. 3. 语音类型，可以前往https://console.cloud.tencent.com/tts/complexaudio进行试听，选择好合适的音色后，可以前往https://cloud.tencent.com/document/product/1073/92668找到你选择的音色所对应的音色 ID的值。

![](/article-media/research/RrkSbT6CsoLkdTxDKaJc7S0tnYu.png)

![](/article-media/research/OzbbbSxEiofX1Yx5cRqcF3ZGnjf.png)

#### 这些配置完成后，点击保存配置。

## 4.开始体验网页ai语音对话：

我们先点击创建智能体，点击创建智能体成功后。再点击开始对话，即可开启与ai对话内容。

1. 1. 创建智能体，实际是通过声网创建了一个我们与ai对话的通道。这里使用声网的频道连接，会消耗声网资源，所以使用完成后记得点击停止智能体。
   1. a. 声网赠送的有部分免费额度，测试使用时无需担心付费问题。
2. 2. 开始对话相当于请求了我们电脑的麦克风，开始与ai对话。

![](/article-media/research/QyTvb8Gbro2ogexY9oYc8fDZnrg.png)

## 5.接入电话：

将ai语音接入电话的能力，需要对接线路运营商。需要公司资质、服务器、一定的开发能力，以下教程会基于有一定开发能力来讲：

### 5.1接入线路运营商：

以声网官方提供的供应商【小樱桃科技】为例。

#### 5.1.1资质申请：

【小樱桃科技】官网：https://xswitch.cn/，联系【小樱桃科技】进行申请资质以及线路，获取账号密码。

#### 5.1.2接口对接：

1. 1. 获取【小樱桃科技】的token。调用/api/sessions接口。
   1. a. 传参为账号（login）,密码（password），从而获取token。
   2. b. 获取到的token需要放在外呼接口的header里，作为接口外呼时鉴权。
2. 2. 进行外呼。

   ##### 5.1.2.1调用小樱桃/api/agora/callPSTN接口。

   1. a. hearder需要传刚刚获取到的token的值
   2. b. 传参为声网频道（channnel）、主叫号码（cidNumber）、进入声网顺序（dialPhoneFirst）（true，为先呼叫手机，手机接听后才进入声网），被叫号码（destNumber）,声网token(token)

   ##### 5.1.2.2调用声网/join接口。

   1. a. 小樱桃呼出时，我们需要将ai的频道提前准备好。所以在呼出的同时，需要调用声网的创建频道的接口。
   2. b. 声网接口调用示例：

   ```
   curl --request post \
     --url https://api.agora.io/cn/api/conversational-ai-agent/v2/projects/<your_app_id>/join \
     --header 'Authorization: Basic <credentials>' \
     --data '
   {
     "name": "unique_name",
     "properties": {
       "channel": "channel_name",
       "token": "token",
       "agent_rtc_uid": "0",
       "remote_rtc_uids": [
         "*"
       ],
       "asr": {
         "language": "zh-CN"
       },
       "llm": {
         "url": "https://api.xxxx/v1/xxxx",
         "api_key": "xxx",
         "system_messages": [
           {
             "role": "system",
             "content": "You are a helpful chatbot."
           }
         ],
         "greeting_message": "您好，有什么可以帮您？",
         "failure_message": "抱歉，我无法回答这个问题。",
         "max_history": 10,
         "params": {
           "model": "xxxx",
         }
       },
       "tts": {
         "vendor": "vendor_name",
         "params": {
           "key": "xxxx",
           "voice_id": "xxxx",
         }
       }
     }
   }
   '
   ```

   1. a. 声网详细内容可参考声网开发文档：https://doc.shengwang.cn/doc/convoai/restful/get-started/quick-start

#### 5.1.3示例代码

![](/article-media/research/QNfzbOYWOo4zdXxkH6dcA5eEnmf.png)

我已经做好了外呼demo，将小樱桃账号密码，以及声网接口中所需的内容填入代码中，即可开始使用。

本文内容

[1. 安装node。](#original-QkeBdfiesoap5CxIqtlcWq8Xn6d)[2. 下载及运行项目。](#original-M24Td4ixboN8gUxSKKAcMBYDnmd)[2.1 项目介绍](#original-DdzFdGYpWobigrxQSQVc55hgnjb)[2.2 注册声网账号，前期准备](#original-DYibdkiFIoGkRsxBH9PciQ5Pnmb)[2.3 后端程序部署、运行。（声网token获取，非必须）](#original-NQ1adnvBGoewJwx2mD7cvdsan1w)[2.4 网页（前端）](#original-MEYBdm7lXovL28xXMEecz3xKnZg)[3. 项目配置：](#original-SH35dlDYioiU4Qx4SWOcL9fvnte)[3.1 声网token](#original-O8D9dSn3iotdGsxwujQcTclcnSh)[3.2 llm（大语言模型）](#original-Ru73dmblhoo4e3xEifEcNQYBnAh)[3.3 VAD语音灵敏度参数配置](#original-K8n9diRIpojgoGxyJZMcJeWdnfb)[3.4 tts(文本转语音)我预设好了【火山引擎、腾讯云】的tts模板，可以按照你想用的平台来配置。3.4.1和3.4.2任选其一即可。](#original-D2yJdG6pAofO0fxV4fhcINpMnrg)[3.4.1 火山引擎：](#original-BMy9dryxdoeePdxI3pKcu6fgn0b)[3.4.2 腾讯tts：](#original-QwRfdjepCoK0pgxjf60cZ5S0ntg)[这些配置完成后，点击保存配置。](#original-WyP6dX3Ptoig3GxHwlzcUq69nxd)[4. 开始体验网页ai语音对话：](#original-WH9tdOj2noy9CAx6IXxc2FaPnvf)[5. 接入电话：](#original-DYrTdcOIkovk7MxCh9ScCOUXnxg)[5.1 接入线路运营商：](#original-Rs4qd0XC4op923xiBvRcc0JGnwf)[5.1.1 资质申请：](#original-EqHld16VtorqEqxidsicYfP1nye)[5.1.2 接口对接：](#original-KXJNd3mh9oQOdGxBXPxc4LO0nHg)[5.1.2.1 调用小樱桃/api/agora/callPSTN接口。](#original-PqsCdUaIEom32kxvwOTcts0QnwV)[5.1.2.2 调用声网/join接口。](#original-Ejfid5wD2oarlqxEfmzcLT7Sn7f)[5.1.3 示例代码](#original-U382dZnD6o72ZYxCJoacXpmsnzb)

### 一起探讨更多可能

从一个具体的场景开始聊聊。

[咨询合作](/contact?source=%E5%AE%9E%E6%97%B6%E8%AF%AD%E9%9F%B3%E5%8A%A9%E6%89%8B%E7%9A%84%E6%9E%B6%E6%9E%84%E4%B8%8E%E5%AE%9E%E7%8E%B0)

## 继续探索

[全部研究](/research)

[![](/research-media/covers/coding-agent-execution-trajectories-v1.png)

模型实测

### 编程智能体的代码修复轨迹与 Harness 对照

DeepSeek V4 Pro、GLM-5.3 接连更新，豆包推出了 Seed-Evolving，DeepSeek 还发布了自己的 Harness。模型能力在涨，给模型提供工具和执行环境的 Harness 也在进化。](/research/coding-agent-execution-trajectories)

[![](/research-media/covers/deepseek-glm-kimi-task-comparison-v1.png)

模型实测

### DeepSeek、GLM 与 Kimi 的真实任务对比

说实话，现在的大模型已经多到让人有点选择困难了。](/research/deepseek-glm-kimi-task-comparison)

[![](/research-media/covers/doubao-seed-21-pro-engineering-tests-v1.png)

模型实测

### Doubao Seed 2.1 Pro 工程任务实测

6 月 23 日，火山引擎在北京举办 2026 夏季 FORCE 原动力大会，正式发布豆包大模型 2.1。](/research/doubao-seed-21-pro-engineering-tests)