文章目录
Toggle背景
2025年1月21日,豆包实时语音大模型在豆包App(7.2.0 新春版)全量开放,引发了广泛关注。这一语音交互体验,与OpenAI公布的GPT-4o模型实时语音功能体验类似,未来拥有广阔的应用前景。
因此,本章我们深入了解豆包实时语音大模型的使用过程,并分析其背后的实现原理。
目标
基于豆包开源的Github代码,在本地搭建一个实时语音大模型,并体验其效果。
搭建过程
豆包大模型的背后支持团队 火山引擎 提供了开源代码Demo,我们基于该项目进行相关部署实践。
1. 拉取代码
git clone https://github.com/volcengine/rtc-aigc-demo
2. 注册账号
访问火山引擎官网(https://www.volcengine.com/) ,注册账号并登录。
说明:
首次注册火山引擎账号并使用,需要进行实名认证,按照官网提示完成即可。
3. 准备工作
3.1 获取API Key
说明:
- 火山引擎API密钥分主账号和子账号,一般为了安全情况下,使用子账号。
- 本例中优先跑通流程,所以安全性要求不高,使用主账号减少操作步骤。
- 点击继续后,使用手机获取验证码,即可完成API Key创建。
3.2 开通 RTC
服务(获取AppID和AppKey)
-
访问火山引擎控制台的
实时音视频
https://console.volcengine.com/rtc/guide
说明:
- 默认情况下,开通RTC服务后,会自动创建一个默认应用,本例中使用默认应用。
- 如果需要创建新应用,则需要填写应用名称、应用描述、应用类型、应用场景、应用权限等信息。
- 获取应用AppID和AppKey:复制默认应用的
AppID和AppKey
,后续配置中需要使用。
3.3 获取临时Token
说明:
RoomId
可以自定义,本例中命名为my_demo_room
UserId
可以自定义,本例中命名为my_demo_user
- 获取临时Token后,复制Token,后续配置中需要使用。
3.4 开通 ASR
与 TTS
服务服务
- 访问火山引擎控制台的
语音技术
https://console.volcengine.com/speech/app - 创建应用:点击左侧
应用管理
->创建应用
- 根据提示,填写应用名称、应用简介,勾选语音合成、流式语音识别服务。
- 创建应用后,获取应用的
APP ID
,后续配置中需要使用。
3.5 开通 火山方舟2.0模型
由于后续对话中,需要使用到大模型,我们可以按需使用第三方的大模型,也可以使用火山方舟提供的模型。
以下是火山方舟提供的模型开通方式:
-
访问火山引擎控制台的
火山方舟
https://console.volcengine.com/ark
说明:
此处按照官方文档,我们选择了Doubao-pro-4k
模型,读者可按需选择配置。
3.6 配置策略
说明:
在火山引擎官网文档中,提到该角色名必须为VoiceChatRoleForRTC
。
4. 修改配置
4.1 配置前端页面参数
代码路径:src/config/config.ts
export class ConfigFactory {
BaseConfig = {
/**
* @note 必填, RTC AppId 可于 https://console.volcengine.com/rtc/listRTC 中获取。
*/
AppId: '6793xxxxxxx',
/**
* @brief 非必填, 按需填充。
*/
BusinessId: undefined,
/**
* @brief 必填, 房间 ID, 自定义即可。
*/
RoomId: 'my_demo_room',
/**
* @brief 必填, 当前和 AI 对话的用户的 ID, 自定义即可。
*/
UserId: 'my_demo_user',
/**
* @brief 必填, RTC Token, 由 AppId、RoomId、UserId、时间戳等等信息计算得出, 可于 https://console.volcengine.com/rtc/listRTC 列表中
* 找到对应 AppId 行中 "操作" 列的 "临时Token" 按钮点击进行生成, 用于本地 RTC 通信进房鉴权校验。
* @note 生成临时 Token 时, 页面上的 RoomId / UserId 填的与此处的 RoomId / UserId 保持一致。
* 正式使用时可通参考 https://www.volcengine.com/docs/6348/70121 通过代码生成 Token。
*/
Token: '0016793234865fxxxxxx',
/**
* @brief 必填, TTS(语音合成) AppId, 可于 https://console.volcengine.com/speech/app 中获取, 若无可先创建应用。
* @note 创建应用时, 需要选择 "语音合成" 服务, 并选择对应的 App 进行绑定。
*/
TTSAppId: '67884xxxx',
/**
* @brief 必填, ASR(语音识别) AppId, 可于 https://console.volcengine.com/speech/app 中获取, 若无可先创建应用。
* @note 创建应用时, 需要按需根据语言选择 "流式语音识别" 服务, 并选择对应的 App 进行绑定。
*/
ASRAppId: '67884xxxx',
};
说明:
AppId
对应3.2 开通RTC服务
中获取的AppId
RoomId
对应3.3 获取临时Token
中获取的RoomId
UserId
对应3.3 获取临时Token
中获取的UserId
Token
对应3.3 获取临时Token
中获取的Token
TTSAppId
、ASRAppId
对应3.4 开通TTS服务
中获取的APP ID
4.2 配置后端服务参数
代码路径:Server/app.js
/**
* @notes 在 https://console.volcengine.com/iam/keymanage/ 获取 AK/SK
*/
const ACCOUNT_INFO = {
/**
* @notes 必填
*/
accessKeyId: 'AKLTMmM3YTxxxx',
/**
* @notes 必填
*/
secretKey: 'TVRWa04yxxxxx',
/**
* @notes 非必填, 主账号无须传入, 子账号须传, 获取方式可参考
* https://www.volcengine.com/docs/6348/1315561 中的 步骤 4-使用子账号调用智能体接口 一节
*/
// sessionToken: 'Your SessionToken',
}
说明:
accessKeyId
对应3.1 获取API Key
中获取的accessKeyId
secretKey
对应3.1 获取API Key
中获取的secretKey
4.3 配置大模型
代码路径:src/config/common.ts
/**
* @brief 豆包模型的 ID
* @note 具体的模型 ID 请至 https://console.volcengine.com/ark/region:ark+cn-beijing/endpoint 参看/创建
* 模型 ID 即接入点 ID, 在上述链接中表格内 "接入点名称" 列中, 类似于 "ep-2024xxxxxx-xxx" 格式即是模型 ID。
*/
export const ARK_V3_MODEL_ID: Partial<Record<AI_MODEL, string>> = {
[AI_MODEL.DOUBAO_LITE_4K]: '************** 此处填充方舟上的模型 ID *************',
[AI_MODEL.DOUBAO_PRO_4K]: 'ep-xxxxx',
[AI_MODEL.DOUBAO_PRO_32K]: '************** 此处填充方舟上的模型 ID *************',
[AI_MODEL.DOUBAO_PRO_128K]: '************** 此处填充方舟上的模型 ID *************',
[AI_MODEL.VISION]: '************** 此处填充方舟上的模型 ID *************',
// ... 可根据所开通的模型进行扩充
};
说明:
ARK_V3_MODEL_ID
对应3.5 开通火山方舟2.0模型
中获取的接入点
5. 准备运行环境
5.1 安装nodejs
- 访问https://nodejs.cn/download/
- 按照页面提示下载Node.js到本地后进行安装
5.2 安装yarn
安装yarn的教程网上很多,这里不详细展开,只展示Mac下的命令,请读者按需自行搜索。
brew install yarn
6. 运行代码
6.1 运行后端服务
# 切换至代码路径下的Server目录
cd Server
# 安装依赖
yarn
安装完毕上述依赖后,执行以下命令,运行后端服务。
# 运行后端服务
node app.js
6.2 运行前端服务
新创建一个terminal,执行以下命令,运行前端服务。
# 切换至代码根目录
# 运行前端服务
yarn dev
体验效果
启动前端页面后,浏览器会自动打开http://localhost:3000/
,点击通话
按钮,即可体验实时语音大模型。
体验感受:
- 整体体验流畅,对话沟通非常流畅,AI的语音比较自然。
- 可以进行多轮对话,不需要通过类似"小爱同学"的唤醒词来触发对话,这一点未来在智能问诊、智能客服等场景中,可以大大提升用户体验。
- 对话过程中,可以随时打断AI的回答。(打断效果还有微小瑕疵,需要声音大一点才可以打断)
总体来说,豆包大模型的实时语音体验非常流畅,已经可以媲美OpenAI的GPT-4o模型实时语音体验。
人工智能的进一步落地应用,值得期待。
示例代码解读
1. 技术原理
说明
以上技术框架图来源于火山引擎官方文档,读者可参考https://www.volcengine.com/docs/6348/1310537 查看。
2. 客户端
(待补充)
3. 服务端
(待补充)
总结
- 豆包大模型提供了实时语音功能,火山引擎官方提供了开源代码Demo,可以快速本地部署体验
- 部署方法:
-
- 注册火山引擎账号,开通RTC、TTS、ASR、火山方舟2.0模型服务
-
- 在代码中配置AppId、RoomId、UserId、Token、TTSAppId、ASRAppId等参数
-
- Demo代码是基于Node.js实现,需要安装nodejs、yarn
-
- 依赖安装完毕后,按照Readme中命令分别启动后端服务和前端页面即可
-
- 体验感受:
- 整体体验流畅,对话沟通非常流畅,AI的语音比较自然。
- 可以进行多轮对话,不需要通过类似"小爱同学"的唤醒词来触发对话,这一点未来在智能问诊、智能客服等场景中,可以大大提升用户体验。
- 对话过程中,可以随时打断AI的回答。(打断效果还有微小瑕疵,需要声音大一点才可以打断)
- 总体来说,豆包大模型的实时语音体验非常流畅,已经可以媲美OpenAI的GPT-4o模型实时语音体验。
- 人工智能的进一步落地应用,值得期待。