LiveKit Agents:基于WebRTC的实时语音视频AI Agent框架(9.9k Star)

LiveKit Agents:基于WebRTC的实时语音视频AI Agent框架(9.9k Star)

导读

当我们说"AI Agent"时,大多数人想到的是文本聊天框里的对话。但如果Agent能像真人一样加入一场视频通话——听你说话、看你的屏幕、实时回应——交互方式会有显著变化。

LiveKit Agents是一个基于WebRTC的开源Python框架,让AI Agent以"房间参与者"的身份加入实时音视频会话。框架处理了实时语音AI的核心难题:音频流经STT→LLM→TTS管线的流式传输、用户打断的检测与处理、对话轮次的语义判断、多Agent之间的交接。目前GitHub Stars约9.9k,仓库持续活跃,提供64个插件包,发版节奏约为每周一次。

本文将从架构设计、核心能力、插件生态、上手流程四个维度解读这个项目

一、项目概览

———————————————————————————————————————————

维度

信息

仓库地址

https://github.com/livekit/agents

Stars

~9.9k

许可证

Apache 2.0

LiveKit Agents构建在LiveKit开源实时通信平台之上。LiveKit本身提供WebRTC SFU(Selective Forwarding Unit,选择性转发单元,负责在多人通话中高效转发音视频流)服务器、客户端SDK(覆盖Browser、Swift、Android、Flutter、React Native、Rust、Unity、ESP32等平台)和SIP电话网关。Agents框架在此基础上增加了AI Agent的调度、运行和管理能力。

二、架构设计:Agent如何"入会"

四个核心概念

概念

作用

Agent

一个带有指令定义的LLM应用

AgentSession

管理Agent与终端用户交互的容器

entrypoint

会话的入口函数,类似Web框架中的请求处理器

AgentServer

主进程,负责Job调度和Agent启动

工作流程

Agent代码启动后,向LiveKit服务器(自托管或LiveKit Cloud)注册为一个AgentServer进程当有用户进入LiveKit Room时,服务器向AgentServer发起调度请求AgentServer启动一个Job子进程(Job是框架分配给单个用户会话的工作单元)Job中的AgentSession加入Room,成为一个WebRTC参与者Agent通过WebRTC接收用户的音频/视频流,处理后将结果以音频/视频/文本的形式发回

WebRTC保障了在不稳定网络下的通信质量(自适应码率、拥塞控制、自动重连)。Agent与后端服务之间通过HTTP和WebSocket通信。

三种运行模式

# 终端模式:本地音频输入输出,无需外部依赖 python myagent.py console # 开发模式:热重载,连接LiveKit服务器 python myagent.py dev # 生产模式:优化部署 python myagent.py start 

console模式特别适合本地调试——直接在终端用麦克风和Agent对话,不需要配置LiveKit服务器。

三、核心能力

语义轮次检测

实时语音对话中最棘手的问题之一是判断用户是否说完了。常见方案用固定的静音时长阈值(如1.5秒无声则视为说完),但这既慢又不准——用户思考时停顿一下就会被误判为说完。

LiveKit Agents内置了一个基于transformer模型的语义轮次检测器(turn-detector插件),通过理解语义上下文来判断用户是否说完,而不仅仅依赖静音。

自适应打断处理

v1.5.0版本引入了ML模型驱动的打断判断,能区分真正的用户打断和非语义声音(咳嗽、叹气、语气词)。根据发布说明,在500ms重叠语音的条件下达到86%精确率和100%召回率。

同时引入了动态端点检测(Dynamic Endpointing),使用指数移动平均值自适应调整静音阈值,替代固定延迟。

工具调用与MCP支持

Agent可以定义工具函数供LLM调用。框架原生支持MCP(Model Context Protocol),一行代码即可接入MCP工具服务。

from livekit.agents import function_tool, RunContext @function_tool async def lookup_weather(context: RunContext, location: str) -> str:     """查询指定地点的天气"""     # 实现逻辑     return f"{location}的天气是晴天,25°C" 

多Agent交接

支持在一个会话中多个Agent之间切换。例如,一个"引导Agent"负责收集用户信息,完成后将会话交接给"业务Agent"继续处理:

class IntroAgent(Agent):     async def on_enter(self):         self.session.generate_reply(             instructions="请收集用户的姓名和需求"         )     @function_tool     async def information_gathered(         self, context: RunContext, name: str, location: str     ):         """信息收集完毕后调用"""         story_agent = StoryAgent()         return story_agent, "Let's start the story!" 

当工具函数返回另一个Agent实例(可附带交接消息)时,框架自动完成会话交接。

内置测试框架

提供基于LLM Judge的Agent测试方案,可以验证Agent的工具调用行为和回复意图:

async def test_agent():     async with AgentSession(llm=llm) as sess:         result = await sess.run(user_input="我要点一份意面")         result.expect.next_event().is_function_call(name="start_order")         result.expect.next_event().is_message(             role="assistant"         ).judge(llm, intent="确认订单内容") 

四、插件生态:64个插件包

———————————————————————————————————————————

LiveKit Agents通过插件机制集成外部服务。仓库livekit-plugins/目录下包含64个插件包(含服务商集成和工具类插件),安装时按需选择:

pip install "livekit-agents[openai,silero,deepgram,cartesia,turn-detector]~=1.4" 

LLM

OpenAI、Anthropic、Google、Groq、Mistral AI、Fireworks AI、AWS Bedrock、Azure、NVIDIA、xAI、SambaNova、Cerebras、Ultravox。

STT(语音识别)

Deepgram、AssemblyAI、Google、Azure、AWS、Gladia、Soniox、Speechmatics、NVIDIA、Clova、Telnyx、Spitch。

TTS(语音合成)

Cartesia、ElevenLabs、Google、Azure、AWS、LMNT、Rime、Speechify、Murf、Neuphonic、Fish Audio、Sarvam、Telnyx、xAI、Smallest AI、Camb.ai。

VAD与轮次检测

Silero(VAD)、turn-detector(语义轮次检测)。

Avatar(数字人)

Hedra、Bey、Bithuman、Simli、Tavus、Keyframe、LiveAvatar、Anam、AvatarIO、AvatarTalk。

其他

Langchain、FAL、Browser(浏览器操作)、NLTK、Hume(情感分析)、Inworld、Resemble、Hamming(监控)等。

五、上手体验

———————————————————————————————————————————

最小示例

from livekit.agents import Agent, AgentSession, AgentServer, JobContext, RunContext, function_tool from livekit.plugins import openai, silero, deepgram, cartesia @function_tool asyncdef lookup_weather(context: RunContext, location: str) -> str:     """查询天气"""     returnf"{location}: 晴天 25°C" # 创建AgentServer server = AgentServer() @server.rtc_session() asyncdef entrypoint(ctx: JobContext):     agent = Agent(         instructions="你是一个友好的语音助手",         tools=[lookup_weather]     )     session = AgentSession(         stt=deepgram.STT(),         llm=openai.LLM(model="gpt-4.1-mini"),         tts=cartesia.TTS(),         vad=silero.VAD.load()     )     await session.start(agent=agent, room=ctx.room)     await session.generate_reply(         instructions="greet the user and ask about their day"     ) 

也支持简写语法,用字符串指定模型:

session.start(     agent=agent,     stt="deepgram/nova-3",     llm="openai/gpt-4.1-mini",     tts="cartesia/sonic-3" ) 

运行

# 设置环境变量 export LIVEKIT_URL=wss://your-livekit-server export LIVEKIT_API_KEY=your-key export LIVEKIT_API_SECRET=your-secret # 本地终端模式(无需LiveKit服务器) python myagent.py console # 开发模式 python myagent.py dev 

示例项目

仓库提供12个示例:

示例

说明

Starter Agent

基础入门示例

Multi-user push to talk

多用户按键通话

Background audio

背景音频

Dynamic tool creation

动态创建工具

Outbound caller

主动外呼

Structured output

结构化输出

MCP support

MCP工具集成

Text-only agent

纯文本Agent

Multi-user transcriber

多用户转录

Video avatars

视频数字人(Tavus/Hedra/Bithuman等)

Restaurant ordering

餐厅点餐

Gemini Live vision

Gemini视觉实时Agent

六、总结

———————————————————————————————————————————

项目特点:

Agent以WebRTC参与者身份加入Room,继承WebRTC的网络自适应能力(拥塞控制、自动码率调节、断线重连)内置语义轮次检测(transformer模型)和自适应打断处理(v1.5.0,86%精确率/100%召回率)采用Python代码定义Agent行为,支持IDE调试器、断点、单步执行;console模式可在本地终端直接对话测试64个插件包覆盖主流LLM/STT/TTS/Avatar供应商,原生支持MCP和多Agent交接

适合的场景:

需要构建实时语音/视频AI Agent,特别是需要与已有WebRTC通信系统集成的项目需要精细控制打断和轮次检测行为的语音Agent需要多Agent交接的复杂对话流程

Read more

GLM-4.6V-Flash-WEB Web界面使用指南,拖图就出结果

GLM-4.6V-Flash-WEB Web界面使用指南,拖图就出结果 你不需要配置环境、不用写一行推理代码、甚至不用打开终端——只要把一张截图拖进浏览器窗口,几秒钟后,它就能告诉你图里写了什么、画了什么、哪里有问题。这不是未来预告,而是你现在就能在本地跑起来的真实体验。 GLM-4.6V-Flash-WEB 是智谱AI最新开源的轻量级视觉语言模型,专为Web端实时交互而生。它不像某些“实验室模型”那样只存在于论文和Benchmark表格里,而是真正做到了:部署快、启动快、响应快、上手更快。一块RTX 3090,一个浏览器,一次拖拽,结果即刻呈现。 本文不讲训练原理,不列参数表格,不堆技术术语。我们只聚焦一件事:怎么用好它的Web界面?从零开始,到稳定产出,每一步都清晰可操作。 1. 为什么说“拖图就出结果”不是宣传话术? 很多多模态模型标榜“支持图文理解”,但实际用起来才发现:要装依赖、改路径、调精度、修CUDA版本、

前端防范 XSS(跨站脚本攻击)

目录 一、防范措施 1.layui util  核心转义的特殊字符 示例 2.js-xss.js库 安装 1. Node.js 环境(npm/yarn) 2. 浏览器环境 核心 API 基础使用 1. 基础过滤(默认规则) 2. 自定义过滤规则 (1)允许特定标签 (2)允许特定属性 (3)自定义标签处理 (4)自定义属性处理 (5)转义特定字符 常见场景示例 1. 过滤用户输入的评论内容 2. 允许特定富文本标签(如富文本编辑器内容) 注意事项 更多配置 XSS(跨站脚本攻击)是一种常见的网络攻击手段,它允许攻击者将恶意脚本注入到其他用户的浏览器中。

详细教程:如何从前端查看调用接口、传参及返回结果(附带图片案例)

详细教程:如何从前端查看调用接口、传参及返回结果(附带图片案例)

目录 1. 打开浏览器开发者工具 2. 使用 Network 面板 3. 查看具体的API请求 a. Headers b. Payload c. Response d. Preview e. Timing 4. 实际操作步骤 5. 常见问题及解决方法 a. 无法看到API请求 b. 请求失败 c. 跨域问题(CORS) 作为一名后端工程师,理解前端如何调用接口、传递参数以及接收返回值是非常重要的。下面将详细介绍如何通过浏览器开发者工具(F12)查看和分析这些信息,并附带图片案例帮助你更好地理解。 1. 打开浏览器开发者工具 按下 F12 或右键点击页面选择“检查”可以打开浏览器的开发者工具。常用的浏览器如Chrome、Firefox等都内置了开发者工具。下面是我选择我的一篇文章,打开开发者工具进行演示。 2. 使用

Cursor+Codex隐藏技巧:用截图秒修前端Bug的保姆级教程(React/Chakra UI案例)

Cursor+Codex隐藏技巧:用截图秒修前端Bug的保姆级教程(React/Chakra UI案例) 前端开发中最令人头疼的莫过于那些难以定位的UI问题——元素错位、样式冲突、响应式失效...传统调试方式往往需要反复修改代码、刷新页面、检查元素。现在,通过Cursor编辑器集成的Codex功能,你可以直接用截图交互快速定位和修复这些问题。本文将带你从零开始,掌握这套革命性的调试工作流。 1. 环境准备与基础配置 在开始之前,确保你已经具备以下环境: * Cursor编辑器最新版(v2.5+) * Node.js 18.x及以上版本 * React 18项目(本文以Chakra UI 2.x为例) 首先在Cursor中安装Codex插件: 1. 点击左侧扩展图标 2. 搜索"Codex"并安装 3. 登录你的OpenAI账户(需要ChatGPT Plus订阅) 关键配置项: // 在项目根目录创建.