OpenAI 和 LiveKit 合作将高级语音转变为 API

LiveKit 和 OpenAI 正在合作,帮助您使用为 ChatGPT 新高级语音功能提供支持的相同技术构建自己的应用程序。

OpenAI 有一个我非常喜欢的理念

让开发者能够使用我们自家应用程序中使用的相同工具和 API。

秉承这一精神,今天,我们宣布 LiveKit 与 OpenAI 建立合作伙伴关系,为您提供工具,让您能够使用为 ChatGPT 全新高级语音功能提供支持的端到端技术来构建自己的应用程序。

我们正在发布一个新的多模态代理 API,它内置了对 OpenAI 全新实时 API 的支持。现在,您可以使用 GPT-4o 构建能够像 ChatGPT 一样实时听取用户并与用户对话的应用程序。

您可以在我们的开源游乐场中开始试验这些新功能,或者查阅我们的指南,开始构建您的第一个实时语音 AI 应用程序。请继续阅读,了解我们如何与 OpenAI 共同设计和构建这个新 API。

高级语音的工作原理


当您使用高级语音时,ChatGPT 不仅能理解您说了什么,还能理解您如何说,并且能够在大约 300 毫秒(人类语音的延迟阈值)内做出回应,表达一系列人类情感。以下是该功能在幕后的工作原理:

高级语音的高级架构图

  1. 用户的语音通过 ChatGPT 应用程序中的 LiveKit 客户端 SDK 捕获。
  2. 他们的语音通过LiveKit Cloud传输到 OpenAI 的语音代理。
  3. 代理将语音提示中继到 GPT-4o。
  4. GPT-4o 运行推理并将语音数据包流式传输回代理。
  5. 代理通过 LiveKit Cloud 将生成的语音中继回用户的设备。

实现上述工作流程需要与您与 ChatGPT 文本交流时使用的传统 HTTP 请求-响应模型不同的架构。

为了在其语音代理和 GPT-4o 之间进行通信,OpenAI 使用了一个 WebSocket,他们现在在实时 API 中将其开放给开发人员。语音代理持续向 GPT-4o 流式传输音频输入,同时同步接收模型的音频输出。

对于服务器到服务器的应用程序,如果几乎没有数据包丢失,WebSocket 就足够了。然而,对于像高级语音这样的最终用户应用程序,我们需要从客户端设备获取音频输入并向其流式传输音频输出。WebSocket 不是最佳选择,因为它处理数据包丢失的方式。绝大多数数据包丢失发生在服务器和客户端设备之间,而 WebSocket 在 WiFi 或蜂窝网络等有损网络环境中不提供程序控制或干预。数据包丢失会导致更高的延迟和断断续续或模糊不清的音频。

为了克服这一限制,OpenAI 使用了另一个名为 WebRTC 的协议。WebRTC 专为在服务器和客户端之间以超低延迟传输音频而设计。协议实现内置编解码器支持,可根据网络条件调整比特率,并可在大多数平台上使用。然而,直接使用它会带来很多复杂性和扩展挑战。

LiveKit 是开源基础设施,简化了 WebRTC,而LiveKit Cloud是一个全球服务器网络,经过优化,可在大规模范围内以最低的延迟可靠地路由音频。

为了从最终用户的设备发送和接收音频,OpenAI 将 LiveKit 客户端 SDK 集成到 ChatGPT 应用程序中。在后端,另一个专为在服务器环境中使用 WebRTC 而设计的 LiveKit SDK 接收来自用户的流式音频并向他们流式传输音频。用户和代理都通过 LiveKit Cloud 使用 WebRTC 相互连接。

将 LiveKit 与 OpenAI 的实时 API 结合使用


今天,我们正在代理框架中推出一个新的 API 以及新的前端钩子和组件,使任何人都可以轻松构建像高级语音这样的产品。

后端


新的多模态代理 API 适用于 Python 和 Node,旨在完全封装 OpenAI 的实时 API,抽象出原始的线路协议,并提供一个干净的“直通”接口到 GPT-4o。

MultimodalAgent 类动态处理流式文本和音频模态。您可以将任何一种模态作为输入发送,并以任何一种模态接收输出。使用语音时,API 会在用户的设备上播放时自动将文本转录与音频进行时间对齐。这对于字幕等功能非常有用。如果您的用户在播放期间通过说话打断 GPT-4o,API 将检测到并与 GPT-4o 同步状态,以确保其上下文窗口回滚到中断点。

所有实时 API 参数,如语音选择、温度和轮次检测配置,都得到透明支持。关于轮次检测,我们很快将提供与 OpenAI 相同的默认代理端轮次检测,并公开更多设置。

MultimodalAgent 还与代理框架的现有功能集成

  • 缓冲播放。GPT-4o 生成音频的速度快于播放速度。我们的 SDK 会自动缓冲、流式传输、处理用户中断,并以正确的时间播放音频。
  • 函数调用。您可以定义带参数的函数,其调用触发器以自然语言指定。代理框架会将 GPT-4o 工具调用映射到您的函数,并以适当的参数调用它。
  • 负载均衡。当您部署代理时,它们会向 LiveKit 服务器注册。一旦您的用户连接,LiveKit 服务器将调度一个附近的代理,监控其健康状况,并处理故障转移和重新连接。
  • 集成电话功能。LiveKit 拥有一个与代理框架集成的电话堆栈。一旦您通过 Twilio 或 Telynx 等提供商配置并开通电话号码,您的用户就可以通过电话与 GPT-4o 对话。

这是一个使用 Python 中的 MultimodalAgent 的简单示例

from livekit.agents import MultimodalAgent, AutoSubscribe, JobContext, WorkerOptions, WorkerType, cli
from livekit.plugins.openai.realtime import RealtimeModel

async def entrypoint(ctx: JobContext):
    await ctx.connect(auto_subscribe=AutoSubscribe.AUDIO_ONLY)
    agent = MultimodalAgent(
        model=RealtimeModel(
            instructions="...",
            voice="alloy",
            temparature=0.8,
            modalities=["text", "audio"],
        )
    )
    agent.start(ctx.room)

if __name__ == "__main__":
    cli.run_app(WorkerOptions(
	    entrypoint_fnc=entrypoint, 
	    worker_type=WorkerType.ROOM
	  ))
负载均衡直接内置于 LiveKit 的媒体服务器中,因此您可以在本地主机、自托管部署或 LiveKit Cloud 上以完全相同的方式运行此代理。

前端


在前端,我们有新的钩子、移动组件和可视化工具,可以简化将客户端应用程序连接到代理。以下是 NextJS 中的一个示例

import { LiveKitRoom, RoomAudioRenderer, BarVisualizer, useVoiceAssistant } from '@livekit/components-react'

function MultimodalAgent() {
  const { audioTrack, state } = useVoiceAssistant()
  return (
    <div>
      <BarVisualizer trackRef={audioTrack} state={state} />
    </div>
  )
}

export default function IndexPage({ token }) {
	return (
		<LiveKitRoom serverUrl={process.env.NEXT_PUBLIC_LIVEKIT_URL} connect={true} audio={true} token={token}>
			<MultimodalAgent />
		  <RoomAudioRenderer />
		</LiveKitRoom>
	)
}

有关上面在生产环境中运行的代码示例,请查看 LiveKit 的主页或开源的实时 API 游乐场。我们还有一个更详细的端到端指南,介绍如何使用多模态代理 API 构建自己的代理。

用例


随着高级语音功能现在作为 API 提供,我们将看到开发者构建令人惊叹的 AI 原生应用程序。GPT-4o 在多种模态上的联合训练显著降低了推理延迟,并赋予其理解和以人类情感跨语言进行交流的能力。我认为我们将立即看到这项新技术应用于以下几个领域:

  • 客户支持和远程医疗。语音(通过电话)是这些行业的默认模式,拥有一个灵活、更善解人意的自动化服务提供商将是对现有电话树和 IVR 系统的一次重大用户体验升级。
  • 语言学习。学习一门新语言最快的方法是沉浸其中——世界各地的语言在结构和说话方式上都有所不同。在此之前,AI 无法近似母语使用者。
  • 视频游戏 NPC。想象一下,游戏世界中丰富、动态的故事情节,通过您实时遇到并交谈的类人角色变得生动起来。
  • 治疗和冥想。我们的内在思想是人类体验中最典型的方面之一。能够——在不担心评判的情况下——与 AI 互动来练习心理健康,将对社会产生广泛的积极影响。

无论您是使用 OpenAI 的实时 API 和 LiveKit 开展上述任何一项或其他想法,我们都乐意听取您的意见并尽力提供帮助。欢迎加入我们的Slack 社区打个招呼,或者在 X 上私信/提及@livekit。我们迫不及待地想看到您的作品!