ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

LiveKit Agents 快速入门实战教程:实时语音 AI 智能体从终端调试到生产上线的完整路线

LiveKit Agents 快速入门实战教程:实时语音 AI 智能体从终端调试到生产上线的完整路线 LiveKit Agents 快速入门实战教程实时语音 AI 智能体从终端调试到生产上线的完整路线【免费下载链接】agentsA framework for building realtime voice AI agents ️项目地址: https://gitcode.com/GitHub_Trending/agen/agentsLiveKit Agents 是一个用 Python 编写的框架专门用来在服务器上构建实时语音 AI 智能体它会听用户说话、用大模型思考、再把答案用合成的声音说出来还能调用工具、与其他智能体接力协作。这套框架最大的特点是四层都可拆——调度进程、会话管道、智能体角色、模型插件彼此独立你可以只换一个 TTS 模型而不碰其他代码。本文按装环境 → 跑终端 → 接客户端 → 加工具 → 写测试 → 上生产的真实动手顺序展开所有结论都来自仓库里的源码与示例跟着走一遍半小时左右就能让一个语音智能体在终端里开口说话。一条命令装好 LiveKit AgentsLiveKit Agents 采用核心库 插件的布局核心框架在 livekit-agents/livekit/agents/ 目录负责会话管理、任务调度、音频 I/O 这些骨架工作而 OpenAI、Deepgram、Cartesia 等 70 多家模型服务商的接入代码全部以插件形式独立放在 livekit-plugins/ 下共 76 个插件目录。 这种设计的好处是你只安装自己要用模型的插件不用为用不到的服务商付出依赖代价。安装时用方括号里的 extras 指定即可pip install livekit-agents[openai,deepgram,cartesia]想换模型栈改方括号里的名字就行。核心库本身通过 livekit-agents/livekit/agents/init.py 把AgentServer、AgentSession、Agent、function_tool、ChatContext等常用符号一次性导出写智能体时几乎只需from livekit.agents import ...一行导入。另外 README 里给了一个给 AI 编码助手用的配套建议让编码 Agent 接入 LiveKit 官方文档 MCP 服务器提供最新的 API 细节和 Agent Skill提供构建语音应用的架构方法论两者配合能让 AI 生成的代码更贴合这套框架的惯用法。先把智能体跑进你的终端在接入真实房间之前最省心的验证方式是让智能体直接在你电脑的麦克风/扬声器里说话。写一个myagent.py核心骨架长这样注释标出了每段的作用from livekit.agents import ( Agent, AgentServer, AgentSession, JobContext, RunContext, cli, function_tool, inference, ) # 1. 工具docstring 是给 LLM 看的说明类型标注参数由 LLM 填充 function_tool async def lookup_weather(context: RunContext, location: str): Used to look up weather information. return {weather: sunny, temperature: 70} server AgentServer() # 2. 每会话入口每当一个房间任务被调度框架就调用它一次 server.rtc_session() async def entrypoint(ctx: JobContext): # 3. 会话管道vad/stt/llm/tts 四个零件可任意混搭 session AgentSession( vadinference.VAD(), sttinference.STT(deepgram/nova-3, languagemulti), llminference.LLM(google/gemma-4-31b-it), ttsinference.TTS(cartesia/sonic-3, voice9626c31c-...), ) # 4. 智能体 一段指令 一组工具 agent Agent( instructionsYou are a friendly voice assistant built by LiveKit., tools[lookup_weather], ) await session.start(agentagent, roomctx.room) # 5. 让智能体主动开口打招呼实现先说话的开场模式 await session.generate_reply(instructionsgreet the user and ask about their day) if __name__ __main__: cli.run_app(server)这里有四个概念值得花两分钟弄清楚它们分别对应仓库里的具体源码位置概念大白话类比正式定义Agent一个剧本带明确指令instructions的 LLM 应用见 livekit-agents/livekit/agents/voice/agent.pyAgentSession一个舞台智能体的容器管理音频输入、识别、生成、播放的完整管道见 livekit-agents/livekit/agents/voice/agent_session.pyentrypointWeb 框架里的路由处理函数交互会话的入口协程通过server.rtc_session()注册每次任务被调度就执行一次框架注入的JobContext里带着本次会话的 WebRTC 房间ctx.roomAgentServer后台的调度中心主进程负责任务调度并为用户会话拉起智能体见 livekit-agents/livekit/agents/worker.py两个容易踩的点function_tool装饰的异步函数会被自动包成FunctionTooldocstring 成为 LLM 看到的工具说明参数类型标注决定 LLM 怎么填参context: RunContext是框架注入的运行期上下文能访问会话状态与共享数据。示例里的inference.STT/LLM/TTS走的是 LiveKit Inference 统一 API通过 LiveKit Cloud 访问各家模型如果你手里有各服务商的 key可以直接替换成deepgram.STT(modelnova-3)、openai.LLM(...)、cartesia.TTS(...)这样的插件实例。运行前需要三个环境变量指向你的 LiveKit Cloud 或自建服务器LIVEKIT_URL、LIVEKIT_API_KEY、LIVEKIT_API_SECRET。从终端走向真实客户端三种模式怎么选同一个脚本通过cli.run_app(server)暴露三个子命令覆盖调试 → 联调 → 生产三个阶段python myagent.py console # 终端模式本地音频输入输出无需外部服务器 python myagent.py dev # 开发模式注册到 LiveKit 服务器等真实客户端接入 python myagent.py start # 生产模式带生产级优化的正式运行 怎么选看你要验证什么只想确认智能体行为对不对用console想验证客户端接入链路通不通用dev任何 LiveKit 客户端 SDK 或电话集成都能当对端部署给真实用户用start。源码层面三种模式的实现路径并不相同理解这一点能帮你排查不少看起来连不上的问题实现位于 livekit-agents/livekit/agents/cli/_legacy.py 与 livekit-agents/livekit/agents/cli/cli.pyconsole 为什么不需要服务器它启动一个独立的_ConsoleWorker线程以devmodeTrue, unregisteredTrue运行 server不向任何服务器注册随后用server.simulate_job(console-room, ...)伪造一个任务来驱动 entrypoint——用户就是你的麦克风。控制台还支持音频/文本两种交互模式切换以及--record会话录制。dev/start 的凭据解析二者的--url/--api-key/--api-secret参数都声明了对应的envvar所以命令行参数和环境变量完全等价设好三个环境变量后裸跑即可--log-level同理支持LIVEKIT_LOG_LEVEL。生产环境的优雅退出dev/start 都走_run_worker它对信号处理做得相当细——首次 CtrlC 只是预约退出非 dev 模式下先执行server.drain()等在途语音会话结束start可用--drain-timeout配置等待时长若 3 秒看门狗_EXIT_ESCALATION_TIMEOUT 3.0发现事件循环被同步代码卡死才升级为强制中断再按一次 CtrlC 则os._exit(1)立即退出。这套机制保证了收到停止信号时不会粗暴截断正在进行的通话。⚠️ 版本现状提醒Python 侧的console与dev子命令都已在源码中标注 deprecated建议迁移到 LiveKit CLI 的lk agent console/lk agent devdev的进程内热重载hot-reload已从 Python CLI 移除该能力随lk agent dev提供。选型调试手段时记得把这条算进去。给智能体装上手和接力棒上一节的lookup_weather演示了智能体的手——工具调用。当一次会话需要多个角色分工时比如先由信息收集员问清姓名和籍贯再交给故事讲述员讲故事框架支持在一个工具的返回值里直接交出新智能体完成交接handoff。完整示例见官方文档骨架如下class IntroAgent(Agent): async def on_enter(self): self.session.generate_reply(instructionsgreet the user and gather information) function_tool async def information_gathered(self, context: RunContext, name: str, location: str): Called when the user has provided the information... context.userdata.name name # 把状态写进会话级共享数据 context.userdata.location location story_agent StoryAgent(name, location) return story_agent, Lets start the story! # 返回 (新智能体, 衔接话术)这个片段浓缩了交接的三个关键机制工具即跳转当工具返回值是Agent实例配上一句衔接话术时框架会在当前会话内切换活动智能体并播放过渡语对话不中断userdata 跨智能体共享AgentSession[StoryData]用类型参数声明会话级共享数据对象前一个智能体通过context.userdata把收集到的信息留给后继者实现状态延续每智能体模型覆盖后继的StoryAgent在构造时可以传入llmopenai.realtime.RealtimeModel(voiceecho)在交接的同时把管线从STTLLMTTS 级联切到端到端的 Realtime API并显式携带chat_ctx保留对话历史。用测试给智能体的回答判卷LLM 的输出天然带随机性今天它答对了不代表明天还对。LiveKit Agents 内置了测试体系session.run(user_input...)模拟一次用户输入、驱动完整管线返回RunResult你可以像断言 HTTP 响应一样断言事件流pytest.mark.asyncio async def test_no_availability() - None: llm google.LLM() async with AgentSession(llmllm) as sess: await sess.start(MyAgent()) result await sess.run(user_inputHello, I need to place an order.) # 逐事件断言调了哪个工具 → 工具执行完成 → 助手说了什么 result.expect.skip_next_event_if(typemessage, roleassistant) result.expect.next_event().is_function_call(namestart_order) result.expect.next_event().is_function_call_output() await (result.expect.next_event().is_message(roleassistant) .judge(llm, intentassistant should be asking the user what they would like))三个值得注意的设计链式事件断言is_function_call(name...)校验工具名、is_function_call_output()校验执行完成、is_message(role...)校验助手回复断言原语定义在 livekit-agents/livekit/agents/voice/run_result.pyjudge 裁判式评分像助手有没有问用户想点什么这种没法硬编码的语义判断交给另一个 LLM 按intent打分容忍不确定性skip_next_event_if处理模型可能先吐一个空消息这类分支。如果不想拉起完整的 worker/AgentServer 进程做进程内测试livekit-agents/livekit/agents/testing.py 里的fake_job_context上下文管理器可以注入一个伪造的JobContext让get_job_context()等访问点行为与真实任务一致可直接配合真实房间调用session.start(...)。仓库自己的 tests/ 目录有 200 多个测试文件如test_agent_session.py、test_false_interruption_resume.py、test_preemptive_pause_deadlock.py既是用法示范也覆盖了误打断恢复、预生成死锁等语音交互里的疑难路径值得翻一翻。仓库里现成的示例都能拿来改examples/ 目录是一组可直接运行的完整场景每个带Dockerfile的都能容器化部署示例场景路径Starter Agent面向语音对话优化的起步智能体examples/voice_agents/basic_agent.pyMCP support接入 MCP 服务器提供的工具examples/voice_agents/mcp/Multi-user transcriber输出房间内所有用户的转写examples/other/transcription/Video avatars基于 Tavus、Bithuman 等数字人插件的视频智能体examples/avatar/除此之外还有frontdesk日程前台、healthcare医疗预约、hotel_receptionist酒店前台附策略文档与评测场景 YAML、survey问卷、telephony电话 IVR、primitives回声等最底层原语等成套示例各配README.md详见 examples/README.md。其中 examples/voice_agents/basic_agent.py 值得重点读它在前文最简骨架上演示了工程化配置——TurnHandlingOptions里的resume_false_interruption误打断后自动恢复播放、preemptive_generation用户还没说完就预生成回复以压首字延迟、aec_warmup_duration开播初期屏蔽打断留给回声消除校准、tts_text_transforms过滤 emoji/markdown以及stt_context_options关键词检测把高频术语注入 STT 上下文提升专名识别率——这些正是语义级轮次检测减少误打断等特性在实际代码里的落点。日常开发该遵守的几条约定如果你要在这个仓库里二次开发或给它提 PRREADME 的 Contributing 章节定了几条约定事项命令说明装开发依赖uv sync --all-extras --dev项目用 uv 做包管理跑示例在examples/下建.env模板见 examples/.env.example后执行uv run examples/voice_agents/basic_agent.py dev.env里放 LiveKit 与各模型服务商凭据跑单元测试uv run pytest --unit测试在 tests/各插件的集成测试需要对应 API 凭据在维护者 PR 上由 CI 自动跑格式化与 Lintuv run ruff format和uv run ruff check --fix统一用 ruff生成本地 API 文档uv run --active pdoc --skip-errors --html --output-dirdocs livekit基于 pdoc商用前必须核对的两份许可证 这套框架有两份互相独立的许可商用前都要过目框架本体Agents采用Apache-2.0见 LICENSE商业使用友好LiveKit 的轮次检测turn detection模型单独采用LiveKit Model License见 MODEL_LICENSE。也就是说如果你启用了语义级轮次检测模型侧的条款与框架本体是分离的需要分别确认。动手前用这份选型清单过一遍最后给一份开工前的 checklist按顺序打勾即可装好了吗pip install livekit-agents[你的模型插件]extras 里只留实际用到的服务商跑起来了吗最简骨架 python myagent.py console在终端里双向语音通了凭据配齐了吗LIVEKIT_URL/LIVEKIT_API_KEY/LIVEKIT_API_SECRET三个环境变量dev/start 模式必需接入方确定了吗Web 端用 LiveKit 客户端 SDK电话场景走 telephony 栈快速联调可先用官方 Agents Playground模型混搭定了吗STT/LLM/TTS/Realtime 各选一家记住它们是可以单独替换的打断策略调了吗参考 basic_agent 的TurnHandlingOptions按需开误打断恢复与预生成测试写了吗至少用RunResult.expect judge 覆盖一条关键对话路径许可证确认了吗Apache-2.0 Model License 两份都读过迁移计划有吗Python CLI 的 console/dev 已 deprecated新项目建议直接上 LiveKit CLI 的lk agent工具链。把这份清单走完你的语音智能体就已经具备了从终端里会说话的 Demo长成生产环境里稳定接电话的同事的全部前置条件。仓库里 livekit-agents/ 下的每一层实现、examples/ 里的每个场景都是可以随时翻开的参考手册。【免费下载链接】agentsA framework for building realtime voice AI agents ️项目地址: https://gitcode.com/GitHub_Trending/agen/agents创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表