LiveKit Agents:实时语音 AI 助手开发框架
大家好,我是何三,独立开发者
最近在研究实时语音交互技术,发现了一个非常强大的开源框架——LiveKit Agents。这个框架专门用于构建实时的、可编程的语音 AI 助手,能够听、看、理解,并且支持多种 AI 模型的灵活集成。今天就来和大家分享一下这个框架的核心特性和使用方法。
为什么需要 LiveKit Agents?
在传统的语音助手开发中,我们需要自己处理很多复杂的细节:音频采集、语音识别(STT)、大语言模型(LLM)调用、语音合成(TTS)、音频播放等等。而且要实现实时交互,还需要考虑延迟、并发、状态管理等问题。
LiveKit Agents 就是为了解决这些问题而生的。它提供了一个完整的框架,让我们可以专注于业务逻辑,而不用操心底层的技术细节。
核心概念
LiveKit Agents 有几个核心概念需要理解:
Agent:这是基于 LLM 的应用程序,包含了具体的指令和工具。你可以把它理解成一个智能助手,它有自己的"人设"和"能力"。
AgentSession:这是 Agent 的容器,负责管理与最终用户的交互。一个 Session 可以包含多个 Agent,实现多 Agent 协作。
AgentServer:这是主进程,负责协调任务调度,并为用户会话启动 Agent。
entrypoint:这是交互会话的入口点,类似于 Web 服务器中的请求处理器。
工作原理
LiveKit Agents 的工作流程其实很简单:
- 用户通过 Web 应用、移动应用或电话接入
- LiveKit Server 处理实时音视频传输
- Agent Framework 接收音频流,进行语音活动检测(VAD)
- 将语音转换为文本(STT)
- LLM 理解用户意图并生成回复
- 将回复文本转换为语音(TTS)
- 通过 LiveKit Server 将语音发送给用户
整个过程是实时完成的,通常延迟低于 500ms,用户体验非常流畅。
代码实战
让我们来看一个简单的例子,创建一个能够查询天气的语音助手。
首先安装依赖:
pip install "livekit-agents[openai,silero,deepgram,cartesia,turn-detector]~=1.0"
然后创建一个简单的语音助手:
from livekit.agents import (
Agent,
AgentServer,
AgentSession,
JobContext,
RunContext,
cli,
function_tool,
inference,
)
from livekit.plugins import silero
@function_tool
async def lookup_weather(
context: RunContext,
location: str,
):
"""查询天气信息"""
return {"weather": "晴朗", "temperature": 25}
server = AgentServer()
@server.rtc_session()
async def entrypoint(ctx: JobContext):
session = AgentSession(
vad=silero.VAD.load(),
stt=inference.STT("deepgram/nova-3", language="multi"),
llm=inference.LLM("openai/gpt-4.1-mini"),
tts=inference.TTS("cartesia/sonic-3", voice="9626c31c-bec5-4cca-baa8-f8ba9e84c8bc"),
)
agent = Agent(
instructions="你是一个友好的语音助手,由 LiveKit 构建。",
tools=[lookup_weather],
)
await session.start(agent=agent, room=ctx.room)
await session.generate_reply(instructions="问候用户并询问他们今天过得怎么样")
if __name__ == "__main__":
cli.run_app(server)
这个例子中,我们定义了一个 lookup_weather 工具函数,Agent 可以调用这个函数来查询天气信息。当用户问"今天天气怎么样"时,Agent 会自动调用这个函数,并将结果返回给用户。
多 Agent 协作
LiveKit Agents 还支持多 Agent 协作,可以实现更复杂的场景。比如一个 Agent 负责收集用户信息,另一个 Agent 负责讲故事:
class IntroAgent(Agent):
def __init__(self) -> None:
super().__init__(
instructions="你是一个讲故事的人。你的目标是从用户那里收集一些信息,让故事更加个性化和有趣。"
"询问用户的姓名和来自哪里"
)
async def on_enter(self):
self.session.generate_reply(instructions="问候用户并收集信息")
@function_tool
async def information_gathered(
self,
context: RunContext,
name: str,
location: str,
):
"""当用户提供了必要信息时调用"""
context.userdata.name = name
context.userdata.location = location
story_agent = StoryAgent(name, location)
return story_agent, "让我们开始讲故事吧!"
class StoryAgent(Agent):
def __init__(self, name: str, location: str) -> None:
super().__init__(
instructions=f"你是一个讲故事的人。使用用户的信息让故事个性化。"
f"用户的名字是 {name},来自 {location}"
)
这样,IntroAgent 收集完用户信息后,会自动切换到 StoryAgent,开始讲故事。
主要特性
LiveKit Agents 有很多强大的特性:
灵活的集成:可以自由组合不同的 STT、LLM、TTS 和 Realtime API,满足不同的使用场景。
内置任务调度:内置了任务调度和分发功能,通过 dispatch API 连接最终用户和 Agent。
丰富的 WebRTC 客户端:支持所有主流平台的 SDK,包括 Web、iOS、Android 等。
电话集成:可以与 LiveKit 的电话栈无缝集成,让 Agent 能够拨打电话或接听电话。
数据交换:支持 RPC 和其他数据 API,与客户端无缝交换数据。
语义轮次检测:使用 Transformer 模型检测用户何时说完话,减少打断。
MCP 支持:原生支持 MCP,可以轻松集成 MCP 服务器提供的工具。
内置测试框架:可以编写测试并使用 judges 确保 Agent 的性能符合预期。
完全开源:完全开源,可以在自己的服务器上运行整个技术栈。
应用场景
LiveKit Agents 可以应用在很多场景中:
智能客服助手:24/7 在线客服,自动回答常见问题,提升客户满意度。
智能家居语音助手:控制家电设备,查询信息,提供个性化服务。
在线教育辅导:个性化学习辅导,实时答疑,提升学习效率。
健康咨询助手:健康问答、症状分析、用药提醒等医疗辅助服务。
游戏娱乐 NPC:游戏中的智能 NPC,提供沉浸式交互体验。
总结
LiveKit Agents 是一个非常强大的实时语音 AI 助手开发框架。它提供了完整的解决方案,让我们可以快速构建高质量的语音交互应用。
核心优势包括: - 开箱即用的完整框架 - 灵活的模型集成能力 - 低延迟的实时交互 - 支持多 Agent 协作 - 完全开源,可私有部署
如果你正在开发语音交互应用,LiveKit Agents 绝对值得一试。它的文档完善,社区活跃,上手难度也不高。
推荐大家去 GitHub 上看看这个项目,亲自体验一下它的强大功能。相信你会发现,构建实时语音 AI 助手其实并没有想象中那么难。