本文介绍了一个基于LiveKit WebRTC的代理框架,用于构建实时、可编程的服务器端参与者,能够处理或生成音频、视频和数据流。该框架包括多种插件,如语音转文本(STT)和文本转语音(TTS)等,与LiveKit服务器无缝集成,无需额外排队基础设施。当前处于开发者预览模式,API可能变动。代理通过pip安装,并可通过CLI接口运行,支持加入特定的聊天室。此外,提供了一个名为“playground”的Web前端用于简化代理的构建和测试。框架允许工作线程管理多个代理实例,并通过SIGTERM信号安全地终止工作线程。特定插件可能需要下载模型文件以使用。项目源码位于GitHub上。
项目简介
代理框架设计用于构建在服务器上运行的实时、可编程参与者。轻松访问
LiveKit WebRTC 会话并处理或生成音频、视频和数据流。该框架包括用于常见工作流程的插件,例如语音活动检测和语音转文本。代理与 LiveKit 服务器无缝集成,将作业排队和调度责任卸载给它。这样就不需要额外的排队基础设施了。在本地计算机上开发的代理代码在部署到生产中的服务器时,可以扩展以支持数千个并发会话。
此 SDK 当前处于开发者预览模式,尚未准备好用于生产。在此期间,将会出现错误,API 可能会发生变化。
安装
要安装核心代理库,请执行以下操作:
·
pip install livekit-agents
代理包括一组预构建的插件,可以更轻松地将代理组合在一起。这些插件涵盖了常见任务,例如将语音转换为文本,反之亦然,以及在生成式 AI 模型上运行推理。您可以按如下方式安装插件:
·
pip install livekit-plugins-deepgram
以下插件现已推出:
Plugin
|
Features
|
livekit-plugins-deepgram
|
STT
|
livekit-plugins-elevenlabs
|
TTS
|
livekit-plugins-google
|
STT
|
livekit-plugins-nltk
|
Utilities for working with text
用于处理文本的实用程序
|
livekit-plugins-openai
|
Dalle 3, STT, TTS
从 3, STT, TTS
|
livekit-plugins-silero
|
VAD
|
概念
·
代理:定义可编程服务器端参与者的工作流的函数。这是您的应用程序代码。
·
Worker:负责管理 LiveKit 服务器作业队列的容器进程。每个工作线程能够同时运行多个代理。
·
插件:一个库类,用于执行来自特定提供程序的特定任务,例如语音转文本。代理可以将多个插件组合在一起以执行更复杂的任务。
运行代理
该框架公开一个 CLI 接口来运行代理。若要开始,需要设置以下环境变量:
·
LIVEKIT_URL
·
LIVEKIT_API_KEY
·
LIVEKIT_API_SECRET
运行工作线程
这将启动工作线程并等待用户连接到您的 LiveKit 服务器:
·
python my_agent.py start
将 Playground 用于代理 UI
为了简化构建和测试代理的过程,我们开发了一个名为“playground”的多功能 Web 前端。您可以使用或修改此应用程序以满足您的特定要求。它还可以作为完全自定义代理应用程序的起点。
·
Hosted playground 托管游乐场
·
Source code 源代码
·
Playground docs Playground 文档
加入特定聊天室
要加入已处于活动状态的 LiveKit 聊天室,您可以使用以下 simulate-job 命令:
·
python my_agent.py simulate-job --room-name <my-room>
我运行代理时会发生什么?
当您按照上述步骤运行代理时,将启动一个工作线程,该工作线程将打开与 LiveKit 服务器实例(由 your LIVEKIT_URL 定义并使用访问令牌进行身份验证)的经过身份验证的 WebSocket 连接。
此时实际上没有代理在运行。相反,工作线程正在等待 LiveKit 服务器为其分配作业。
创建聊天室时,服务器会通知其中一个已注册的工作人员有关新作业的信息。被通知的工人可以决定是否接受它。如果工作人员接受作业,工作人员将把你的代理实例化为参与者,并让它加入房间,在那里它可以开始订阅轨道。一个工作线程可以同时管理多个代理实例。
如果通知的工作人员在预定的超时期限内拒绝作业或未接受作业,则服务器会将作业请求路由到另一个可用的工作人员。
当我 SIGTERM 工人时会发生什么?
编排系统专为生产用例而设计。与典型的 Web 服务器不同,代理是一个有状态程序,因此在管理任何活动代理时不能终止工作线程非常重要。
在工作线程上调用 SIGTERM 时,工作线程将向 LiveKit 服务器发出信号,表明它不再需要额外的作业。它还将自动拒绝在收到服务器信号之前通过的任何新作业请求。工作线程在管理连接到房间的任何代理时将保持活动状态。
下载模型文件
某些插件需要先下载模型文件才能使用。若要下载代理的所有必要模型,请执行以下命令:
·
python my_agent.py download-files
如果您正在开发自定义插件,则可以通过在插件类中实现方法 download_files 来集成此功能:
·
1. class MyPlugin(Plugin):
2. def __init__(self):
3. super().__init__(__name__, __version__)
4.
5. def download_files(self):
6. _ = torch.hub.load(
7. repo_or_dir="my-repo",
8. model="my-model",
9. )
项目链接
https://github.com/livekit/agents
出自:https://mp.weixin.qq.com/s/cGdmd-0Mn6TMsQ9pAbpQzw
本文档由网友提供,仅限参考学习,如有不妥或产生版权问题,请联系我们及时删除。
客服请加微信:skillupvip