跳到主要内容
返回全部研究

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

效果示例:

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

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

1.安装node。

  1. 1. 如果要在服务器上运行,则可以使用命令行拉取:
sudo apt install nodejs npm
  1. 1. 如果要在自己电脑上运行,下载地址:https://nodejs.org/zh-cn/download,选择你的电脑系统后,点击安装程序按钮开始下载。
  1. 1. 安装过程与安装其他软件类似,注意尽量不要安装在C盘即可。
  2. 2. 安装可能会有点慢,安装过程中继续往下走,不用刻意等安装完成。
  3. 3. 安装完成后会有【Type ENTER to exit:】的字样。

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,创建新建个项目
项目类型选择通用项目
项目名称取一个方便区分的即可。
场景标签选择【其他】
鉴权机制选择【安全模式:app id +token】
开启【开通RTM】
开启【开通即时通讯IM】
  1. 1. 创建完成后,前往https://console.shengwang.cn/product/ConversationAI?tab=config,点击开通服务,在弹出窗口点确认。

2.3后端程序部署、运行。(声网token获取,非必须)

如果是为了尝鲜,可以跳过该流程,直接查看2.4,后面会讲如何获取有效期为24小时的的token。
如果是为了长期使用,建议走该流程。
  1. 1. 前往https://console.shengwang.cn/overview,选择你的项目,复制APP ID和 主要证书的值。
  2. 2. 解压【步骤3.1时下载的项目】,打开项目文件夹,在token文件夹找到里面的.env文件。(.env文件默认无法打开,可以右键点击打开方式,选择记事本即可)
将<your_appid>修改为复制的APP ID的值
将<your_app_Certificate>修改为复制的主要证书的值。
注意: <>也要一起改掉,=后面只有复制的值。修改后需要保存。
修改前
修改后示例,记得保存
  1. 1. 运行项目:
    1. a. 打开项目文件夹,进入token文件夹,在地址栏输入cmd,回车。
    2. b. 在弹出的终端中,输入:
    npm i
    node DemoServer.js
    注意:上面的这是两行,每行输入完成后要按回车键。
    除首次运行外,后续运行,只需要执行第二行命令即可。

看到:AgoraSignServer starts at 8081,证明运行成功了。

2.4网页(前端)

  1. 1. 前往https://console.shengwang.cn/settings/restfulApi,点击添加密钥按钮,添加一个密钥。
    1. a. 添加完成后,客户密钥会有一个下载按钮,下载你的key和密钥。下载后密钥无法再重新获取,请注意妥善保管。
    2. b. 下载后打开如图2,复制客户ID/key和客户密钥/secret的值。
  1. 1. 前往https://console.shengwang.cn/overview,复制APP ID的值。
  1. 1. 解压【步骤3.1时下载的项目】,打开项目文件夹,进入到web文件夹,找到.env文件。(.env文件默认无法打开,可以右键点击打开方式,选择记事本即可)
将<your_appid>修改修改为APP ID的值
将<your_client_id>修改为key的值
将<your_client_secret>修改为secret的值
注意: <>也要一起删掉,=后面只有复制的值。修改后需要保存
修改前
修改后示例,记得保存
  1. 1. 运行项目
    1. a. 进入到web文件夹,在地址栏输入cmd,回车。
    2. b. 在弹出的终端中,输入:
    npm i
    npm start
    注意:上面的这是两行。每行输入完成后要按回车键。
    除首次运行外,后续运行,只需要执行第二行命令即可。
    看到:有环境变量已正确配置!证明运行成功了。
  2. 2. 运行成功后可打开浏览器,输入localhost:3000,即可访问。

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

3.项目配置:

3.1声网token

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

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

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

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

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

3.2llm(大语言模型)

  1. 1. 大模型的接入,采用标准化ai的api接入方式。理论上所有平台均可,包括工作流平台、中转站、ai提供商。
  1. 1. 本文以火山平台的大模型为例,其他平台填入内容的方式一致,各个平台获取方法可能会有差异。
    1. a. 前往火山方舟https://console.volcengine.com/ark/ ,如果没有使用过的话,需要先进行注册、登录、认证。
    2. b. 登录认证完成后:
      1. i. 前往在线推理,创建推理接入点。 接入点名称方便后续区分即可。模型选择,选择你想使用的模型。(模型的速度会影响语音回复的速度,如果希望更快速,可以选择doubao1.5lite)然后点击右侧的开通模型并接入。创建完成后,复制接入点id的值。
      这里创建时可能会已经实名认证过了,但是开通按钮仍然置灰,悬停提示请先进行实名认证,需要刷新页面。
      1. i. 前往apikey管理,创建apikey。名称方便后续区分即可。创建完成后,先点击apikey后面的小眼睛,使你能看到apikey的值,然后点击复制。获得apikey的值
  2. 2. 回到我们的项目,将获取到的值输入到对应位置:
    api地址:https://ark.cn-beijing.volces.com/api/v3/chat/completions
    api密钥:前面复制的apikey的值
    模型名称:前面复制的接入点id的值
    系统提示词,填入你的提示词。
    问候语,ai首次打招呼的话术。

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

3.3VAD语音灵敏度参数配置

  1. 1. 这些参数是对ai灵敏度的参数配置,默认值是我调试后我认为合适的值。
  2. 2. 每个字段具体含义,在项目中也有气泡解释,悬停可以查看具体介绍。
人声持续阈值 (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火山引擎:

  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的值。
  1. 1. 把这几个获取到的值,填入到项目中,调整你想要的语速等。保存配置就可以开始体验喽。

3.4.2腾讯tts:

  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的值。

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

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

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

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

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示例代码

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